|
8 | 8 | import numpy as np |
9 | 9 | from sklearn.datasets import load_svmlight_file |
10 | 10 | from sklearn.cross_validation import KFold |
11 | | -from sklearn.linear_model import ElasticNetCV |
| 11 | +from sklearn.linear_model import ElasticNetCV, ElasticNet |
12 | 12 | from sklearn.metrics import mean_squared_error, r2_score |
| 13 | +from matplotlib import pyplot as plt |
13 | 14 |
|
14 | 15 | data, target = load_svmlight_file('data/E2006.train') |
15 | 16 |
|
16 | 17 | # 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) |
19 | 21 |
|
20 | 22 | kf = KFold(len(target), n_folds=5) |
21 | 23 | pred = np.zeros_like(target) |
|
27 | 29 | print('[EN 0.1] R2 on testing (5 fold), {:.2}'.format(r2_score(target, pred))) |
28 | 30 | print('') |
29 | 31 |
|
| 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 | + |
30 | 45 | met.fit(data, target) |
31 | 46 | 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('') |
34 | 64 |
|
35 | 65 |
|
| 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