机器学习-线性回归

Posted Qunar_尤雪萍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习-线性回归相关的知识,希望对你有一定的参考价值。

线性回归

简介:之前的文章中介绍过一种回归算法,梯度下降算法,这里再看看另外一个回归算法,线性回归,主要的内容包括简单的线性回归和局部加权回归算法。

在回归里面需要考虑的问题就是,我如何通过一堆训练数据求出回归方程?例如通过房间的面积,体积,地理位置等信息预测房间的售价。在训练数据中 面积、体积、地理位置我们统称为特征值使用 X 表示通常情况下X都为一个矩阵,最终房间的售价 Y 。针对预测结果中的某条数据 X1 预测结果将会通过 y1=XT1w 计算得到,这里的 w 叫回归系数,通过训练数据我们需要找出误差(得到的w使得测试y和真实y之前的差值)最小的 w ,一种简单有效的方式是采用平方差:i=1m(yixTiw)2(1)对w求导,得到 XT(yXw) ,令其等于零,得到 w=(XTX)1XTy

简单的线性回归

通过上面的推导得到的公式 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值对预测结果影响很大,另外通过上面的算法实现可以看出局部加权线性回归存在一个问题即,在每次预测目标值时都需要回归整个训练数据集,所以计算量很大。

以上是关于机器学习-线性回归的主要内容,如果未能解决你的问题,请参考以下文章

机器学习-线性回归

机器学习day13 机器学习实战线性回归

机器学习笔记:大话线性回归

机器学习——预测数值型数据:回归

线性回归中相关性确定的相关系数

机器学习--线性回归中L1正则和L2正则