岭回归

Posted louyifei0824

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了岭回归相关的知识,希望对你有一定的参考价值。

岭回归

1、原理

# 线性回归可以求解 各个特征的权重
# 但是如果特征比样本还多 这个时候用线性回归就无法求解了

# 三元一次方程组
y1 = w1*x11 + w2*x21 +  w3*x31
y2 = w1*x12 + w2*x22 +  w3*x32
y3 = w1*x13 + w2*x23 +  w3*x33

1 2 3
2 4 6
4 8 12

10
20
40

w1*1 + w2*2 +  w3*3 = 10
w1*2 + w2*4 +  w3*6 = 20
w1*4 + w2*8 +  w3*12 = 40

1 2  3
2 4  6
4 8 12

1 2  3   1 0 0   2 2  3
2 4  6 + 0 1 0 = 2 5  6
4 8 12   0 0 1   4 8 12


# 通过人为引入 偏差 使得方程有解

# 使得 样本数 < 特征数 的方程 有解
# 比如一个图片 成百上千个特征 样本数没有特征数那么多
X = np.array([
    [1,2,3],
    [2,4,6],
    [4,8,12]
])

y = np.array([10,20,40])

# (X.T*X)^-1*X.T*y
import numpy as np
np.linalg.inv(np.dot(X.T,X))  # Singular matrix 奇异矩阵  # 没法计算
0.5*np.eye(3)
np.linalg.inv(np.dot(X.T,X)+0.5*np.eye(3))

2、实例

使用岭回归

岭回归一般用在样本值不够的时候

from sklearn import datasets  # 从sklearn中获取数据集
diabetes = datasets.load_diabetes()  # 加载糖尿病数据
data = diabetes.data  # 特征值
target = diabetes.target  # 目标值
import pandas as pd
pd.DataFrame(data,columns=diabetes.feature_names)
from sklearn.linear_model import Ridge  # Ridge 山岭

# alpha就相当于上面公式中的lambda 用来空值引入的偏差的大小
# 默认值是1 相当于 引入了一个单位矩阵
# 一般 我们还可以设置成 0.1 0.01 0.001 引入的偏差就小了
# 如果 10 100 1000 引入的偏差就会很大 
rr = Ridge(alpha=1000)
# 如果alpha是0(没有引入偏差 就和普通线性回归完全一样)
# 如果alpha太大 原来的权重就都成0了(各个特征和结果是无关的)
rr.fit(data,target)
rr.coef_  # 使用岭回归 估测出来的 各个特征的权重

# 和线性回归做对比
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(data,target)
lr.coef_  # 普通线性回归 估测出来的 各个特征的权重

技术分享图片

 

 

 

以上是关于岭回归的主要内容,如果未能解决你的问题,请参考以下文章

Matlab岭回归(可替换数据)

岭回归和lasso回归的r语言代码

数学建模MATLAB应用实战系列(九十三)-岭回归应用案例(附MATLAB和Python代码)

基于sklearn的岭回归

为岭回归训练 alpha 值

高维数据惩罚回归方法:主成分回归PCR岭回归lasso弹性网络elastic net分析基因数据|附代码数据