Python 弹性净回归是否能够完美回归y=x?

Python 弹性净回归是否能够完美回归y=x?,python,scikit-learn,linear-regression,Python,Scikit Learn,Linear Regression,我有一个玩具数据集,包含一个自变量x和一个因变量y=x。线性回归可以找到右截距0和系数1。但弹性网络总是给出非零截距,通常系数为0。我知道它是正则化的,所以它需要更小的系数。但这是预期的结果吗?下面是Python/Scikit学习的代码 #!/usr/bin/env python import numpy as np from sklearn.linear_model import ElasticNet, LinearRegression X = np.zeros((10, 1)) X[:,

我有一个玩具数据集,包含一个自变量
x
和一个因变量
y=x
。线性回归可以找到右截距0和系数1。但弹性网络总是给出非零截距,通常系数为0。我知道它是正则化的,所以它需要更小的系数。但这是预期的结果吗?下面是Python/Scikit学习的代码

#!/usr/bin/env python
import numpy as np
from sklearn.linear_model import ElasticNet, LinearRegression

X = np.zeros((10, 1))
X[:, 0] = np.random.random(10)
y = X[:, 0]

lr = LinearRegression().fit(X, y)
print "LR:        ", lr.intercept_, lr.coef_
for l1_ratio in [0.01, 0.05, 0.25, 0.5, 0.75, 0.95, 0.99]:
    enet = ElasticNet(l1_ratio=l1_ratio).fit(X, y)
    print "ENet", l1_ratio, ":", enet.intercept_, enet.coef_

编辑:我之前问过关于回归y=x^2的问题。但这是一个更简单、更令人惊讶的结果。

是的,这是正则化模型的预期结果。如果将
alpha
(正则化器权重)设置为较低的值,例如
.01
,则会看到允许系数增大,从而导致截距减小:

In [12]: for l1_ratio in [0.01, 0.05, 0.25, 0.5, 0.75, 0.95, 0.99]:
        enet = ElasticNet(l1_ratio=l1_ratio, alpha=.01).fit(X, y)
        print "ENet", l1_ratio, ":", enet.intercept_, enet.coef_
   ....:     
ENet 0.01 : 0.061675959472 [ 0.86445434]
ENet 0.05 : 0.0620121787424 [ 0.86371543]
ENet 0.25 : 0.0637498016326 [ 0.85989664]
ENet 0.5 : 0.066063739564 [ 0.85481129]
ENet 0.75 : 0.0685519831348 [ 0.84934286]
ENet 0.95 : 0.0706817244743 [ 0.84466231]
ENet 0.99 : 0.0711236518251 [ 0.84369108]
截距永远不会规则化