Skip to content

Commit c055f19

Browse files
committed
ENH Test various l1_ratio values with ElasticNetCV
1 parent a511be4 commit c055f19

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

ch07/README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ figure4.py
3030
lr10k.py
3131
Linear regression on 10K dataset, evaluation by cross-validation
3232
predict10k_en.py
33+
Elastic nets (including with inner cross-validation for parameter
34+
settings). Produces scatter plot.
3335

3436

3537
MovieLens data analysis

ch07/predict10k_en.py

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,16 @@
88
import numpy as np
99
from sklearn.datasets import load_svmlight_file
1010
from sklearn.cross_validation import KFold
11-
from sklearn.linear_model import ElasticNetCV
11+
from sklearn.linear_model import ElasticNetCV, ElasticNet
1212
from sklearn.metrics import mean_squared_error, r2_score
13+
from matplotlib import pyplot as plt
1314

1415
data, target = load_svmlight_file('data/E2006.train')
1516

1617
# Edit the lines below if you want to switch method:
17-
# met = LinearRegression(fit_intercept=True)
18-
met = ElasticNetCV()
18+
# from sklearn.linear_model import Lasso
19+
# met = Lasso(alpha=0.1)
20+
met = ElasticNet(alpha=0.1)
1921

2022
kf = KFold(len(target), n_folds=5)
2123
pred = np.zeros_like(target)
@@ -27,9 +29,44 @@
2729
print('[EN 0.1] R2 on testing (5 fold), {:.2}'.format(r2_score(target, pred)))
2830
print('')
2931

32+
# Construct an ElasticNetCV object (use all available CPUs)
33+
met = ElasticNetCV(n_jobs=-1)
34+
35+
kf = KFold(len(target), n_folds=5)
36+
pred = np.zeros_like(target)
37+
for train, test in kf:
38+
met.fit(data[train], target[train])
39+
pred[test] = met.predict(data[test])
40+
41+
print('[EN CV] RMSE on testing (5 fold), {:.2}'.format(np.sqrt(mean_squared_error(target, pred))))
42+
print('[EN CV] R2 on testing (5 fold), {:.2}'.format(r2_score(target, pred)))
43+
print('')
44+
3045
met.fit(data, target)
3146
pred = met.predict(data)
32-
print('[EN 0.1] RMSE on training, {:.2}'.format(np.sqrt(mean_squared_error(target, pred))))
33-
print('[EN 0.1] R2 on training, {:.2}'.format(r2_score(target, pred)))
47+
print('[EN CV] RMSE on training, {:.2}'.format(np.sqrt(mean_squared_error(target, pred))))
48+
print('[EN CV] R2 on training, {:.2}'.format(r2_score(target, pred)))
49+
50+
51+
# Construct an ElasticNetCV object (use all available CPUs)
52+
met = ElasticNetCV(n_jobs=-1, l1_ratio=[.01, .05, .25, .5, .75, .95, .99])
53+
54+
kf = KFold(len(target), n_folds=5)
55+
pred = np.zeros_like(target)
56+
for train, test in kf:
57+
met.fit(data[train], target[train])
58+
pred[test] = met.predict(data[test])
59+
60+
61+
print('[EN CV l1_ratio] RMSE on testing (5 fold), {:.2}'.format(np.sqrt(mean_squared_error(target, pred))))
62+
print('[EN CV l1_ratio] R2 on testing (5 fold), {:.2}'.format(r2_score(target, pred)))
63+
print('')
3464

3565

66+
fig, ax = plt.subplots()
67+
y = target
68+
ax.scatter(y, pred, c='k')
69+
ax.plot([-5,-1], [-5,-1], 'r-', lw=2)
70+
ax.set_xlabel('Actual value')
71+
ax.set_ylabel('Predicted value')
72+
fig.savefig('Figure_10k_scatter_EN_l1_ratio.png', dpi=150)

0 commit comments

Comments
 (0)