机器学习实战_08预测数值型数据-回归

回归的目的是预测数值型的目标值。
最直接的办法是依据输入写出一个目标值的计算公式。
这里写图片描述
这里写图片描述

1. 标准回归

# 读取文件
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

# 求w
def standReares(xArr,yArr):
    xMat = mat(xArr);yMat=mat(yArr).T
    xTx = xMat.T*xMat
    if linalg.det(xTx) ==0.0:
        print "No answer"
        return
    ws = xTx.I*(xMat.T*yMat)
    return ws

2. 局部加权线性回归
这里写图片描述

# 读入并创建所需矩阵,之后创建对角权重矩阵weights,阶数等于样本个数
#随着样本点与待预测点距离的增加,权重以指数级衰减。k控制衰减的速度
def lwlr(testPoint,xArr,yArr,k=1.0):
    xMat=mat(xArr);yMat=mat(yArr).T;
    m=shape(xMat)[0]
    weights=mat(eye((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:
        print "No answer"
        return
    ws = xTx.I*(xMat.T*(weights*yMat))
    return testPoint*ws

def lwlrTest(testArr,xArr,yArr,k=1.0):
    m=shape(testArr)[0]
    yHat=zeros(m)
    for i in range(m):
        yHat[i]=lwlr(testArr[i],xArr,yArr,k)
    return yHat

3. 岭回归
当样本个数小于特征个数时,采用岭回归
公式为:
这里写图片描述

def ridgeRegres(xMat,yMat,lam=0.2):
    xTx=xMat.T*xMat
    denom=xTx+eye(shape(xMat)[1])*lam
    if linalg.det(denom) == 0.0:
        print "No answer"
        return
    ws = denom.I * (xMat.T * yMat)
    return ws

def ridgeTest(xArr,yArr):
# 对特征进行标准化处理:所有特征减去各自的均值并处以方差
    xMat = mat(xArr);yMat=mat(yArr).T
    yMean =mean(yMat,0)
    yMat=yMat-yMean
    xMeans=mean(xMat,0)
    # var  取0求样本方差的无偏估计值
    xVar = var(xMat,0)
    xMat =(xMat-xMeans)/xVar
    numTeatPts=30
    wMat=zeros((numTeatPts,shape(xMat)[1]))
    for i in range(numTeatPts):
        ws = ridgeRegres(xMat,yMat,exp(i-10))
        wMat[i,:]=ws.T
    return wMat

4. Lasso缩减
在增加如下约束时,普通的最小二乘法回归会得到与岭回归一样的公式:
这里写图片描述
与岭回归类似,lasso缩减方法也对回归系数做了限定,对应的约束条件为:
这里写图片描述
这里写图片描述足够小的时候,一些系数会因此被迫缩减到0。

5.前向逐步回归

逐步回归是一种变量选择的方法。
随机梯度上升(下降)是一种拟合模型的数值优化方法。

逐步回归试图解决“放哪些变量在模型里最好”这个问题。
随机梯度上升试图解决“确定了哪些变量在模型里,如何求得参数值”这个问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值