Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Hồi quy tuyến tính (Linear Regression)


Giới thiệu

Từ một tập hợp các điểm dữ liệu cho trước, hồi quy tuyến tính tìm phương trình của một đường thẳng. Các điểm cho trước sẽ tuân theo đường thẳng này. Sử dụng công thức này, ta có thể dự đoán giá trị cho một số điểm cụ thể khác, chưa có trong tập dữ liệu hiện tại.

Để giải bài toán hồi quy tuyến tính bằng một số điểm dữ liệu, ta phải tuân theo các công thức sau:

Hồi quy tuyến tính (Linear Regression)

Ở đây m và c lần lượt là độ dốc và điểm cắt trục y. Sử dụng các biểu thức này, ta có thể được phương trình đường thẳng dưới dạng: y = mx + c.

Đầu vào và Đầu ra

Đầu vào: Tọa độ (x, y) của một số điểm. {(1,3), (2,4), (3,5), (4,6), (5,8)}
Đầu ra: Độ dốc: 1.2; Điểm cắt: 1.6; Phương trình: y = 1.2x + 1.6

Thuật toán

linReg(coord)
Đầu vào: Tập hợp các điểm tọa độ cho trước.
Đầu ra: Độ dốc m và điểm cắt trục 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

Ví dụ (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];  // tổng x
        sy += coord[i][1];  // tổng y
        sx2 += coord[i][0]*coord[i][0];  // tổng x^2
        sxy += coord[i][0]*coord[i][1];  // tổng x*y
    }
    // tìm độ dốc và điểm cắt
    m = (N*sxy-(sx*sy))/(N*sx2-(sx*sx));
    c = (sy/N)-(m*sx)/N;
}

main() {
    // mảng 2D này lưu các điểm tọa độ
    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;
}

Kết quả

The slope: 1.2 The Intercept: 1.6 The equation: y = 1.2x + 1.6