Я использую эластичную сеть для набора данных с 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 и 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
И когда я пропускаю одну перекрестную проверку, я получаю среднеквадратическое среднеквадратичное значение около 3, поэтому модель работает не плохо. Почему все веса 0? Спасибо!
РЕДАКТИРОВАТЬ: Когда я объявляю модель как:
EN = ElasticNet(alpha=0.1)
Вес снова. Почему это ???