โจทย์ทั้งหมด
ปานกลาง 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

การถดถอยเชิงเส้นอย่างง่าย (กำลังสองน้อยที่สุด)

หาเส้นตรงที่เข้ากับจุดข้อมูลมากที่สุดด้วยสูตรกำลังสองน้อยที่สุด

สิ่งที่คุณจะได้เรียนรู้

  • หาเส้นตรงด้วยสูตรปิด
  • คำนวณความชันและจุดตัดแกน
  • เข้าใจว่าเส้นที่เหมาะสมที่สุดหมายถึงอะไร

โจทย์

การถดถอยเชิงเส้น หาเส้นตรง y = slope × x + intercept ที่เข้ากับข้อมูลมากที่สุด คือเส้นที่ผลรวมกำลังสองของความคลาดเคลื่อนน้อยที่สุด สำหรับตัวแปรอินพุตเดียวมีสูตรที่แน่นอน:

  • slope = Σ(x - x̄)(y - ȳ) / Σ(x - x̄)²
  • intercept = ȳ - slope × x̄

โดย x̄ และ ȳ คือค่าเฉลี่ยของ xs และ ys ถ้า xs ทุกค่าเท่ากัน ให้คืนค่า slope 0 และ intercept ȳ

จงเขียน linear_regression(xs, ys)

อินพุต

xs, ys: ค่า x และ y ของจุดข้อมูล (ความยาวเท่ากัน)

เอาต์พุต

คืนค่า [slope, intercept]

เงื่อนไข

1 ≤ จำนวนจุด ≤ 10,000

-10,000 ≤ แต่ละค่า ≤ 10,000

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
xs = [1.0, 2.0, 3.0, 4.0]
ys = [3.0, 5.0, 7.0, 9.0]

ผลลัพธ์ที่คาดหวัง:
expected = [2.0, 1.0]
อินพุต:
std::vector<double> xs = {1.0, 2.0, 3.0, 4.0};
std::vector<double> ys = {3.0, 5.0, 7.0, 9.0};

ผลลัพธ์ที่คาดหวัง:
std::vector<double> expected = {2.0, 1.0};
อินพุต:
double[] xs = new double[] {1.0, 2.0, 3.0, 4.0};
double[] ys = new double[] {3.0, 5.0, 7.0, 9.0};

ผลลัพธ์ที่คาดหวัง:
double[] expected = new double[] {2.0, 1.0};

คำอธิบาย

จุดทั้งหมดอยู่บน y = 2x + 1 พอดี x̄ = 2.5, ȳ = 6, Σ(x - x̄)(y - ȳ) = 10 และ Σ(x - x̄)² = 5 ดังนั้น slope = 2 และ intercept = 6 - 2 × 2.5 = 1

ตัวอย่างที่ 2
อินพุต:
xs = [0.0, 1.0, 2.0]
ys = [1.0, 3.0, 2.0]

ผลลัพธ์ที่คาดหวัง:
expected = [0.5, 1.5]
อินพุต:
std::vector<double> xs = {0.0, 1.0, 2.0};
std::vector<double> ys = {1.0, 3.0, 2.0};

ผลลัพธ์ที่คาดหวัง:
std::vector<double> expected = {0.5, 1.5};
อินพุต:
double[] xs = new double[] {0.0, 1.0, 2.0};
double[] ys = new double[] {1.0, 3.0, 2.0};

ผลลัพธ์ที่คาดหวัง:
double[] expected = new double[] {0.5, 1.5};

คำอธิบาย

x̄ = 1 และ ȳ = 2 Σ(x - x̄)(y - ȳ) = (-1)(-1) + 0 + (1)(0) = 1 และ Σ(x - x̄)² = 2 ดังนั้น slope = 0.5 และ intercept = 2 - 0.5 × 1 = 1.5

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก