曲线拟合最小二乘法
其中使用了机器学习之中得正规化方程直接计算得到theta
# coding=gbk;
# 要输入的数据data=165 187 123 126 150 172 123 125 141 148
import numpy as np;
import matplotlib.pyplot as plt;
def Data_in(list0,list1,list2):
list0=input("请输入离散点的值:").split(" ");
for i in range(0,len(list0)):
if i%2==0: #如果是奇数 那么指的也就是x
list1.append(float(list0[i]));
else: #如果是偶数 那么就是y
list2.append(float(list0[i]));
return list0,list1,list2;
def draw_rawData(x1,y1):
plt.scatter(x1,y1,color="green");
plt.xlabel("value of x");
plt.ylabel("value of y");
return plt;
list_temp=[]; x=[]; y=[];
list_temp,x,y=Data_in(list_temp,x,y);
list_x=x.copy()
list_y=y.copy()
plt1=draw_rawData(list_x,list_y);
plt1.show()
input("Program paused.Press ENTER to continue");
m=len(y);
x=np.c_[np.ones(m),x];
y=np.c_[y];
theta=np.zeros(2);
theta=np.c_[theta];
theta=((np.linalg.inv((x.T).dot(x))).dot(x.T)).dot(y); #正规化方程
plt2=draw_rawData(list_x, list_y);
x1=np.arange(100,180,0.1)
y1=theta[0][0]+x1*theta[1][0];
plt.plot(x1,y1,c='r')
plt2.title('final');
plt2.show();
运行结果:
遇事不决,可问春风