def train_EN_model(_train_x, train_y, _predict_x):
print_title("ElasticNet")
train_x, predict_x = \
standarize_feature(_train_x, _predict_x)
#l1_ratios = [1e-4, 1e-3, 1e-2, 1e-1]
#l1_ratios = [1e-5, 1e-4, 1e-3]
l1_ratios = [0.9, 0.92, 0.95, 0.97, 0.99]
#l1_ratios = [0.5]
min_mse = 1
for r in l1_ratios:
t1 = time.time()
reg_en = linear_model.ElasticNetCV(
l1_ratio=r, cv=5, n_jobs=4, verbose=1, precompute=True)
reg_en.fit(train_x, train_y)
n_nonzeros = (reg_en.coef_ != 0).sum()
_mse = np.mean(reg_en.mse_path_, axis=1)[
np.where(reg_en.alphas_ == reg_en.alpha_)[0][0]]
if _mse < min_mse:
min_mse = _mse
best_l1_ratio = r
best_alpha = reg_en.alpha_
t2 = time.time()
print("ratio(%e) -- n: %d -- alpha: %f -- mse: %f -- "
"time: %.2f sec" %
(r, n_nonzeros, reg_en.alpha_, _mse, t2 - t1))
print("Best l1_ratio and alpha: %f, %f" % (best_l1_ratio, best_alpha))
# predict_model
reg = linear_model.ElasticNet(l1_ratio=best_l1_ratio, alpha=best_alpha)
reg.fit(train_x, train_y)
predict_y = reg.predict(predict_x)
train_y_pred = reg.predict(train_x)
return {"y": predict_y, "train_y": train_y_pred, "coef": reg.coef_}
评论列表
文章目录