บทนำ
จากชุดจุดข้อมูลที่กำหนด การถดถอยเชิงเส้นจะหาสมการของเส้นตรง จุดที่กำหนดจะอยู่บนเส้นตรงนี้ โดยใช้สูตรนี้ เราสามารถทำนายค่าสำหรับจุดเฉพาะที่ไม่ได้อยู่ในชุดข้อมูลปัจจุบันได้
สูตรสำหรับแก้ปัญหาการถดถอยเชิงเส้นด้วยจุดข้อมูลมีดังนี้:

โดยที่ m และ c คือความชันและจุดตัดแกน y ตามลำดับ ด้วยนิพจน์เหล่านี้ เราสามารถได้สมการเส้นตรงในรูป: y = mx + c
อินพุตและเอาต์พุต
Input: พิกัด (x, y) ของจุดบางจุด {(1,3), (2,4), (3,5), (4,6), (5,8)}
Output: ความชัน: 1.2, จุดตัด: 1.6, สมการ: y = 1.2x + 1.6
อัลกอริทึม
linReg(coord)
Input: ชุดจุดพิกัดที่กำหนด
Output: ความชัน m และจุดตัดแกน y c
Begin
for i := 1 to n, do
sumX := sumX + coord[i,0]
sumY := sumY + coord[i,1]
sumXsq := sumXsq + (coord[i,0]*coord[i,0])
sumXY := sumXY + (coord[i,0] * coord[i,1])
done
m := (n * sumXY - (sumX*sumY)) / (n * sumXsq - (sumX * sumX))
c := (sumY / n) - (m * sumX)/n
End
ตัวอย่างโค้ด (C++)
#include <iostream>
#include <cmath>
#define N 5
using namespace std;
void linReg(int coord[N][2], float &m, float &c) {
float sx2 = 0, sx = 0, sxy = 0, sy = 0;
for (int i = 0; i < N; i++) {
sx += coord[i][0]; // ผลรวมของ x
sy += coord[i][1]; // ผลรวมของ y
sx2 += coord[i][0]*coord[i][0]; // ผลรวมของ x^2
sxy += coord[i][0]*coord[i][1]; // ผลรวมของ x*y
}
// หาความชันและจุดตัด
m = (N*sxy - (sx*sy)) / (N*sx2 - (sx*sx));
c = (sy/N) - (m*sx)/N;
}
main() {
// อาเรย์ 2D นี้เก็บจุดพิกัด
int point[N][2] = {{1,3},{2,4},{3,5},{4,6},{5,8}};
float m, c;
linReg(point, m, c);
cout << "The slope: " << m << " The Intercept: " << c << endl;
cout << "The equation: " << "y = " << m << "x + " << c;
}
ผลลัพธ์
The slope: 1.2 The Intercept: 1.6 The equation: y = 1.2x + 1.6