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

通用文件处理:

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
时间: 2024-08-01 11:30:41

学习日志---岭回归+LAR+似向前逐步回归--实现的相关文章

学习日志---树回归(回归树,模型树)

CART算法的树回归: 返回的每个节点最后是一个最终确定的平均值. #coding:utf-8 import numpy as np # 加载文件数据 def loadDataSet(fileName):      #general function to parse tab -delimited floats     dataMat = []                #assume last column is target value     fr = open(fileName)  

机器学习-正则化(岭回归、lasso)和前向逐步回归

机器学习-正则化(岭回归.lasso)和前向逐步回归 本文代码均来自于<机器学习实战> 这三种要处理的是同样的问题,也就是数据的特征数量大于样本数量的情况.这个时候会出现矩阵不可逆的情况,为什么呢? 矩阵可逆的条件是:1. 方阵 2. 满秩 X.t*X必然是方阵(nxmxmxn=nxn,最终行列数是原来的X矩阵的列数,也就是特征数),但是要满秩的话,由于线性代数的一个结论,X.t*X的秩不会比X大,而X的秩是样本数和特征数中较小的那一个,所以,如果样本数小于特征数的话,X.t*X就不会是可逆的

岭回归和lasso回归(转)

回归和分类是机器学习算法所要解决的两个主要问题.分类大家都知道,模型的输出值是离散值,对应着相应的类别,通常的简单分类问题模型输出值是二值的,也就是二分类问题.但是回归就稍微复杂一些,回归模型的输出值是连续的,也就是说,回归模型更像是一个函数,该函数通过不同的输入,得到不同的输出. 那么,什么是线性回归,什么是非线性回归呢? 线性回归与非线性回归 前面说了,我们的回归模型是一个函数是吧,那么线性回归就是模型函数是由若干个基本函数线性加权得到的函数.也就是每一个基本函数前面都有一个权值来调和自己对

线性回归、岭回归和LASSO回归

尽管有些内容还是不懂,先截取的摘录. 1.变量选择问题:从普通线性回归到lasso 使用最小二乘法拟合的普通线性回归是数据建模的基本方法.其建模要点在于误差项一般要求独立同分布(常假定为正态)零均值.t检验用来检验拟合的模型系数的显著性,F检验用来检验模型的显著性(方差分析).如果正态性不成立,t检验和F检验就没有意义. 对较复杂的数据建模(比如文本分类,图像去噪或者基因组研究)的时候,普通线性回归会有一些问题:(1)预测精度的问题 如果响应变量和预测变量之间有比较明显的线性关系,最小二乘回归会

机器学习之线性回归、岭回归、Lasso回归

1.回归算法分类算法的目标值是标称型数据,而回归的目标变量是连续型数据,主要包括线性回归,岭回归,lasso回归,前向逐步回归. 2.线性回归线性回归主要用于处理线性数据,结果易于理解,计算复杂度不高,但是处理不了非线性数据.线性回归用最适直线(回归线)去建立因变量Y和一个或多个自变量X之间的关系.可以用公式来表示:Y = wX + b.其中w为权重,也称为回归系数,b为偏置顶. 3.理解线性回归线性回归从高中数学就接触过了,不过我们主要学习二维形式的线性回归,即y = kx + b.其中斜率k

用R建立岭回归和lasso回归

1 分别使用岭回归和Lasso解决薛毅书第279页例6.10的回归问题 例6.10的问题如下: 输入例题中的数据,生成数据集,并做简单线性回归,查看效果 cement <- data.frame(X1 = c(7, 1, 11, 11, 7, 11, 3, 1, 2, 21, 1, 11, 10), X2 = c(26,     29, 56, 31, 52, 55, 71, 31, 54, 47, 40, 66, 68), X3 = c(6, 15, 8, 8, 6,     9, 17, 2

多重共线性的解决方法之——岭回归与LASSO

? ? ? 多元线性回归模型 的最小二乘估计结果为 如果存在较强的共线性,即 中各列向量之间存在较强的相关性,会导致的从而引起对角线上的 值很大 并且不一样的样本也会导致参数估计值变化非常大.即参数估计量的方差也增大,对参数的估计会不准确. 因此,是否可以删除掉一些相关性较强的变量呢?如果p个变量之间具有较强的相关性,那么又应当删除哪几个是比较好的呢? 本文介绍两种方法能够判断如何对具有多重共线性的模型进行变量剔除.即岭回归和LASSO(注:LASSO是在岭回归的基础上发展的) ? ? 思想:

最小二乘回归,岭回归,Lasso回归,弹性网络

普通最小二乘法 理论: 损失函数: 权重计算: 1.对于普通最小二乘的系数估计问题,其依赖于模型各项的相互独立性. 2.当各项是相关的,且设计矩阵 X的各列近似线性相关,那么,设计矩阵会趋向于奇异矩阵,这会导致最小二乘估计对于随机误差非常敏感,产生很大的方差. 例如,在没有实验设计的情况下收集到的数据,这种多重共线性(multicollinearity)的情况可能真的会出现. 使用: from sklearn import datasets, linear_model regr = linear

用Python实现岭回归算法与Lasso回归算法并处理Iris数据集

在介绍岭回归算法与Lasso回归算法之前,先要回顾一下线性回归算法.根据线性回归模型的参数估计公式可知可知,得到的前提是矩阵可逆.换句话说就是样本各个特征(自变量)之间线性无关.然而在实际问题中,常常会出现特征之间出现多重共线性的情况,使得行列式的值接近于0,最终造成回归系数无解或者无意义. 为了解决这个问题,岭回归算法的方法是在线性回归模型的目标函数之上添加一个l2的正则项,进而使得模型的回归系数有解.具体的岭回归目标函数可表示为如下: 在Python中,岭回归算法的实现方法如下. 在Pyth