《机器学习实战》学习笔记第八章-回归

本文详细介绍了回归分析,包括线性回归、标准回归、局部加权线性回归及其应用,如预测鲍鱼年龄和乐高玩具价格。讨论了模型优化方法,如岭回归、lasso和前向逐步回归,强调了如何理解和选择合适的回归系数,以及在特征选择中的作用。
摘要由CSDN通过智能技术生成

目录

线性回归

标准回归

 局部加权线性回归

预测鲍鱼的年龄

 缩减系数来“理解”数据

岭回归

lasso

前向逐步回归

预测乐高玩具套件的价格

获取数据


线性回归

回归的目的就是预测数值型的目标值

最直接的方法是 依据输入写出一个目标值的计算公式

一般线性回归y=w*x+b,回归和线性回归一般是一个意思。

参考(2条消息) Python3《机器学习实战》学习笔记(十一):线性回归基础篇之预测鲍鱼年龄_Jack-Cui的博客-CSDN博客

应该怎么从一大堆数据里求出回归方程呢?假定输入数据存放在矩阵X中,结果存放在向量y中,而回归系存放在向量w中:

 那么对于给定的数据x1,即矩阵X的第一列数据,预测结果u1将会通过如下公式给出:

 

现在的问题是,手里有数据矩阵X和对应的标签向量y,怎么才能找到w呢?一个常用的方法就是找出使误差最小的w。这里的误差是指预测u值和真实y值之间的差值,使用该误差的简单累加将使得正差值和负差值相互抵消,所以我们采用平方误差。

平方误差和可以写做:

 我们要找到w,使平方误差和最小。因为我们认为平方误差和越小,线性回归拟合效果越好。

因此,用平方误差和对w进行求导:

 使导数为0,得到

 

标准回归

数据导入

def loadDataSet(fileName):
    numFeat = len(open(fileName).readline().split('\t')) - 1
    dataMat = []; labelMat = []
    fr = open(fileName)
    for line in fr.readlines():
        lineArr =[]
        curLine = line.strip().split('\t')
        for i in range(numFeat):
            lineArr.append(float(curLine[i]))
        dataMat.append(lineArr)
        labelMat.append(float(curLine[-1]))
    return dataMat, labelMat

标准回归函数

def standRegres(xArr,yArr):#x数据集,y数据集
    xMat = np.mat(xArr); yMat = np.mat(yArr).T
    xTx = xMat.T * xMat #根据文中推导的公示计算回归系数 2*2矩阵
    if np.linalg.det(xTx) == 0.0:
        print("矩阵为奇异矩阵,不能求逆")
        return
    ws = xTx.I * (xMat.T*yMat)
    return ws  #回归系数

画图

xArr,yArr = loadDataSet('ex0.txt')
ws = standRegres(xArr,yArr)
xMat = np.mat(xArr)
yMat = np.mat(yArr) #真实y值
yHat = xMat*ws #用ws回归系数算出来的y值

xCopy = xMat.copy()                   
xCopy.sort(0)   #排序
yHat = xCopy * ws    #计算对应的y值
fig = plt.figure()
ax = fig.add_subplot(111)             
ax.plot(xCopy[:, 1], yHat) #绘制回归曲线
ax.scatter(xMat[:,1].flatten().A[0], yMat.flatten().A[0], s = 20, alpha = .5) #绘制样本点
plt.title('DataSet')                  
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

 如何判断模型的好坏呢?可以计算预测值yHat和真实值之间的相关系数

xArr,yArr = loadDataSet('ex0.txt')
ws = standRegres(xArr,yArr)
xMat = np.mat(xArr)
yMat = np.mat(yArr) #真实y值
yHat = xMat*ws #用ws回归系数算出来的y值
corr = np.corrcoef(yHat.T,yMat)
print(corr)

结果:相关系数为0.98

 局部加权线性回归

线性回归可能出现欠拟合的问题,因为它求的是具有最小均方误差的无偏估计。可以在估计中引入一些偏差,来降低预测的均方误差。比如局部加权线性回归(LWLR),给待测点附近的每个点赋予一定的权重,回归系数w解法:

在这里插入图片描述

LWLR 使用“核”(与支持向量机中的“核”类似)来对附近的点赋予更高的权重。核的类型可以自由选择,最常用的核就是高斯核,高斯核对应的权重如下,点x与x(i)越近,w(i,i)将会越大

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值