Computer >> Máy Tính >  >> Lập trình >> Lập trình

Hồi quy tuyến tính


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

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

Hồi quy tuyến tính

Ở đây m và c lần lượt là hệ số góc và giao điểm y. Sử dụng các biểu thức này, chúng ta có thể nhận được phương trình của đường thẳng ở dạng sau:𝑦 =𝑚𝑥 + 𝑐.

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

Input:
The (x, y) coordinates of some points. {(1,3), (2,4), (3,5), (4,6), (5,8)}
Output:
The slope: 1.2 The Intercept: 1.6
The equation: 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.

Đầu ra: Hệ số góc m và giao điể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

Ví dụ

#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];    //sum of x
      sy += coord[i][1];   //sum of y

      sx2 += coord[i][0]*coord[i][0];      //sum of x^2
      sxy += coord[i][0]*coord[i][1];     //sum of x*y
   }

   // finding slope and intercept
   m = (N*sxy-(sx*sy))/(N*sx2-(sx*sx));
   c = (sy/N)-(m*sx)/N;
}

main() {
   // this 2d array holds coordinate points
   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;
}

Đầu ra

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