当前位置:   article > 正文

机器学习 jupyter Python sklearn里面的岭回归_sklearn如何多训练几次岭回归

sklearn如何多训练几次岭回归

岭回归 Lasso回归

一、标准线性回归(简单线性回归)

标准线性回归(简单线性回归)中:
在这里插入图片描述
如果想用这个式子得到回归系数,就要保证
在这里插入图片描述
是一个可逆矩阵。
下面的情景:如果特征的数据比样本点还要多,数据特征n,样本个数m,如果n>m,则计算

在这里插入图片描述
会出错。因为
在这里插入图片描述
不是满秩矩阵(行数小于列数),所有不可逆。
为了解决这个问题,统计学家引入了岭回归的概念。

想了解更多标准线性回归可以转跳到这里:

二、岭回归

1.基本含义:
在这里插入图片描述
λ为岭系数, I为单位矩阵(对角线上全为1,其他元素为0)。单位矩阵为满秩矩阵,乘以λ仍然为满秩矩阵。
2.岭回归的代价函数
在这里插入图片描述
正则化的代价函数:L2正则化(权值的平方):
在这里插入图片描述
了解更多正则化内容点击这里
3.推导过程
根据代价函数求解回归系数w的值为如下的表达式:

在这里插入图片描述

在这里插入图片描述
注:

在这里插入图片描述
其中
在这里插入图片描述
称为L2正则化项
在所有参数平方和前乘以了一个参数λ,把它叫正则化系数或者惩罚系数。这个惩罚系数是调节模型好坏的关键参数,我们通过两个极端的情况说明它是如何调节模型复杂度的。( 较大的λ值指定较强的正则化)
λ值为0:损失函数将与原来损失函数一样(即最小二乘估计形式),说明对参数权重θ没有任何惩罚。
λ为无穷大:在惩罚系数λ无穷大的情况下,为保证整个结构风险函数最小化,只能通过最小化所有权重系数θ达到目的了,即通过λ的惩罚降低了参数的权重值,而在降低参数权重值的同时我们就实现了降低模型复杂度的效果
(1)由
在这里插入图片描述
当θi很小的时候, xi这个特征可以忽略不计。
(2)过拟合是由于模型过于复杂引起的。
4.岭回归总结
岭回归最早是用来处理特征数多于样本数的情况,现在也用于在估计中加入偏差,从而得到更好的估计。同时也可以解决多重共线性问题,岭回归是一种有偏估计。
这里通过引入λ来限制了所有w之和,通过引入该惩罚项,能够减少不重要的参数,这个技术在统计学中也叫做缩减(shrinkage)。
岭回归的代价函数:
在这里插入图片描述
线性回归标准方程法:
在这里插入图片描述
岭回归求解:
在这里插入图片描述

三、岭回归案例分析

  1. Longley数据集
    Longley数据集来自J.W.Longley(1967)发表在JASA上的一篇论文,是强共线性的宏观经济数据,包含GNP deflator(GNP平减指数)、GNP(国民生产总值)、Unemployed(失业率)、ArmedForces(武装力量)、Population(人口)、year(年份),Emlpoyed(就业率)。
    LongLey数据集因存在严重的多重共线性问题,在早期经常用来检验各种算法或计算机。
    2.sklearn中的岭回归
    在这里插入图片描述
    注:
    留一法就是每次只留下一个样本做测试集,其它样本做训练集,如果有k个样本,则需要训练k次,测试k次。
    留一法计算最繁琐,但样本利用率最高,适合于小样本的情况。
    在这里插入图片描述
    3.具体案列
    题目:作业:数据集abalone.txt,记录了鲍鱼(一种介壳类水生动物)的年龄,鲍鱼年龄可以从鲍鱼壳的层数推算得到。前8列是样本点的特征数据,最后一列是鲍鱼的年龄。请使用岭回归回归对模型训练。
    abalone.txt
    在这里插入图片描述
    (1)读取abalone.txt文件
#岭回归
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
np.set_printoptions(suppress=True)#显示的数字不是以科学记数法显示
np.set_printoptions(threshold=np.inf)  #显示全部行列的内容
#读入数据
data=np.genfromtxt('abalone.txt')
#print(data)
x_data=data[:,:-1]
y_data=data[:,-1]
#print(x_data)
#print(y_data)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述
(2)建立并训练模型

alphas_to_test=np.linspace(0.001,1)#在指定的间隔内返回均匀间隔的数字
#print(alphas_to_test)
RL=linear_model.RidgeCV(alphas=alphas_to_test,store_cv_values=True)
RL.fit(x_data,y_data)
print(RL.alpha_)#岭回归系数
print(RL.cv_values_.shape) 
#行数=样本点个数,列数=alphas个数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
(3)输出数据

print('截距',RL.intercept_)#截距
print('',RL.coef_)#系数
x_test=x_data[2]
print('第3个样本点特征数据',x_test)
x_Test=x_data[2,np.newaxis]
print(RL.predict(x_Test))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
(4)画出图

plt.plot(alphas_to_test,RL.cv_values_.sum(axis=0))
plt.scatter(RL.alpha_,min(RL.cv_values_.sum(axis=0)),c='r')
  • 1
  • 2

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/802009
推荐阅读
相关标签
  

闽ICP备14008679号