(八)最小二乘法 拟合直线

ぃ、小莉子 提交于 2019-11-29 04:31:05

 

 1 #coding=utf-8
 2 from numpy import *
 3 import numpy as np
 4 import matplotlib.pyplot as plt
 5 
 6 plt.close()
 7 fig=plt.figure()
 8 plt.grid(True)
 9 plt.axis([0,1,0,5])
10 #plt.title("")
11 # 每个小的方括号是一列
12 point=[[0,0.9],[0.2,1.9],[0.4,2.8],[0.6,3.3],[0.8,4.2]]
13 plt.xlabel("X")
14 plt.ylabel("Y")
15 Xsum = 0.0;
16 Isum = 0.0;
17 Ysum = 0.0;
18 X2sum = 0.0;
19 XYsum = 0.0;
20 
21 
22 
23 for i in range(0,5):
24 
25     xi=point[i][0];
26     yi=point[i][1];
27     plt.scatter(xi,yi,color="red");
28     show_point = "["+ str(xi) +","+ str(yi) + "]";
29     plt.text(xi,yi,show_point);
30 
31     Xsum = Xsum+xi;
32     Isum = Isum+1;
33     Ysum = Ysum+yi;
34     X2sum = X2sum+xi**2;
35     XYsum = XYsum+xi*yi;
36 print  Xsum;
37 print Isum;
38 print Ysum;
39 print X2sum;
40 print XYsum;
41 
42 # 将矩阵运算化为 mat1 * mat3 = mat2
43 # _mat1 设为 mat1 的逆矩阵
44 # 则有 mat3 =  _mat1 * mat2
45 # 每个小的方括号是一行
46 m1=[[Isum,Xsum],[Xsum, X2sum]];
47 mat1 = np.matrix(m1);
48 m2=[[Ysum], [XYsum]];
49 mat2 = np.matrix(m2);
50 _mat1 =mat1.getI();
51 mat3 = _mat1*mat2
52 
53 # 将矩阵转化为list来提取数据
54 # y = a+bx
55 m3=mat3.tolist();
56 a = m3[0][0];
57 b = m3[1][0];
58 
59 # 绘制回归线
60 x = np.linspace(0,1)
61 y = a + b*x;
62 plt.plot(x,y)
63 show_line = "y="+str(a)+"+"+str(b)+"x";
64 plt.text(0.1,4,show_line,);
65 plt.show()

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!