岭回归 Lasso回归

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

标准线性回归(简单线性回归)中:

岭回归r软件 岭回归命令_人工智能

如果想用这个式子得到回归系数,就要保证

岭回归r软件 岭回归命令_人工智能_02

是一个可逆矩阵。

下面的情景:如果特征的数据比样本点还要多,数据特征n,样本个数m,如果n>m,则计算

岭回归r软件 岭回归命令_岭回归r软件_03

会出错。因为

岭回归r软件 岭回归命令_机器学习_04

不是满秩矩阵(行数小于列数),所有不可逆。

为了解决这个问题,统计学家引入了岭回归的概念。

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

二、岭回归

1.基本含义:

岭回归r软件 岭回归命令_python_05

λ为岭系数, I为单位矩阵(对角线上全为1,其他元素为0)。单位矩阵为满秩矩阵,乘以λ仍然为满秩矩阵。

2.岭回归的代价函数

岭回归r软件 岭回归命令_python_06

正则化的代价函数:L2正则化(权值的平方):

岭回归r软件 岭回归命令_机器学习_07

了解更多正则化内容点击这里 3.推导过程

根据代价函数求解回归系数w的值为如下的表达式:

岭回归r软件 岭回归命令_深度学习_08

岭回归r软件 岭回归命令_机器学习_09

注:

岭回归r软件 岭回归命令_机器学习_10

其中

岭回归r软件 岭回归命令_python_11

称为L2正则化项

在所有参数平方和前乘以了一个参数λ,把它叫正则化系数或者惩罚系数。这个惩罚系数是调节模型好坏的关键参数,我们通过两个极端的情况说明它是如何调节模型复杂度的。( 较大的λ值指定较强的正则化)

λ值为0:损失函数将与原来损失函数一样(即最小二乘估计形式),说明对参数权重θ没有任何惩罚。

λ为无穷大:在惩罚系数λ无穷大的情况下,为保证整个结构风险函数最小化,只能通过最小化所有权重系数θ达到目的了,即通过λ的惩罚降低了参数的权重值,而在降低参数权重值的同时我们就实现了降低模型复杂度的效果。

(1)由

岭回归r软件 岭回归命令_人工智能_12

当θi很小的时候, xi这个特征可以忽略不计。

(2)过拟合是由于模型过于复杂引起的。

4.岭回归总结

岭回归最早是用来处理特征数多于样本数的情况,现在也用于在估计中加入偏差,从而得到更好的估计。同时也可以解决多重共线性问题,岭回归是一种有偏估计。

这里通过引入λ来限制了所有w之和,通过引入该惩罚项,能够减少不重要的参数,这个技术在统计学中也叫做缩减(shrinkage)。

岭回归的代价函数:

岭回归r软件 岭回归命令_岭回归r软件_13

线性回归标准方程法:

岭回归r软件 岭回归命令_人工智能

岭回归求解:

岭回归r软件 岭回归命令_深度学习_08

三、岭回归案例分析

  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)

岭回归r软件 岭回归命令_人工智能_16

(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个数

岭回归r软件 岭回归命令_人工智能_17

(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))

岭回归r软件 岭回归命令_深度学习_18

(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')

岭回归r软件 岭回归命令_岭回归r软件_19