回归算法之岭回归

来源:互联网 发布:软件开发简历范文 编辑:程序博客网 时间:2024/04/18 10:04

1. 岭回归

  • 首先,说一下岭回归名字的由来,w^=(XTX+λI)1XTy,其中,I 是单位矩阵(对角线全是1,像”山岭“),λ 是岭系数(顾名思义…改变其数值可以改变单位矩阵对角线的值)
  • 其次,岭回归是基于最小二乘法 w^=(XTX)1XTy , 最小二乘法中有时候 XTX 可能不是满秩矩阵,也就是此时行列式为零,无法求逆 (A1=1|A|A 其中A是伴随矩阵)

2. 公式

最小二乘法 w^=(XTX)1XTy
岭回归公式 w^=(XTX+λI)1XTy

3. 伪代码

输入XY 以及lambda系数计算demo = XTX+lambda*I    判断是否为零计算 ws = demo.I * xTy  

4.代码

# coding:utf-8import pylab as plfrom numpy import *from datetime import datetimedef loadData(fileName):    labelMat = []    dataMat = []    with open(fileName) as txtFile:        for line in txtFile.readlines():            labelMat.append(map(float, line.split())[-1])            dataMat.append(map(float, line.split())[0:-1])    return dataMat, labelMat  # 4177*8# 计算ws #(xTx+IMat).I * xTydef ridge(xArr, yArr, lam=0.2):    n = shape(xArr)[-1]    IMat = eye(n)    xTx = xArr.T * xArr    demo = xTx + IMat * lam    if linalg.det(demo) is 0:        print "Warning !!!"        return    ws = demo.I * (xArr.T * yArr)    # print ws    return ws# 进行30次循环 每次的系数指数级改变# 数据进行标准化 y-ymean,x=(x-xmean)/xvardef rightTest(xArr, yArr, loopNum=30):    xMat = mat(xArr)    yMat = mat(yArr).T    yMat -= mean(yMat, 0)    xMat = (xMat - mean(xMat, 0)) / var(xMat, 0)    weight = zeros((loopNum, shape(xMat)[1]))    for i in range(loopNum):        weight[i, :] = ridge(xMat, yMat, exp(i - 10)).T    return weight# 打印图像def outPic(point):    fig = pl.figure()    ax = fig.add_subplot(1, 1, 1)    ax.plot(point)    pl.show()if __name__ == '__main__':    start = datetime.now()    data, label = loadData("abalone.txt")    loopNum = 30    w = rightTest(data, label, loopNum)    # print w    outPic(w)    print "耗时为:", datetime.now() - start

5. 打印图像 以及 分析

岭回归
(横轴是循环次数就是相关岭系数 纵轴是回归系数) 从图像中可以看出,在这八个系数中有两个距离0比较远,所以数据的主要预测就可以依靠这两个系数

附 数据集

'''1   0.455   0.365   0.095   0.514   0.2245  0.101   0.15    151   0.35    0.265   0.09    0.2255  0.0995  0.0485  0.07    7-1  0.53    0.42    0.135   0.677   0.2565  0.1415  0.21    91   0.44    0.365   0.125   0.516   0.2155  0.114   0.155   100   0.33    0.255   0.08    0.205   0.0895  0.0395  0.055   70   0.425   0.3 0.095   0.3515  0.141   0.0775  0.12    8-1  0.53    0.415   0.15    0.7775  0.237   0.1415  0.33    20-1  0.545   0.425   0.125   0.768   0.294   0.1495  0.26    161   0.475   0.37    0.125   0.5095  0.2165  0.1125  0.165   9-1  0.55    0.44    0.15    0.8945  0.3145  0.151   0.32    19-1  0.525   0.38    0.14    0.6065  0.194   0.1475  0.21    141   0.43    0.35    0.11    0.406   0.1675  0.081   0.135   101   0.49    0.38    0.135   0.5415  0.2175  0.095   0.19    11-1  0.535   0.405   0.145   0.6845  0.2725  0.171   0.205   10-1  0.47    0.355   0.1 0.4755  0.1675  0.0805  0.185   101   0.5 0.4 0.13    0.6645  0.258   0.133   0.24    120   0.355   0.28    0.085   0.2905  0.095   0.0395  0.115   7-1  0.44    0.34    0.1 0.451   0.188   0.087   0.13    101   0.365   0.295   0.08    0.2555  0.097   0.043   0.1 7.....还有4000行'''

    • 岭回归
    • 公式
    • 伪代码
    • 代码
    • 打印图像 以及 分析
    • 附 数据集

原创粉丝点击