模型训练与验证
-
训练及预测流程
-
数据集的划分
- 无时序的数据集:简单划分、交叉验证划分
- 有时序的数据集:需考虑时序,nested交叉验证划分
-
模型选择
- 依据在验证集上的效果选择
- 除了关注效果的均值,还要关注稳健性
- 还需考虑线上效果,可将线上效果视为一折数据
-
多元回归
Y = f ( X 1 , X 2 , . . . , X n ) + ε Y = f(X_1,X_2,...,X_n)+\varepsilon Y=f(X1,X2,...,Xn)+ε -
常用的回归模型
- 线性回归
- Y = β 0 + β 1 X 1 + β 2 X 2 + . . . + β n X n + ε Y = \beta_0+\beta_1X_1+\beta_2X_2+...+\beta_nX_n+\varepsilon Y=β0+β1X1+β2X2+...+βnXn+ε
- 可采用最小二乘或梯度下降等方法估计
- 当变量较多时,建议考虑添加 LASSO (L1 正则化) 等惩罚项
- 使用 sklearn 调用线性回归
#从sklearn算法库中导入线性回归模型算法 from sklearn.linear_model import LinearRegression, Lasso from sklearn.datasets import load_diabetes from sklearn.metrics import mean_squared_error data = load_diabetes() clf_lr = LinearRegression() clf_lr.fit(data['data'][:300],data['target'][:300]) clf_lr.coef_ pred_lr = clf_lr.predict(data['data'][300:]) mse_lr = mean_squared_error(data['target'][300:],pred_lr) clf_lasso = Lasso(alpha=0.1) clf_lasso.fit(data['data'][:300],data['target'][:300]) clf_lasso.coef_ pred_lasso = clf_lasso.predict(data['data'][300:]) mse_lasso = mean_squared_error(data['target'][300:],pred_lasso)
- 决策树
- 为每个变量选择切分点,将变量作为节点分裂
- 在分裂后,依据相应分支内所有样本的因变量均值作为估计,并评估拟合误差
- 使用sklearn调用决策树回归
#从sklearn算法库中导入决策树回归 from sklearn.tree import DecisionTreeRegressor from sklearn.datasets import load_diabetes from sklearn.metrics import mean_squared_error data = load_diabetes() clf_dt = DecisionTreeRegressor() clf_dt.fit(data['data'][:300],data['target'][:300]) pred_dt = clf_dt.predict(data['data'][300:]) mse_dt = mean_squared_error(data['target'][300:],pred_dt)
- 随机森林
- 梯度提升树:Gradient Boosting Tree、Xgboost、LightGBM、Catboost
- 线性回归