温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

学习日志---岭回归+LAR+似向前逐步回归--实现

发布时间:2020-07-01 19:13:09 来源:网络 阅读:680 作者:wukong0716 栏目:开发技术

通用文件处理:

import numpy as np
//文件名和文件中每行的分隔符
def loadDataSet(fileName,dotSplit):
    numFeat = len(open(fileName).readline().split(dotSplit))
    dataMat = []; labelMat = []
    fr = open(fileName)
//该数据集默认是最后一列是因变量
    for line in fr.readlines():
        lineArr=[]
        curline = line.split(dotSplit)
        for i in range(0,numFeat-1):
            lineArr.append(float(curline[i]))
        dataMat.append(lineArr)
        labelMat.append(float(curline[numFeat-1]))

    xMat = np.mat(dataMat)
    yMat = np.mat(labelMat).T
    return xMat,yMat

这里是处理岭回归的实现:

import numpy as np

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

def normalizing(xMat,yMat):
    yMean = np.mean(yMat,0)
    y = yMat-yMean
    xMeans = np.mean(xMat,0)
    xVar = np.var(xMat,0)
    x = (xMat-xMeans)/xVar
    return x,y

def ridgeTest(xM,yM):
    xMat,yMat = normalizing(xM,yM)
    numTestPts = 30
    wMat = np.zeros((numTestPts,np.shape(xMat)[1]))
    print wMat
    for i in range(numTestPts):
        ws = ridgeRegres(xMat,yMat,np.exp(i-10))
        wMat[i,:] = ws.T
    return wMat

向前逐步回归:

import numpy as np

def rssError(yArr,yHatArr):
    return ((yArr-yHatArr)**2).sum()

def stageWise(xM,yM,eps=0.01,numIt=100):
    m,n = np.shape(xM)
    returnMat = np.zeros((numIt,n))
    ws = np.zeros((n,1));wsTest = ws.copy();wsMax = ws.copy()
    lowestError = 0
    for i in range(numIt):
        print ws.T
        for j in range(n):
            for sign in [-1,1]:
                wsTest = ws.copy()
                wsTest[j] += eps*sign
                yTest = xM*wsTest
                rssE = rssError(yM.A,yTest.A)
                if i == 0:
                    lowestError = rssE
                if rssE < lowestError:
                    lowestError = rssE
                    print lowestError
                    wsMax = wsTest
        ws = wsMax.copy()
        returnMat[i,:] = ws.T
    return returnMat


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI