首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于数据的平方矩阵,我实现了线性回归的$R^2=1$和拉索的$R^2=0$。背后的直觉是什么?

对于数据的平方矩阵,我实现了线性回归的$R^2=1$和拉索的$R^2=0$。背后的直觉是什么?
EN

Data Science用户
提问于 2019-12-28 09:52:55
回答 1查看 112关注 0票数 4

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

在线性回归中,我在训练集上得到了一个完美的分数,而在Lasso中,我得到了0的分数。

代码语言:javascript
运行
复制
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.0Lasso分数0.0我的问题将是:

  1. 有人能给我一个直观的想法,为什么一个方阵,拉索回归得到不同的结果与线性回归?
  2. 拉索收缩背后的直觉是什么?

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

EN

回答 1

Data Science用户

发布于 2019-12-28 10:43:13

这里发生了几件事:

  1. 你的矩阵是100x100。所以,在线性模型中,你没有自由度,这会导致R^2=1见这篇文章
  2. 你用随机数。因此,它们在解释因变量(基本上是噪音)方面没有什么意义。由于Lasso“收缩”的参数是无用的(在完全噪声的情况下没有有用的参数),所以所有参数都设置为零。这反过来也为您提供了一个R^2=0。在这种情况下,模型只包含一个截距(应该等于0.5),实质上是平均值。

将矩阵更改为列少于行,您将得到线性回归的低(但正) R^2。再看看拉索系数,它们都是零。

也请看一下预测值。你会发现线性模型不能很好地工作。在这种情况下,R平方没有给出模型拟合的任何指示。

你也可以尝试改变随机模式,以有一些趋势,你会发现,拉索不会缩小所有系数为零。

代码语言:javascript
运行
复制
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))

输出:

代码语言:javascript
运行
复制
[-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
票数 6
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/65545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档