โจทย์
แทนที่จะใช้สูตร ให้ฝึกเส้นตรง y = w × x + b ด้วย การลดเกรเดียนต์แบบแบตช์ บนค่าคลาดเคลื่อนกำลังสองเฉลี่ย MSE = Σ(w × x + b - y)² / n
เริ่มที่ w = 0 และ b = 0 ในแต่ละ epoch ให้ใช้ ทุก จุด:
- errorᵢ = w × xᵢ + b - yᵢ
- dw = (2 / n) × Σ errorᵢ × xᵢ และ db = (2 / n) × Σ errorᵢ
- w ← w - learning_rate × dw และ b ← b - learning_rate × db (ทั้งสองคำนวณจากค่าคลาดเคลื่อนชุดเดียวกัน)
จงเขียน train_linear_regression(xs, ys, learning_rate, epochs)
อินพุต
xs, ys: จุดข้อมูล (ความยาวเท่ากัน)
learning_rate, epochs: ขนาดก้าวและจำนวนครั้งที่ปรับค่า
เอาต์พุต
คืนค่า [w, b] หลังการฝึก
เงื่อนไข
1 ≤ จำนวนจุด ≤ 1,000, 0 ≤ epochs ≤ 10,000
0 < learning_rate ≤ 1
-100 ≤ แต่ละค่า ≤ 100
ตัวอย่าง
อินพุต:
xs = [1.0, 2.0]
ys = [2.0, 4.0]
epochs = 1
learning_rate = 0.1
ผลลัพธ์ที่คาดหวัง:
expected = [1.0, 0.6]
อินพุต:
std::vector<double> xs = {1.0, 2.0};
std::vector<double> ys = {2.0, 4.0};
long long epochs = 1;
double learning_rate = 0.1;
ผลลัพธ์ที่คาดหวัง:
std::vector<double> expected = {1.0, 0.6};
อินพุต:
double[] xs = new double[] {1.0, 2.0};
double[] ys = new double[] {2.0, 4.0};
long epochs = 1;
double learning_rate = 0.1;
ผลลัพธ์ที่คาดหวัง:
double[] expected = new double[] {1.0, 0.6};
คำอธิบาย
เมื่อ w = b = 0 ค่าคลาดเคลื่อนคือ -2 และ -4 dw = (2 / 2) × (-2×1 - 4×2) = -10 และ db = (2 / 2) × (-2 - 4) = -6 ดังนั้น w = 0 - 0.1 × (-10) = 1 และ b = 0 - 0.1 × (-6) = 0.6 ผลลัพธ์: [1, 0.6]
อินพุต:
xs = [1.0, 2.0, 3.0]
ys = [3.0, 5.0, 7.0]
epochs = 2000
learning_rate = 0.05
ผลลัพธ์ที่คาดหวัง:
expected = [2.0, 1.0]
อินพุต:
std::vector<double> xs = {1.0, 2.0, 3.0};
std::vector<double> ys = {3.0, 5.0, 7.0};
long long epochs = 2000;
double learning_rate = 0.05;
ผลลัพธ์ที่คาดหวัง:
std::vector<double> expected = {2.0, 1.0};
อินพุต:
double[] xs = new double[] {1.0, 2.0, 3.0};
double[] ys = new double[] {3.0, 5.0, 7.0};
long epochs = 2000;
double learning_rate = 0.05;
ผลลัพธ์ที่คาดหวัง:
double[] expected = new double[] {2.0, 1.0};
คำอธิบาย
ข้อมูลอยู่บน y = 2x + 1 หลังจาก 2,000 epoch การลดเกรเดียนต์ลู่เข้าสู่ w = 2 และ b = 1 ซึ่งตรงกับคำตอบจากสูตรกำลังสองน้อยที่สุด
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน