โจทย์
การถดถอยโลจิสติก เป็นโมเดลเชิงเส้นสำหรับคำถามแบบใช่หรือไม่ สำหรับแต่ละตัวอย่าง มันคำนวณความน่าจะเป็นแล้วแปลงเป็นคลาส:
- z = x₁×w₁ + … + xₙ×wₙ + bias
- p = 1 / (1 + e^(-z))
- คลาส = 1 ถ้า p ≥ threshold ไม่เช่นนั้น 0
จงเขียน logistic_predict(samples, weights, bias, threshold)
อินพุต
samples: หนึ่งแถวของฟีเจอร์ n ตัวต่อตัวอย่าง
weights: น้ำหนัก n ค่า
bias: ไบแอส
threshold: ความน่าจะเป็นที่ต้องถึงเพื่อทำนายคลาส 1 (อยู่ระหว่าง 0 และ 1 โดยไม่รวมขอบ)
เอาต์พุต
คืนค่าคลาสที่ทำนาย (0 หรือ 1) ของแต่ละตัวอย่างตามลำดับ
เงื่อนไข
1 ≤ จำนวนตัวอย่าง ≤ 1,000, 1 ≤ n ≤ 50
-100 ≤ ฟีเจอร์ น้ำหนัก และไบแอสแต่ละค่า ≤ 100
0 < threshold < 1
ตัวอย่าง
อินพุต:
bias = -1.0
samples = [
[2.0, 1.0],
[0.0, 0.0],
[-1.0, -3.0]
]
weights = [1.5, -0.5]
threshold = 0.5
ผลลัพธ์ที่คาดหวัง:
expected = [1, 0, 0]
อินพุต:
double bias = -1.0;
std::vector<std::vector<double>> samples = {
{2.0, 1.0},
{0.0, 0.0},
{-1.0, -3.0}
};
std::vector<double> weights = {1.5, -0.5};
double threshold = 0.5;
ผลลัพธ์ที่คาดหวัง:
std::vector<long long> expected = {1, 0, 0};
อินพุต:
double bias = -1.0;
double[][] samples = new double[][] {
new double[] {2.0, 1.0},
new double[] {0.0, 0.0},
new double[] {-1.0, -3.0}
};
double[] weights = new double[] {1.5, -0.5};
double threshold = 0.5;
ผลลัพธ์ที่คาดหวัง:
long[] expected = new long[] {1, 0, 0};
คำอธิบาย
ตัวอย่าง 1: z = 3 - 0.5 - 1 = 1.5, p ≈ 0.818 → 1 ตัวอย่าง 2: z = -1, p ≈ 0.269 → 0 ตัวอย่าง 3: z = -1.5 + 1.5 - 1 = -1, p ≈ 0.269 → 0 ผลลัพธ์: [1, 0, 0]
อินพุต:
bias = -2.0
samples = [
[1.0],
[2.0],
[3.0]
]
weights = [1.0]
threshold = 0.7
ผลลัพธ์ที่คาดหวัง:
expected = [0, 0, 1]
อินพุต:
double bias = -2.0;
std::vector<std::vector<double>> samples = {
{1.0},
{2.0},
{3.0}
};
std::vector<double> weights = {1.0};
double threshold = 0.7;
ผลลัพธ์ที่คาดหวัง:
std::vector<long long> expected = {0, 0, 1};
อินพุต:
double bias = -2.0;
double[][] samples = new double[][] {
new double[] {1.0},
new double[] {2.0},
new double[] {3.0}
};
double[] weights = new double[] {1.0};
double threshold = 0.7;
ผลลัพธ์ที่คาดหวัง:
long[] expected = new long[] {0, 0, 1};
คำอธิบาย
ความน่าจะเป็นคือ σ(-1) ≈ 0.269, σ(0) = 0.5 และ σ(1) ≈ 0.731 มีเพียงค่าสุดท้ายที่ถึงเกณฑ์ 0.7 ผลลัพธ์จึงเป็น [0, 0, 1]
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน