一、最小二乘法(Least Squares):
假设样本集单个样本的线性函数为:
为解二元一次方程中的a,b,给上式两边乘以xi得到(也可以两边乘yi):
方程组:
解样本集方程组:
矩阵形式:
对矩阵 求逆:
则:
1 public static void LeastSquare(List<Point> points, out double a, out double b) 2 { 3 int N = points.Count; 4 if (N < 2) 5 { 6 a = 0; 7 b = 0; 8 return; 9 } 10 double X1 = 0, Y1 = 0, X2 = 0, X1Y1 = 0; 11 for (int i = 0; i < N; ++i) 12 { 13 X2 += points[i].X * points[i].X; 14 X1 += points[i].X; 15 X1Y1 += points[i].X * points[i].Y; 16 Y1 += points[i].Y; 17 } 18 a = (X1Y1 * N - X1 * Y1) / (X2 * N - X1 * X1); 19 b = (X2 * Y1 - X1 * X1Y1) / (X2 * N - X1 * X1); 20 }