精华内容
下载资源
问答
  • 岭回归

    千次阅读 2018-04-08 15:38:27
    【转】回归(三):岭回归概念在回归(一)中提到用最小二乘法求解回归系数的过程中需要考虑特征矩阵是否可逆的问题,事实上当特征数量比样本数量多的时候(样本数米大于特征数N,X不是满秩矩阵)就会遇到这个问题,...

    【转】回归(三):岭回归

    概念


    回归(一)中提到用最小二乘法求解回归系数的过程中需要考虑特征矩阵是否可逆的问题,事实上当特征数量比样本数量多的时候(样本数米大于特征数N,X不是满秩矩阵)就会遇到这个问题,这个时候标准线性回归显然就无从下手了

    引入岭回归就是为了解决这个问题,它是最先用来处理特征数多余样本数的算法。该算法的基本思想是在X  Ť X加上上一个λ 我使得矩阵非奇异,从而能够对 X  Ť X + λ 我求逆,其中我的英文一个ñ  ñ的单位矩阵,λ是一个超参数,需要用户自己调试.I作为一个对角的单位阵,由1组成的对角线就像一条在0矩阵中的岭,这就是岭回归的由来那么根据。回归(一)中的思路,回归系数的求解公式变成如下所示:
               

    事实上这是一种缩减(收缩)的算法,这种方法能够通过系数反映出参数的重要程度,也就是说能够把一些系数缩减成很小的值甚至零。这有点类似于降维,保留更少的特征能够减少模型的复杂程度,便于理解。而且研究表明与简单的线性回归相比,缩减法能够取得更好的预测效果。

    代码实现


    需要指出的是,使用岭回归和缩减技术,首先需要对特征作标准化处理,使得每个特征具有相同的重要性,这样才能从得到的系数中反应各个参数的重要程度。

    演示所用的数据集是“机器学习实战”第八张提供的abalone.txt数据,数据有八个特征,最后一列为目标值,概览如下:
     代码如下:
    
      
      def ridgeRegres(xMat,yMat,lam=0.2):
       '''
       岭回归,lam是需要调试的超参数
       '''
       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.TyMat)
       return ws
       
      def ridgeTest(xArr,yArr):
       xMat = mat(xArr); yMat=mat(yArr).T
       yMean = mean(yMat,0)
       yMat = yMat - yMean #to eliminate X0 take mean off of Y
       #岭回归和缩减技术需要对特征作标准化处理,使每维特征具有相同的重要性
       xMeans = mean(xMat,0) 
       xVar = var(xMat,0) 
       xMat = (xMat - xMeans)/xVar
       numTestPts = 30
       wMat = zeros((numTestPts,shape(xMat)[1]))
       #在30个不同的lambda下计算,为了找出最优参数
       for i in range(numTestPts):
       ws = ridgeRegres(xMat,yMat,exp(i-10))
       wMat[i,:]=ws.T
       return wMat
     
    可以看到,为了找出最优的λ,ridgeTest()函数在30个不同的λ下调用岭回归。而且λ以指数变化,这样可以看出在非常小和非常大的情况下分别对结果造成的影响。
    使用如下代码可以得到30组岭回归的权重:
    
      
    1. >>>xArr, yArr = loadDataSet('abalone.txt')
    2. >>>ridgeWeight = ridgeTest(xArr,yArr)
    下面我们可视化一下这30组系数的变化情况:
    
      
    1. def plotRidgeWeight(ridgeWeight):
    2. import matplotlib.pyplot as plt
    3. fig = plt.figure()
    4. ax = fig.add_subplot(111)
    5. axisX = [(i - 10) for i in range(30)]#log(λ)作为横坐标
    6. ax.plot(axisX, ridgeWeight)
    得到的图形如下:
    对于上图,可以理解成每个拉姆达对应一组权重,随着λ的增大,权重逐渐缩小。最佳的参数就在其中的某一组中。为了定量地找到最佳参数,还需要进行交叉验证。接下来就介绍交叉验证测试岭回归。

    交叉验证


    一般地,交叉验证就是通过把数据集分成若干等份,每一份轮流作测试集,其余数据作训练集进行轮流训练与测试。如果把数据集分成Ñ份,就叫正折叠交叉验证,这样会得到ñ个错误率(或者准确率等其他评价指标),然后取这ñ个的平均值作为最终的结果。这样做是为了得到更加准确的评价。

    这里的交叉验证是为了定量地找到岭回归的最佳参数,代码如下:
    
      
    1. def crossValidation(xArr, yArr, numFold = 10):
    2. '''
    3. 交叉验证,其中numFold是交叉的折数,默认为10折
    4. '''
    5. m = len(yArr)
    6. indexList = range(m)
    7. errorMat = zeros((numFold, 30))# 每一行都有30个λ得到的结果
    8. for i in range(numFold):
    9. trainX = []; trainY = []
    10. testX = []; testY = []
    11. random.shuffle(indexList)# 把indexList打乱获得随机的选择效果
    12. for j in range(m):# 划分测试集和训练集
    13. if j < 0.9m:
    14. trainX.append(xArr[indexList[j]])
    15. trainY.append(yArr[indexList[j]])
    16. else:
    17. testX.append(xArr[indexList[j]])
    18. testY.append(yArr[indexList[j]])
    19. # 30组系数,返回维度为308的数组
    20. wMat = ridgeTest(trainX, trainY)
    21. # 对每一组系数求误差
    22. # 训练数据做了怎么的处理,新的查询数据就要做怎样的处理才能带入模型
    23. for k in range(30):
    24. matTestX = mat(testX);matTrainX = mat(trainX)
    25. meanTrainX = mean(trainX, 0)
    26. varTrainX = var(matTrainX, 0)
    27. meanTrainY = mean(trainY, 0)
    28. matTestX = (matTestX - meanTrainX)/varTrainX
    29. yEst = matTestX mat(wMat[k, :]).T + mean(trainY)
    30. errorMat[i, k] = rssError(yEst.T.A, array(testY))
    31. meanErrors = mean(errorMat, 0) # 每个λ对应的平均误差
    32. minErrors = float(min(meanErrors))
    33. # 找到最优的λ之后,选取最后一轮迭代的wMat的对应的λ的权重作为最佳权重
    34. bestWeights = wMat[nonzero(meanErrors == minErrors)]
    35. xMat = mat(xArr); yMat = mat(yArr)
    36. meanX = mean(xMat, 0); varX = var(xMat, 0)
    37. # 为了和标准线性回归比较需要对数据进行还原
    38. unReg = bestWeights/varX
    39. print "the best model from Ridge Regression is:\n",unReg
    40. print "with constant term: ",-1*sum(multiply(meanX,unReg)) + mean(yMat)
    执行
    
      
    1. >>>crossValidation(xarr, yarr)
    可得到如下结果:

    总结


    1.岭回归可以解决特征数量比样本量多的问题
    2.岭回归作为一种缩减算法可以判断哪些特征重要或者不重要,有点类似于降维的效果
    3.缩减算法可以看作是对一个模型增加偏差的同时减少方差
     

     
     









    展开全文
  • 岭回归-回归实操

    千次阅读 2021-01-21 15:06:37
    python 岭回归算法之回归实操 基本概念 正则化 正则化是指对模型做显式约束,以避免过拟合。本文用到的岭回归就是L2正则化。(从数学的观点来看,岭回归惩罚了系数的L2范数或w的欧式长度) 正则化的具体原理就不在...

    python 岭回归算法之回归实操

    基本概念

    正则化

    正则化是指对模型做显式约束,以避免过拟合。本文用到的岭回归就是L2正则化。(从数学的观点来看,岭回归惩罚了系数的L2范数或w的欧式长度)

    正则化的具体原理就不在这里多叙述了,感兴趣的朋友可以看一下这篇文章:机器学习中正则化项L1和L2的直观理解

    算法简介

    岭回归

    岭回归也是一种用于回归的线性模型,因此它的模型公式与最小二乘法的相同,如下式所示:

    y=w[0]*x[0]+w[1]*x[1]+w[2]x[2]+…+w[p]x[p]+b

    但在岭回归中,对系数w的选择不仅要在训练数据上得到很好的预测结果,而且还要拟合附加约束。换句话说,w的所有元素都应接近于0。直观上来看,这意味着每个特征对输出的影响应尽可能小(即斜率很小),同时仍给出很好的预测结果,这个约束也就是正则化

    数据来源

    波士顿房价:https://www.kaggle.com/altavish/boston-housing-dataset
    也是非常经典的一个数据
    在这里插入图片描述

    简单解释一下这个数据的几个主要指标:
    ZN:25,000平方英尺以上的土地划为住宅用地的比例。
    RM:每个住宅的平均房间数。
    AGE:1940年之前建造的自有住房的比例
    CHAS:有没有河流经过 (如果等于1,说明有,等于0就说明没有)
    CRIM:犯罪率
    MEDV:住房的价格
    其它指标就不用说了,都是一些住房的其它指标,感兴趣的小伙伴可以自己查一下。

    数据挖掘

    1.导入第三方库

    import pandas as pd
    import numpy as np
    import winreg
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import Ridge###导入岭回归算法
    from sklearn.metrics import r2_score
    

    老规矩,上来先依次导入建模需要的各个模块
    2.读取文件

    import winreg
    real_address = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',)
    file_address=winreg.QueryValueEx(real_address, "Desktop")[0]
    file_address+='\\'
    file_origin=file_address+"\\源数据-分析\\HousingData.csv"#设立源数据文件的桌面绝对路径
    house_price=pd.read_csv(file_origin)#https://www.kaggle.com/altavish/boston-housing-dataset
    

    因为之前每次下载数据之后都要将文件转移到python根目录里面,或者到下载文件夹里面去读取,很麻烦。所以我通过winreg库,来设立绝对桌面路径,这样只要把数据下载到桌面上,或者粘到桌面上的特定文件夹里面去读取就好了,不会跟其它数据搞混。
    其实到这一步都是在走流程,基本上每个数据挖掘都要来一遍,没什么好说的。

    3.清洗数据
    1.查找缺失值
    在这里插入图片描述

    可以看到这个数据并包括一些缺失值,并不是很多,所以直接删掉就好了。

    house_price1=house_price.dropna().reset_index()
    del house_price1["index"]
    

    2.突变值查找

    在这里插入图片描述
    一般是看看特征值里面是否包含等于零的数据。其实说的直接一点就是看看数据里面是否包含不符合实际的数值,比如像是犯罪率,实际中不可能出现犯罪率等于0的片区。那么从上面的结果来看,这份数据并没有其它问题。
    这份数据里面的ZN和CHAS都是利用0和1来当作一种指标,所以包含0是很正常的。
    4.建模

    train=house_price1.drop(["MEDV"],axis=1)
    X_train,X_test,y_train,y_test=train_test_split(train,house_price1["MEDV"],random_state=1)
    #将MEDV划分为预测值,其它的属性划分为特征值,并将数据划分成训练集和测试集。
    ridge=Ridge(alpha=10)#确定约束参数
    ridge.fit(X_train,y_train)
    print("岭回归训练模型得分:"+str(r2_score(y_train,ridge.predict(X_train))))#训练集
    print("岭回归待测模型得分:"+str(r2_score(y_test,ridge.predict(X_test))))#待测集
    

    引入ridge算法,进行建模后,对测试集进行精度评分,得到的结果如下:
    在这里插入图片描述

    可以看到,该模型的训练精度为79%左右,对于新的数据来说,模型精度在63%左右。
    至此,这个数据集的将建模就算是完成了。

    讨论

    1.参数的讨论

    由于岭回归与线性回归(最小二乘法)的模型公式是一样的,所以这里我们与线性回归做一个比较。不了解线性回归的朋友可以看一下我的另一篇文章:最小二乘算法之回归实操
    在这里插入图片描述

    之前我们设立的约束参数是10,而上面模型参数设的是0,可以看出模型的训练精度有所提高,但泛化能力有所降低。同时与线性回归模型相比,二者的分数是完全一样的。所以,当岭回归的约束参数设为0时,失去约束的岭回归与普通最小二乘法就是同一个算法。

    2.与普通最小二乘法的比较

    我们通过变换约束参数的取值,来具体看一下岭回归与普通最小二乘法的优缺点。

    result_b=pd.DataFrame(columns=["参数","岭回归训练模型得分","岭回归待测模型得分","线性回归训练模型得分","线性回归待测模型得分"])
    train=house_price1.drop(["MEDV"],axis=1)
    X_train,X_test,y_train,y_test=train_test_split(train,house_price1["MEDV"],random_state=23)
    for i in range(21):
        alpha=i/10#约定参数可以选定为小数
        ridge=Ridge(alpha=alpha)
        ridge.fit(X_train,y_train)
        linear=LinearRegression()
        linear.fit(X_train,y_train)
        result_b=result_b.append([{"参数":alpha,"岭回归训练模型得分":r2_score(y_train,ridge.predict(X_train)),"岭回归待测模型得分":r2_score(y_test,ridge.predict(X_test)),"线性回归训练模型得分":r2_score(y_train,linear.predict(X_train)),"线性回归待测模型得分":r2_score(y_test,linear.predict(X_test))}])
    

    结果如下所示:
    在这里插入图片描述
    可以看出如果只是针对训练模型的精度,最小二乘法是要优于岭回归的,但是对新的数据作出预测时,也就是考虑模型的泛化能力上,可以看出岭回归的模型得分比最小二乘法要好一点。
    我们通过一个折线图来更直观地表现上面的数据:

    import matplotlib.pyplot as plt
    import seaborn as sns
    plt.style.use("fivethirtyeight")
    sns.set_style({'font.sans-serif':['SimHei','Arial']})#设定汉字字体,防止出现方框
    %matplotlib inline
    #在jupyter notebook上直接显示图表
    fig= plt.subplots(figsize=(15,5))
    plt.plot(result_b["参数"],result_b["岭回归训练模型得分"],label="岭回归训练模型得分")#画折线图
    plt.plot(result_b["参数"],result_b["岭回归待测模型得分"],label="岭回归待测模型得分")
    plt.plot(result_b["参数"],result_b["线性回归训练模型得分"],label="线性回归训练模型得分")
    plt.plot(result_b["参数"],result_b["线性回归待测模型得分"],label="线性回归待测模型得分")
    plt.rcParams.update({'font.size': 12})
    plt.legend()
    plt.xticks(fontsize=15)#设置坐标轴上的刻度字体大小
    plt.yticks(fontsize=15)
    plt.xlabel("参数",fontsize=15)#设置坐标轴上的标签内容和字体
    plt.ylabel("得分",fontsize=15)
    

    结果如下所示:
    在这里插入图片描述
    可以看出岭回归模型在模型的简单性(系数都接近于0)与训练集性能之间作出权衡。简单性和训练性能二者对于模型的重要程度可以由用户通过设置aplha参数来制定。增大alpha会使得系数更加趋向于0,从而降低训练集性能,但会提高泛化性能。

    而且无论是岭回归还是线性回归,所有数据集大小对应的训练分数都要高于预测分数。由于岭回归是正则化的,所以它的训练分数要整体低于线性回归的训练分数。但岭回归的测试分数高,特别是对于较小的数据集。如果数据量小于一定程度的时候,线性回归将学不到任何内容,随着模型可用数据越来越多,两个模型的性能都在提升,最终线性回归的性能追上了岭回归。所以如果有足够多的训练内容,正则化变得不那么重要,并且岭回归和线性回归将具有相同的性能。

    个人博客:https://www.yyb705.com/
    欢迎大家来我的个人博客逛一逛,里面不仅有技术文,也有系列书籍的内化笔记。
    有很多地方做的不是很好,欢迎网友来提出建议,也希望可以遇到些朋友来一起交流讨论。

    展开全文
  • 回归,岭回归。LASSO回归

    千次阅读 2016-12-27 10:45:08
    矩阵表示多元线性回归 Y=BX+a Q(B)=(Y-BX)T(Y-BX)达到最小时的B值。 也即是残差平方和最小时。B(Bi)的值。可以证明B的最小二乘估计=...岭回归(Ridge Regression)---------共线性问题 先对数据做标准化 B(K)=(X
    矩阵表示多元线性回归

    Y=BX+a

    Q(B)=(Y-BX)T(Y-BX)达到最小时的B值。

    也即是残差平方和最小时。B(Bi)的值。可以证明B的最小二乘估计=(XTX)-1XTy

    其中(XTX)-1为广义逆。

    如果X存在线性相关的话,XTX没有逆:

    1.出现多重共线性2.当n<p,变量比样本多时,出现奇异

    岭回归(Ridge Regression)---------共线性问题

    先对数据做标准化

    B(K)=(XTX+kI)XTY为B的岭回归估计,其中K为岭参数,I为单位矩阵,KI为扰动。

    岭迹图帮助我们发现多重共线性,以及取那个K值。在图中,k很小时,B很大,k稍微增大,B迅速变小,肯定有多重共线性。多重共线性的岭迹图一般呈喇叭口状。选喇叭附近的k值。

    岭迹图可以筛选变量,有个变量的系数长期很接近于0,可以剔除这些变量。

    选择k或者lambda使得:

    (1)各岭回归系数的岭基本稳定

    (2)正负直接穿梭时,不合乎实际意义

    (3)残差平方和增大不太多。

    用R语言进行岭回归:

    lm.ridge(y~.,longley)

    R中的ridge包(需要下载安装)

    LASSO回归

    (Least absolute shrinkage and selectionator operaterator)

    最小的绝对收缩通过构造一个一阶惩罚函数获得一个精炼的模型,通过最终确定一些指标(变量)的系数为0(岭回归估计系数等于0的机会微乎其微),解释力很强。擅长处理具有多重共线性的数据,与岭回归一样是有偏估计。

    弹性网

    LAR(最小角回归Least Angel Regression)

    类似于逐步向前回归的形式

    R语言中有lars的包

    各个算法的区别

    一、引 言

    1、lasso族的功效

    在建立模型之初,为了尽量减小因缺少重要自变量而出现的模型偏差,通常会选择尽可能多的自变量。然而,建模过程需要寻找对因变量最具有强解释力的自变量集合,也就是通过自变量选择(指标选择、字段选择)来提高模型的解释性和预测精度。指标选择在统计建模过程中是极其重要的问题。Lasso算法则是一种能够实现指标集合精简的估计方法。

    Lasso(Least absolute shrinkage and selection operator, Tibshirani(1996))方法是一种压缩估计。它通过构造一个罚函数得到一个较为精炼的模型,使得它压缩一些系数,同时设定一些系数为零。因此保留了子集收缩的优点,是一种处理具有复共线性数据的有偏估计。

    Lasso 的基本思想是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而能够产生某些严格等于0 的回归系数,得到可以解释的模型。R的Lars 算法的软件包提供了Lasso编程,我们根据模型改进的需要,可以给出Lasso算法,并利用AIC准则和BIC准则给统计模型的变量做一个截断,进而达到降维的目的。因此,我们通过研究Lasso可以将其更好的应用到变量选择中去。[]

    lasso estimate具有shrinkage和selection两种功能,shrinkage这个不用多讲,本科期间学过回归分析的同学应该都知道岭估计会有shrinkage的功效,lasso也同样。关于selection功能,Tibshirani提出,当t值小到一定程度的时候,lasso estimate会使得某些回归系数的估值是0,这确实是起到了变量选择的作用。当t不断增大时,选入回归模型的变量会逐渐增多,当t增大到某个值时,所有变量都入选了回归模型,这个时候得到的回归模型的系数是通常意义下的最小二乘估计。从这个角度上来看,lasso也可以看做是一种逐步回归的过程。[]

    模型选择本质上是寻求模型稀疏表达的过程,而这种过程可以通过优化一个“损失”十“惩罚”的函数问题来完成。

    2、与普通最小二乘法的区别

    使用最小二乘法拟合的普通线性回归是数据建模的基本方法。其建模要点在于误差项一般要求独立同分布(常假定为正态)零均值。t检验用来检验拟合的模型系数的显著性,F检验用来检验模型的显著性(方差分析)。如果正态性不成立,t检验和F检验就没有意义。

    对较复杂的数据建模(比如文本分类,图像去噪或者基因组研究)的时候,普通线性回归会有一些问题:

    (1)预测精度的问题 如果响应变量和预测变量之间有比较明显的线性关系,最小二乘回归会有很小的偏倚,特别是如果观测数量n远大于预测变量p时,最小二乘回归也会有较小的方差。但是如果n和p比较接近,则容易产生过拟合;如果n

    (2)模型解释能力的问题 包括在一个多元线性回归模型里的很多变量可能是和响应变量无关的;也有可能产生多重共线性的现象:即多个预测变量之间明显相关。这些情况都会增加模型的复杂程度,削弱模型的解释能力。这时候需要进行变量选择(特征选择)。

    针对OLS的问题,在变量选择方面有三种扩展的方法: (1)子集选择 这是传统的方法,包括逐步回归和最优子集法等,对可能的部分子集拟合线性模型,利用判别准则 (如AIC,BIC,Cp,调整R2 等)决定最优的模型。 (2)收缩方法(shrinkage method) 收缩方法又称为正则化(regularization)。主要是岭回归(ridge regression)和lasso回归。通过对最小二乘估计加入罚约束,使某些系数的估计为0。 (3)维数缩减 主成分回归(PCR)和偏最小二乘回归(PLS)的方法。把p个预测变量投影到m维空间(m

    3、岭回归、lasso回归和elastic net三种正则化方法[]

    (1)岭回归[]

    最小二乘估计是最小化残差平方和(RSS):

    岭回归在最小化RSS的计算里加入了一个收缩惩罚项(正则化的l2范数)

    这个惩罚项中lambda大于等于0,是个调整参数。各个待估系数越小则惩罚项越小,因此惩罚项的加入有利于缩减待估参数接近于0。重点在于lambda的确定,可以使用交叉验证或者Cp准则。

    岭回归优于最小二乘回归的原因在于方差-偏倚选择。随着lambda的增大,模型方差减小而偏倚(轻微的)增加。

    岭回归的一个缺点:在建模时,同时引入p个预测变量,罚约束项可以收缩这些预测变量的待估系数接近0,但并非恰好是0(除非lambda为无穷大)。这个缺点对于模型精度影响不大,但给模型的解释造成了困难。这个缺点可以由lasso来克服。(所以岭回归虽然减少了模型的复杂度,并没有真正解决变量选择的问题)

    (2)lasso

    lasso是在RSS最小化的计算中加入一个l1范数作为罚约束:

    l1范数的好处是当lambda充分大时可以把某些待估系数精确地收缩到0。

    关于岭回归和lasso,在[3]里有一张图可以直观的比较([3]的第三章是个关于本文主题特别好的参考):[]

    关于岭回归和lasso当然也可以把它们看做一个以RSS为目标函数,以惩罚项为约束的优化问题。

    (3)调整参数lambda的确定

    交叉验证法。对lambda的格点值,进行交叉验证,选取交叉验证误差最小的lambda值。最后,按照得到的lambda值,用全部数据重新拟合模型即可。

    (4)elastic net

    elastic net融合了l1范数和l2范数两种正则化的方法,上面的岭回归和lasso回归都可以看做它的特例:

    elastic net对于p远大于n,或者严重的多重共线性情况有明显的效果。 对于elastic net,当alpha接近1时,elastic net表现很接近lasso,但去掉了由极端相关引起的退化化或者奇怪的表现。一般来说,elastic net是岭回归和lasso的很好的折中,当alpha从0变化到1,目标函数的稀疏解(系数为0的情况)也从0单调增加到lasso的稀疏解。

    LASSO的进一步扩展是和岭回归相结合,形成Elastic Net方法。[]

    (5)岭回归与lasso算法[]

    这两种方法的共同点在于,将解释变量的系数加入到Cost Function中,并对其进行最小化,本质上是对过多的参数实施了惩罚。而两种方法的区别在于惩罚函数不同。但这种微小的区别却使LASSO有很多优良的特质(可以同时选择和缩减参数)。下面的公式就是在线性模型中两种方法所对应的目标函数:

    公式中的lambda是重要的设置参数,它控制了惩罚的严厉程度,如果设置得过大,那么最后的模型参数均将趋于0,形成拟合不足。如果设置得过小,又会形成拟合过度。所以lambda的取值一般需要通过交叉检验来确定。

    岭回归的一个缺点:在建模时,同时引入p个预测变量,罚约束项可以收缩这些预测变量的待估系数接近0,但并非恰好是0(除非lambda为无穷大)。这个缺点对于模型精度影响不大,但给模型的解释造成了困难。这个缺点可以由lasso来克服。(所以岭回归虽然减少了模型的复杂度,并没有真正解决变量选择的问题)

    4、LARS算法对lasso的贡献[]

    LAR把Lasso (L1-norm regularization)和Boosting真正的联系起来,如同打通了任督二脉。LAR结束了一个晦涩的时代:在LAR之前,有关Sparsity的模型几乎都是一个黑箱,它们的数学性质(更不要谈古典的几何性质了)几乎都是缺失。

    近年来兴起的Compressed sensing(Candes & Tao, Donoho)也与LAR一脉相承,只是更加强调L1-norm regularization其他方面的数学性质,比如Exact Recovery。我觉得这是一个问题的多个方面,Lasso关注的是构建模型的准确性,Compressed sensing关注的是变量选择的准确性。

    5、变量选择

    当我们使用数据训练分类器的时候,很重要的一点就是要在过度拟合与拟合不足之间达成一个平衡。防止过度拟合的一种方法就是对模型的复杂度进行约束。模型中用到解释变量的个数是模型复杂度的一种体现。控制解释变量个数有很多方法,例如变量选择(feature selection),即用filter或wrapper方法提取解释变量的最佳子集。或是进行变量构造(feature construction),即将原始变量进行某种映射或转换,如主成分方法和因子分析。变量选择的方法是比较“硬”的方法,变量要么进入模型,要么不进入模型,只有0-1两种选择。但也有“软”的方法,也就是Regularization类方法,例如岭回归(Ridge Regression)和套索方法(LASSO:least absolute shrinkage and selection operator)。

    6、展望

    将Lasso应用于时间序列。将Lasso思想应用于AR(p)、ARMA(p)等模型,利用Lasso方法对AR(p)、ARMA(p)等模型中的变量选择,并给出具体的算法。

    将Lasso方法应用到高维图形的判别与选择以及应用于线性模型的变量选择中,以提高模型选择的准确性。

    二、文献综述

    在做LASSO,他们都是大牛,你可以直接GOOGLE他们的主页,看他们在这块发了什么文章。yu bin, zhu ji, zhang tong, hui zou, yuan ming, Nicolai Meinshausen, Peter Bühlmann, Martin J. Wainwright, jianqing fan, Liza Levina, Peter Bickel,Tibshirani(Lasso的提出者)。

    三、R语言包——glmnet和lars

    1、glmnet包与算法

    glmnet包是关于Lasso and elastic-net regularized generalized linear models。 作者是Friedman, J., Hastie, T. and Tibshirani, R这三位。

    这个包采用的算法是循环坐标下降法(cyclical coordinate descent),处理的模型包括 linear regression,logistic and multinomial regression models, poisson regression 和 the Cox model,用到的正则化方法就是l1范数(lasso)、l2范数(岭回归)和它们的混合 (elastic net)。

    坐标下降法是关于lasso的一种快速计算方法(是目前关于lasso最快的计算方法),其基本要点为: 对每一个参数在保持其它参数固定的情况下进行优化,循环,直到系数稳定为止。这个计算是在lambda的格点值上进行的。 关于这个算法见[5][]。 关于glmnet包的细节可参考[4],这篇文献同时也是关于lasso的一个不错的文献导读。[]

    cv.glmnet函数利用交叉检验,分别用不同的lambda值来观察模型误差。

    左边线对应最佳lamda,右侧线对应一个SE内最佳模型。上图横轴是lambda值的对数,纵轴是模型误差。从上面的图可以看到,最佳的lambda取值就是在红色曲线的最低点处,对应着变量个数是11个。它右侧的另一条虚线是在其一倍SE内的更简洁的模型(变量个数为9)。由于这两个lambda对应的模型误差变化不大,而我们更偏好于简洁的模型,选择对应的lambda值为0.025。

     

    展开全文
  • 线性回归,岭回归

    2020-04-22 00:38:10
    性能评测案例欠拟合与过拟合解决过拟合的方法回归算法之岭回归sklearn.linear_model.Ridge方法属性案例分析 线性回归 回归算法 回归是统计学中最有力的工具之一。机器学习监督学习算法分为分类算法和回归算法两种,...

    线性回归

    回归算法

    回归是统计学中最有力的工具之一。机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于连续型分布预测,针对的是数值型的样本,使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。
    回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。那么什么是线性关系和非线性关系?
    比如说在房价上,房子的面积和房子的价格有着明显的关系。那么X=房间大小,Y=房价,那么在坐标系中可以看到这些点:
    在这里插入图片描述
    如果是一条曲线,那么叫非线性关系在这里插入图片描述
    那么回归的目的就是建立一个回归方程(函数)用来预测目标值,回归的求解就是求这个回归方程的回归系数。
    在这里插入图片描述

    回归算法之线性回归

    线性回归的定义是:目标值预期是输入变量的线性组合。线性模型形式简单、易于建模,但却蕴含着机器学习中一些重要的基本思想。线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。

    在这里插入图片描述
    矩阵就是为了服务运算 先横后束 numpy

    优缺点

    在这里插入图片描述
    对于单变量线性回归,例如:前面房价例子中房子的大小预测房子的价格。f(x) = w1x+w0,这样通过主要参数w1就可以得出预测的值。
    通用公式为:在这里插入图片描述那么对于多变量回归,例如:瓜的好坏程度 f(x) = w0+0.2色泽+0.5根蒂+0.3
    敲声,得出的值来判断一个瓜的好与不好的程度。
    通用公式为
    在这里插入图片描述线性模型中的向量W值,客观的表达了各属性在预测中的重要性,因此线性模型有很好的解释性。对于这种“多特征预测”也就是(多元线性回归),那么线性回归就是在这个基础上得到这些W的值,然后以这些值来建立模型,预测测试数据。简单的来说就是学得一个线性模型以尽可能准确的预测实值输出标记。
    那么如果对于多变量线性回归来说我们可以通过向量的方式来表示W值与特征X值之间的关系在这里插入图片描述
    一个列向量的转置与特征的乘积,得出我们预测的结果,但是显然我们这个模型得到的结果可定会有误差,如下图所示在这里插入图片描述
    在这里插入图片描述

    损失函数

    损失函数是一个贯穿整个机器学习重要的一个概念,大部分机器学习算法都会有误差,我们得通过显性的公式来描述这个误差,并且将这个误差优化到最小值
    对于线性回归模型,将模型与数据点之间的距离差之和做为衡量匹配好坏的标准,误差越小,匹配程度越大。我们要找的模型就是需要将f(x)和我们的真实值之间最相似的状态。于是我们就有了误差公式,模型与数据差的平方和最小:
    在这里插入图片描述上面公式定义了所有的误差和,那么现在需要使这个值最小?那么有两种方法,一种使用梯度下降算法,另一种使正规方程解法(只适用于简单的线性回归)。

    梯度下降算法

    上面误差公式是一个通式,我们取两个单个变量来求最小值,误差和可以表示为:
    在这里插入图片描述可以通过调整不同的在这里插入图片描述
    ​​的值,就能使误差不断变化,而当你找到这个公式的最小值时,你就能得到最好的在这里插入图片描述而这对在这里插入图片描述就是能最好描述你数据关系的模型参数。
    怎么找在这里插入图片描述的最小?在这里插入图片描述的图像其实像一个山谷一样,有一个最低点。找这个最低点的办法就是,先随便找一个点,然后 沿着这个碗下降的方向找,最后就能找到山谷的最低点。

    在这里插入图片描述
    在这里插入图片描述
    ​​

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    LinearRegression

    sklearn.linear_model.LinearRegression

    class LinearRegression(fit_intercept = True,normalize = False,copy_X = True,n_jobs = 1)
      """
      :param normalize:如果设置为True时,数据进行标准化。请在使用normalize = False的估计器调时用fit之前使用preprocessing.StandardScaler
    
      :param copy_X:boolean,可选,默认为True,如果为True,则X将被复制
    
      :param n_jobs:int,可选,默认1。用于计算的CPU核数
    

    实例代码:

    from sklearn.linear_model import LinearRegression
    reg = LinearRegression()
    

    方法
    fit(X,y,sample_weight = None)
    使用X作为训练数据拟合模型,y作为X的类别值。X,y为数组或者矩阵

    reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
    

    predict(X)
    预测提供的数据对应的结果

    reg.predict([[3,3]])
    
    array([ 3.])
    

    属性

    coef_
    表示回归系数w=(w1,w2…)

    reg.coef_
    
    array([ 0.5,  0.5])
    

    intercept_ 表示w0

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    加入交叉验证

    前面我们已经提到了模型的交叉验证,那么我们这个自己去建立数据集,然后通过线性回归的交叉验证得到模型。由于sklearn中另外两种回归岭回归、lasso回归都本省提供了回归CV方法,比如linear_model.Lasso,交叉验证linear_model.LassoCV;linear_model.Ridge,交叉验证linear_model.RidgeCV。所以我们需要通过前面的cross_validation提供的方法进行k-折交叉验证

    from sklearn.datasets.samples_generator import make_regression
    from sklearn.model_selection import cross_val_score
    from sklearn import linear_model
    import matplotlib.pyplot as plt
    
    lr = linear_model.LinearRegression()
    X, y = make_regression(n_samples=200, n_features=5000, random_state=0)
    result = cross_val_score(lr, X, y)
    print result
    

    线性回归案例分析

    波士顿房价预测

    使用scikit-learn中内置的回归模型对“美国波士顿房价”数据进行预测。对于一些比赛数据,可以从kaggle官网上获取,网址:https://www.kaggle.com/datasets
    1.美国波士顿地区房价数据描述

    from sklearn.datasets import load_boston
    
    boston = load_boston()
    
    print boston.DESCR
    

    2.波士顿地区房价数据分割

    from sklearn.cross_validation import train_test_split
    import numpy as np
    X = boston.data
    y = boston.target
    
    X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=33,test_size = 0.25)
    

    3.训练与测试数据标准化处理

    from sklearn.preprocessing import StandardScaler
    ss_X = StandardScaler()
    ss_y = StandardScaler()
    
    X_train = ss_X.fit_transform(X_train)
    X_test = ss_X.transform(X_test)
    y_train = ss_X.fit_transform(y_train)
    X_train = ss_X.transform(y_test
    

    使用最简单的线性回归模型LinearRegression和梯度下降估计SGDRegressor对房价进行预测

    from sklearn.linear_model import LinearRegression
    lr = LinearRegression()
    lr.fit(X_train,y_train)
    lr_y_predict = lr.predict(X_test)
    
    from sklearn.linear_model import SGDRegressor
    sgdr = SGDRegressor()
    sgdr.fit(X_train,y_train)
    sgdr_y_predict = sgdr.predict(X_test
    

    5.性能评测

    对于不同的类别预测,我们不能苛刻的要求回归预测的数值结果要严格的与真实值相同。一般情况下,我们希望衡量预测值与真实值之间的差距。因此,可以测评函数进行评价。其中最为直观的评价指标均方误差(Mean Squared Error)MSE,因为这也是线性回归模型所要优化的目标。
    MSE的计算方法如式
    在这里插入图片描述
    使用MSE评价机制对两种模型的回归性能作出评价

    from sklearn.metrics import mean_squared_error
    
    print '线性回归模型的均方误差为:',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_tranform(lr_y_predict))
    print '梯度下降模型的均方误差为:',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_tranform(sgdr_y_predict))
    

    通过这一比较发现,使用梯度下降估计参数的方法在性能表现上不及使用解析方法的LinearRegression,但是如果面对训练数据规模十分庞大的任务,随即梯度法不论是在分类还是回归问题上都表现的十分高效,可以在不损失过多性能的前提下,节省大量计算时间。根据Scikit-learn光网的建议,如果数据规模超过10万,推荐使用随机梯度法估计参数模型。
    注意:线性回归器是最为简单、易用的回归模型。正式因为其对特征与回归目标之间的线性假设,从某种程度上说也局限了其应用范围。特别是,现实生活中的许多实例数据的各种特征与回归目标之间,绝大多数不能保证严格的线性关系。尽管如此,在不清楚特征之间关系的前提下,我们仍然可以使用线性回归模型作为大多数数据分析的基线系统。

    案例

    from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge
    from sklearn.preprocessing import StandardScaler
    from sklearn.datasets import load_boston
    from sklearn.cross_validation import train_test_split
    from sklearn.metrics import mean_squared_error,classification_report
    from sklearn.cluster import KMeans
    
    
    def linearmodel():
        """
        线性回归对波士顿数据集处理
        :return: None
        """
    
        # 1、加载数据集
    
        ld = load_boston()
    
        x_train,x_test,y_train,y_test = train_test_split(ld.data,ld.target,test_size=0.25)
    
        # 2、标准化处理
    
        # 特征值处理
        std_x = StandardScaler()
        x_train = std_x.fit_transform(x_train)
        x_test = std_x.transform(x_test)
    
    
        # 目标值进行处理
    
        std_y  = StandardScaler()
        y_train = std_y.fit_transform(y_train)
        y_test = std_y.transform(y_test)
    
        # 3、估计器流程
    
        # LinearRegression
        lr = LinearRegression()
    
        lr.fit(x_train,y_train)
    
        # print(lr.coef_)
    
        y_lr_predict = lr.predict(x_test)
    
        y_lr_predict = std_y.inverse_transform(y_lr_predict)
    
        print("Lr预测值:",y_lr_predict)
    
    
        # SGDRegressor
        sgd = SGDRegressor()
    
        sgd.fit(x_train,y_train)
    
        # print(sgd.coef_)
    
        y_sgd_predict = sgd.predict(x_test)
    
        y_sgd_predict = std_y.inverse_transform(y_sgd_predict)
    
        print("SGD预测值:",y_sgd_predict)
    
        # 带有正则化的岭回归
    
        rd = Ridge(alpha=0.01)
    
        rd.fit(x_train,y_train)
    
        y_rd_predict = rd.predict(x_test)
    
        y_rd_predict = std_y.inverse_transform(y_rd_predict)
    
        print(rd.coef_)
    
        # 两种模型评估结果
    
        print("lr的均方误差为:",mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))
    
        print("SGD的均方误差为:",mean_squared_error(std_y.inverse_transform(y_test),y_sgd_predict))
    
        print("Ridge的均方误差为:",mean_squared_error(std_y.inverse_transform(y_test),y_rd_predict))
    
        return None
    

    欠拟合与过拟合

    机器学习中的泛化,泛化即是,模型学习到的概念在它处于学习的过程中时模型没有遇见过的样本时候的表现。在机器学习领域中,当我们讨论一个机器学习模型学习和泛化的好坏时,我们通常使用术语:过拟合和欠拟合。我们知道模型训练和测试的时候有两套数据,训练集和测试集。在对训练数据进行拟合时,需要照顾到每个点,而其中有一些噪点,当某个模型过度的学习训练数据中的细节和噪音,以至于模型在新的数据上表现很差,这样的话模型容易复杂,拟合程度较高,造成过拟合。而相反如果值描绘了一部分数据那么模型复杂度过于简单,欠拟合指的是模型在训练和预测时表现都不好的情况,称为欠拟合。
    我们来看一下线性回归中拟合的几种情况图示:在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    解决过拟合的方法

    在线性回归中,对于特征集过小的情况,容易造成欠拟合(underfitting),对于特征集过大的情况,容易造成过拟合(overfitting)。针对这两种情况有了更好的解决办法
    欠拟合
    欠拟合指的是模型在训练和预测时表现都不好的情况,欠拟合通常不被讨论,因为给定一个评估模型表现的指标的情况下,欠拟合很容易被发现。矫正方法是继续学习并且试着更换机器学习算法。
    过拟合
    对于过拟合,特征集合数目过多,我们需要做的是尽量不让回归系数数量变多,对拟合(损失函数)加以限制。
    (1)当然解决过拟合的问题可以减少特征数,显然这只是权宜之计,因为特征意味着信息,放弃特征也就等同于丢弃信息,要知道,特征的获取往往也是艰苦卓绝的。
    在这里插入图片描述

    回归算法之岭回归

    具有L2正则化的线性最小二乘法。岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。当数据集中存在共线性的时候,岭回归就会有用。

    sklearn.linear_model.Ridge

    class sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None)**
      """
      :param alpha:float类型,正规化的程度
      """
    
    from sklearn.linear_model import Ridge
    clf = Ridge(alpha=1.0)
    clf.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1]))
    

    方法

    score(X, y, sample_weight=None)

    clf.score()
    

    属性

    coef_
    intercept

    clf.coef_
    array([ 0.34545455,  0.34545455])
    clf.intercept_
    0.13636...
    

    案例分析

    def linearmodel():
        """
        线性回归对波士顿数据集处理
        :return: None
        """
    
        # 1、加载数据集
    
        ld = load_boston()
    
        x_train,x_test,y_train,y_test = train_test_split(ld.data,ld.target,test_size=0.25)
    
        # 2、标准化处理
    
        # 特征值处理
        std_x = StandardScaler()
        x_train = std_x.fit_transform(x_train)
        x_test = std_x.transform(x_test)
    
    
        # 目标值进行处理
    
        std_y  = StandardScaler()
        y_train = std_y.fit_transform(y_train)
        y_test = std_y.transform(y_test)
    
        # 3、估计器流程
    
        # LinearRegression
        lr = LinearRegression()
    
        lr.fit(x_train,y_train)
    
        # print(lr.coef_)
    
        y_lr_predict = lr.predict(x_test)
    
        y_lr_predict = std_y.inverse_transform(y_lr_predict)
    
        print("Lr预测值:",y_lr_predict)
    
    
        # SGDRegressor
        sgd = SGDRegressor()
    
        sgd.fit(x_train,y_train)
    
        # print(sgd.coef_)
    
        y_sgd_predict = sgd.predict(x_test)
    
        y_sgd_predict = std_y.inverse_transform(y_sgd_predict)
    
        print("SGD预测值:",y_sgd_predict)
    
        # 带有正则化的岭回归
    
        rd = Ridge(alpha=0.01)
    
        rd.fit(x_train,y_train)
    
        y_rd_predict = rd.predict(x_test)
    
        y_rd_predict = std_y.inverse_transform(y_rd_predict)
    
        print(rd.coef_)
    
        # 两种模型评估结果
    
        print("lr的均方误差为:",mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))
    
        print("SGD的均方误差为:",mean_squared_error(std_y.inverse_transform(y_test),y_sgd_predict))
    
        print("Ridge的均方误差为:",mean_squared_error(std_y.inverse_transform(y_test),y_rd_predict))
    
        return None
    
    展开全文
  • 线性回归、岭回归和LASSO回归模型 文章目录线性回归、岭回归和LASSO回归模型1 线性回归模型1.1 一元线性回归模型1.1.1 模型介绍1.1.2 参数求解1.1.3 python实现1.2 多元线性回归模型1.2.1 模型介绍1.2.2 模型参数...
  • 一、岭回归引进的原因 当数据之间存在多重共线性(自变量高度相关)时,就需要使用岭回归分析。在存在多重共线性时,尽管最小二乘法(OLS)测得的估计值不存在偏差,它们的方差也会很大,从而使得观测值与真实值...
  • 在线性回归模型中,其参数估计公式为 $\beta=\left(X^{T} X\right)^{-1}...解决这类问题可 以使用岭回归、LASSO 回归、主成分回归、偏最小二乘回归, 主要针对自变量之间存在多重共线性或者自变量个数多于样本量的情况。
  • 在线性回归模型中,其参数估计公式为$\beta=(X^TX)^{-1}X^Ty$,当$X^TX$不可逆时无法求出$\beta...解决这类问题可以使用岭回归和LASSO回归,主要针对==自变量之间存在多重共线性==或者==自变量个数多于样本量==的情况。
  • 岭回归和LASSO

    2019-02-18 19:02:55
    继续线性回归的总结, 本文主要介绍两种线性回归的缩减(shrinkage)方法的基础知识: 岭回归(Ridge Regression)和LASSO(Least Absolute Shrinkage and Selection Operator)并对其进行了Python实现。同时也对一种更为...
  • 回归算法线性回归线性回归的定义线性回归误差的度量线性回归减小误差的方法方法一:正规方程方法二:梯度下降正规方程和梯度下降的对比回归性能评估过拟合和欠拟合过拟合欠拟合解决方法岭回归岭回归的概念岭回归的...
  • 岭回归和LASSO回归模型 目录一、岭回归模型1 λ 值的确定1.1 可视化方法确定 **λ** 值1.2 交叉验证法确定λ值2 模型预测 线性回归模型的参数估计得到的前提是变量构成的矩阵可逆。在实际问题中,常出现的问题: ...
  • 1普通最小二乘法 1.1正规方程 1.2梯度下降法 1.3代码实现 2岭回归 2.1岭回归原理 2.1代码实现 3 Lasso回归 4案例实战1-车流量预测
  • 回归(三):岭回归

    2019-10-01 17:10:30
    概念 在回归(一)中提到用最小二乘法求解回归...引入岭回归就是为了解决这个问题,它是最先用来处理特征数多余样本数的算法。该算法的基本思想是在XTX上加上一个λI使得矩阵非奇异,从而能够对XTX+λI求逆,其...
  • 岭回归和Lasso回归

    2018-10-27 10:16:45
    Lasso回归算法: 坐标轴下降...提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归。但是对于Lasso回归的解法没有提及,本文是对该文的补充和扩展。以下都用矩阵法表示,如果对于矩阵...
  • 本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失,然后介绍了线性回归中常用的两种范数来解决过拟合和矩阵不可逆的情况,分别对应岭回归和...
  • 脊回归(Ridge Regression) 岭回归

    千次阅读 2017-10-21 14:08:32
    岭回归(英文名:ridge regression, Tikhonov regularization)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得...
  • 一、岭回归估计的定义 1.1普通最小二乘法带来的问题 当自变量间存在复共线性时,回归系数估计的方差就会很大,从而导致估计值不稳定 1.2岭回归的定义 岭回归(Ridge Regression,RR),当自变量之间存在复共线性...
  • 岭回归的统计学解释

    千次阅读 2019-06-04 17:57:33
     岭回归有减小回归系数的效果,这可以从(2)式进行直观的理解,最大化(2)式即同时最大化似然函数和先验概率,要使得先验概率最大化,参数 必然要趋近于 均值 附近,而 等于 ,因此岭回归有减小参数 的...
  • 这里记录一下关于回归方面的知识包括(线性回归、局部加权回归、岭回归、逐步线性回归)等基础思想和代码实现。以及sklearn的实现方法。(数据来自机器学习实战第八章) 回归:  分类的目标变量是标称型数据,而...
  • 岭回归详解 从零开始 从理论到实践

    千次阅读 2021-01-21 22:13:30
    岭回归详解 从零开始 从理论到实践一、岭回归的理解1.1、LinearRegression的回顾1.2、岭回归 - Ridge Regression二、sklearn的使用2.1、方法、参数与属性2.2、简单案例2.3、超参数的设定方法 -RidgeCV2.4、多项式...
  • 这里主要讨论下广义回归中的经典算法~局部加权线性回归和岭回归以及如何用Python代码实现算法。内容上虽然不是学术论文,但同样遵循学术的严谨性,因此可能会有部分数理知识。本人也很讨厌成篇的理论推导,不过在...
  • 1 线性回归        假设有数据有: T={(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}T=\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})\}T={(x(1),y(1)),(x(2),y(2...
  • 岭回归,LASSO和LAR学习

    千次阅读 2018-06-03 10:40:28
    感谢博客:http://blog.sina.com.cn/s/blog_e386b39f0102vzsj.html摘要:我们...Lasso是岭回归的改进算法,对删除无效变量有帮助,而LAR是求Lasso解的一种有效算法。 先进入多远线性回归问题,先观察以下矩阵:​ ...
  • 矩阵表示多元线性回归Y=BX+aQ(B)=(Y-BX)T(Y-BX)达到最小时的B值。也即是残差平方和最小时。B(Bi)的值。可以证明B的最小二乘估计=(XTX)-1XTy其中(XTX)-1为广义逆。如果X存在线性相关的话,XTX没有逆:1.出现...
  • 岭回归、lasso

    千次阅读 2018-10-17 11:02:44
    这里讨论的岭回归和Lasso,也就是结构风险最小化的思想,在线性回归的基础上,加上模型复杂度的约束。   其中几种范数(norm)的定义如下: 岭回归的损失函数表示: 观察这条式子很容易的可以联想到...
  • 岭回归与LASSO算法

    千次阅读 2015-08-21 09:53:56
    岭回归(英文名:ridge regression, Tikhonov regularization)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,903
精华内容 1,161
关键字:

岭回归的思想