机器学习-线性回归
Posted Qunar_尤雪萍
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习-线性回归相关的知识,希望对你有一定的参考价值。
线性回归
简介:之前的文章中介绍过一种回归算法,梯度下降算法,这里再看看另外一个回归算法,线性回归,主要的内容包括简单的线性回归和局部加权回归算法。
在回归里面需要考虑的问题就是,我如何通过一堆训练数据求出回归方程?例如通过房间的面积,体积,地理位置等信息预测房间的售价。在训练数据中 面积、体积、地理位置我们统称为特征值使用
X
表示通常情况下
简单的线性回归
通过上面的推导得到的公式
w=(XTX)−1XTy
,我们便能通过代码实现从训练集合中找到最优的回归系数w。
具体算法:
from numpy import *
#xArr 为 m x n 的一个数组
#yArr 为 1 x m 的一个数组
def standRegres(xArr, yArr):
xMat = mat(xArr); yMat = mat(yArr).T
xTx = xMat.T * xMat
if linalg.det(xTx) == 0.0 : ##说明xTx不可逆
return
ws = xTx.I * (xMat.T * yMat)
return ws
局部加权线性回归
上述的线性回归方法的一个问题是可能会出现欠拟合现象,它求的是最小误差的估计,针对的是全局最小误差,如果说模型本身就是一个欠拟合模型则不能通过上述方法取得最好的预测效果。为了解决这个问题引出了局部加权线性回归,在这个算法中我们给待预测点附近的每个点赋予一定的权重值,然后再选出的附近子集的基础上采用最小方差进行回归
w=(XTWX)−1XTWy
这里面的W为每个点权重,是一个矩阵,W的计算公式可以自由选择,但是常见的使用高斯函数
W(i,i)=exp(|x(i)−x|−2k2)
,k为用户指定的的参数,k决定了给附近点赋予多大的权重,当k值越小那么邻近的点拥有越大的权重,而越远的点权重比越小。
算法实现
def lwlr(testPoint, xArr, yArr, k=1.0):
xMat = mat(xArr); yMat = mat(yArr).T
m = shape(xMat)[0]
##构造一个对角矩阵
weights = mat(eys((m)))
for j in range(m):
diffMat = testPoint - xMat[j:]
weights[j,j] = exp(diffMat * diffMat.T/(-2.0*k**2))
xTx = xMat.T * (weights * xMat)
if linalg.det(xTx) ==0.0:
return
ws = xTx.I * (xMat.T * (weights * yMat))
return testPoint * ws
局部加权需要通过不断调整k值,是预测结果尽量准确,不同的k值对预测结果影响很大,另外通过上面的算法实现可以看出局部加权线性回归存在一个问题即,在每次预测目标值时都需要回归整个训练数据集,所以计算量很大。
以上是关于机器学习-线性回归的主要内容,如果未能解决你的问题,请参考以下文章