机器学习实战(6) 预测数值型数据:回归

线性回归找到最佳拟合直线

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控制衰减的速度。
未完待续…

猜你喜欢

转载自blog.csdn.net/weixin_40548136/article/details/86769999