文章目录
线性回归找到最佳拟合直线
loaddata导入数据,返回数据和结果值。
regress公式带入即可,这里记得要做个判断来确定np.dot(data.T,data)
是否为0,如果行列式为0,计算逆矩阵的时候将会出错。
def loaddata(filename):
data = []
label = []
with open(filename) as fr:
for line in fr.readlines():
arr = line.strip().split('\t')
data.append(arr[:-1])
label.append(float(arr[-1]))
data = np.array(data).astype(float)
label = np.expand_dims(np.array(label),axis=1)
return data,label
def regress(data,label):
if np.linalg.det(np.dot(data.T,data))==0.0:
print('the array is singular, cannot do inverse')
return
ws = np.dot(np.linalg.inv(np.dot(data.T,data)),np.dot(data.T,label))
return ws
绘图查看结果:
ws = regress(data,label)
import matplotlib.pyplot as plt
plt.figure()
plt.subplot(111)
plt.scatter(data[:,1],label)
xcopy = data.copy()
xcopy.sort(0)#按行排序 1按列排序
yhat = np.dot(xcopy,ws)
plt.plot(xcopy,yhat)
plt.show()
局部加权线性回归函数
线性回归函数可能出现欠拟合现象,这里我们采用局部线性回归函数来减小方差。
这里我们构建一个对角权重矩阵,该矩阵为每个样本点初始化一个权重,随着样本点与待预测点距离的递增,权重以指数级衰减,通过参数k控制衰减的速度。
未完待续…