对于数据的方阵,我实现R2= 1R2=1对于线性回归和R2= 0R2=0为套索。背后的直觉是什么?

数据挖掘 Python scikit-学习 线性回归 套索
2021-10-02 10:43:40

对于随机数据的方阵,N 列和 N 行。我正在拟合两个模型,线性回归和 Lasso。

对于线性回归,我在训练集中获得了满分,而在 Lasso 中我获得了 0 分。

import pandas as pd
import numpy as np
from sklearn import linear_model


N = 100
X = pd.DataFrame(np.random.rand(N,N))
y = np.random.randint(20, size=N)

lin = linear_model.LinearRegression().fit(X,y)
lasso = linear_model.Lasso().fit(X,y)

print('Linear regression score',lin.score(X,y))
print('Lasso score',lasso.score(X,y))

线性回归分数 1.0

套索得分 0.0 我的问题是:

  1. 有人能给我一个直观的想法,为什么对于方阵,套索回归与线性回归取得不同的结果?

  2. 套索缩小背后的直觉是什么?

注意:在这种情况下,矩阵是平方的,数据/目标是随机创建的。

1个回答

这里发生了一些事情:

  1. 你的矩阵是 100x100。所以你在线性模型中没有自由度,这将导致R2=1. 看到这个帖子

  2. 您使用随机数。因此,它们在解释您的因变量(它基本上是噪音)方面应该没有什么意义。由于 Lasso 会“缩小”无用的参数(在完美的噪声下没有一个参数是有用的),所有参数都设置为零。这反过来也给你一个R2=0. 在这种情况下,模型只包含一个截距(应该等于 0.5),它本质上是平均值。

将矩阵更改为列数少于行数,您将得到一个低(但为正)R2用于线性回归。还要看一下套索系数,它们都为零。

也看看预测值。您会看到线性模型效果不佳。因此,在这种情况下,R 平方没有给出模型拟合的指示。

您也可以尝试将随机模式更改为具有某种趋势,您会发现 Lasso 不会将所有系数都缩小为零。

import pandas as pd
import numpy as np
from sklearn import linear_model

n = 1000
k = 5

X = pd.DataFrame(np.random.rand(n,k))
y = np.random.randint(2, size=n)

lin = linear_model.LinearRegression().fit(X,y)
lasso = linear_model.Lasso().fit(X,y)

print(lin.coef_)
print(lin.intercept_)

print(lasso.coef_)
print(lasso.intercept_)

print('Linear regression score',lin.score(X,y))
print('Lasso score',lasso.score(X,y))

输出:

[-0.00446436 -0.04509905  0.07870413 -0.00165025 -0.03951546]
0.5010650787133537
[-0. -0.  0. -0. -0.]
0.495
Linear regression score 0.003094912043144493
Lasso score 0.0