SKlearn弹性网所有0的权重,但合理的预测

2024-09-29 19:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个有51个预测值和超过500个特征的数据集上运行一个弹性网络。数据集被分割成3组17个,我想在第一组上运行我的弹性网并分析权重。我使用的是弹性网的SKLearn默认实现,因此:

from sklearn.linear_model import ElasticNet
EN = ElasticNet()

查看前16组时:

Ytri1 = Y[:16] 
Xtri1 = df.head(16).values
print(Xtri1, "\n")
print(Ytri1, "\n")

我明白了: Xtri1 and Ytri1

[[0.0528572  0.06979359 0.27991728 ... 0.47440828 0.49169051 0.57413314]
 [0.11909182 0.06029422 0.27781516 ... 0.37303109 0.32118746 0.41869557]
 [0.10815316 0.00631806 0.21146458 ... 0.37130906 0.31182633 0.38739678]
 ...
 [0.05229341 0.01064162 0.21709352 ... 0.52898461 0.45416569 0.54874849]
 [0.06235364 0.00716286 0.21920198 ... 0.54628248 0.37000325 0.47461543]
 [0.09420443 0.00522829 0.22831954 ... 0.39863555 0.36745167 0.41411779]] 

[11. 11. 11. 11. 11. 11.  8. 11. 11. 11. 10. 12. 11. 11. 10. 11.] 

看起来很标准

但是,当我跑步时:

print(EN.coef_)

要查看重量,我得到:

[-0.  0. -0. -0. -0.  0.  0. -0.  0.  0.  0.  0.  0. -0.  0. -0.  0.  0.
  0. -0. -0.  0. -0. -0.  0.  0. -0.  0.  0.  0. -0.  0.  0. -0.  0.  0.
  0.  0. -0.  0.  0.  0. -0.  0.  0.  0.  0.  0.  0.  0.  0. -0. -0.  0.
 -0. -0.  0.  0.  0.  0.  0.  0.  0. -0. -0. -0.  0. -0. -0.  0.  0.  0.
  0. -0. -0. -0. -0. -0.  0. -0. -0. -0. -0. -0. -0.  0. -0. -0. -0. -0.
 -0.  0. -0. -0. -0.  0. -0. -0. -0. -0. -0.  0.  0. -0. -0. -0.  0. -0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -0.  0.  0.  0.  0. -0.  0. -0.
 -0. -0.  0.  0. -0.  0.  0.  0.  0.  0.  0.  0. -0.  0.  0.  0.  0.  0.
 -0.  0. -0. -0.  0.  0.  0. -0. -0.  0.  0. -0. -0.  0.  0. -0.  0.  0.
  0. -0.  0.  0.  0.  0.  0. -0.  0. -0. -0.  0. -0. -0. -0. -0. -0. -0.
 -0. -0.  0. -0. -0. -0. -0.  0. -0. -0.  0.  0. -0. -0. -0.  0. -0. -0.
 -0. -0. -0.  0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0.  0.  0.  0.
  0.  0. -0.  0.  0.  0.  0.  0. -0. -0. -0. -0. -0.  0.  0.  0.  0. -0.
 -0. -0. -0.  0.  0.  0.  0.  0. -0.  0.  0.  0.  0.  0. -0.  0. -0.  0.
 -0. -0. -0. -0. -0.  0. -0. -0. -0.  0. -0. -0. -0.  0. -0. -0.  0.  0.
  0. -0. -0.  0. -0.  0. -0.  0.  0.  0.  0.  0.  0. -0. -0. -0. -0. -0.
 -0. -0. -0. -0. -0. -0. -0. -0.  0. -0. -0.  0.  0.  0. -0. -0.  0. -0.
 -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0.
 -0.  0. -0. -0. -0.  0. -0. -0. -0. -0.  0. -0. -0. -0. -0. -0. -0. -0.
 -0. -0.  0. -0. -0. -0. -0. -0.  0.  0. -0. -0.  0. -0. -0. -0. -0. -0.
 -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0.  0.  0. -0.
 -0.  0. -0. -0. -0. -0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0. -0. -0. -0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -0. -0. -0.
 -0. -0.  0.  0. -0.  0. -0.  0. -0. -0.  0.  0.  0.  0. -0.  0. -0.  0.
  0. -0.  0.  0. -0.  0. -0. -0. -0.  0.  0. -0.  0.  0. -0. -0. -0. -0.
 -0. -0.  0. -0.  0. -0.  0.  0. -0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0. -0.  0.  0.  0.  0.  0.  0.  0.  0. -0. -0.
 -0. -0. -0. -0. -0. -0. -0. -0. -0. -0.  0.  0.  0.  0.  0. -0. -0. -0.
 -0. -0. -0. -0. -0.  0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0.
 -0.  0. -0. -0. -0. -0. -0.  0. -0. -0. -0. -0.]

这很奇怪,因为:

print("Predicted:", EN.predict([df.loc[17].values]), "Real:", Y[17])

退货:

Predicted: [10.75] Real: 18.0

当我不做交叉验证时,我得到的RMSE大约是3,所以这个模型做得并不差。为什么所有的权重都是0?谢谢

编辑:当我将模型声明为:

EN = ElasticNet(alpha=0.1)

重量又增加了。这是为什么


Tags: 数据模型dfreal弹性en权重values

热门问题