线性回归《机器学习实战》读书笔记(数据分析学习DAY9)

今天下午又补充学习了其他几个基本的线性回归算法
原理较为简单:

def lwlr(testPoint, xArr, yArr, k=1.0):#高斯核权重调整局部加权线性回归
    xMat = mat(xArr); yMat = mat(yArr).T
    m = shape(xMat)[0]
    weights = mat(eye((m)))#返回m*m,对角线元素为1,其余元素为0的矩阵
    for j in range(m):
        diffMat = testPoint - xMat[j:]
        weights[j,j] = exp(diffMat*diffMat.T/-2.0*k**2)#k值大小决定了中心点附件所占据权重的大小
    xTx = xMat.T*(weights*xMat)
    if linalg.det(xTx)  == 0.0:
        print("This matrix is singular, cannot do inverse")
        return
    we = xTx.I*(xMat.T*(weights*yMat))
    return testpoint * ws



def ridgeRegres(xMat,yMat,lam=0.2):#当特征较多时,可以使用岭回归,也可规避奇怪的点导致的过拟合,lasso方法
    xTx = xMat.T*xMat
    denom = xTx + eye(shape(xMat)[1])*lam
    if linalg.det(denom) == 0.0:
        print("This matrix is singular, cannot do inverse")
        return
    ws = denom.I * (xMat.T*yMat)
    return ws




def stageWise(xArr,yArr,eps=0.01,numIt=100):#逐步回归算法。每次改变一步长的系数。
    xMat = mat(xArr); yMat = mat(yArr).T
    yMean = mean(yMat,0)
    yMat = yMat - yMean
    xMat = regularize(xMat)
    m,n = shape(xMat)
    returnMat = zeros((numIt,n))
    ws = zeros((n,1)); wsTest = ws.copy(); wsMax = ws.copy()
    for i in range(numIt):
        print (ws.T)
        lowestError = inf;
        for j in range(n):
            for sign in [-1,1]:
                weTest = ws.copy()
                wsTest[j] += eps*sign
                yTest = xMat*wsTest
                rssE = rssError(yMat.A,yTest.A)
                if rssE < lowestError:
                   lowestError = rssE
                   wsMax = wsTest
    ws = wssMax.copy()
    returnMat[i,:]=ws.T
    return returnMat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值