集成学习
就是通过某种方式把几种机器学习方法融合起来,得到更好的效果
一、问题分析
基于Stacking的思想,以LightGBM、随机森林、支持向量机为基学习器,多元线性回归模型作为次学习器,构建融合模型,并通过实验证明,融合模型的拟合能力较强于基学习器,误差更低。
二、方法
2、基学习器
SVM
可用于回归问题也可用于分类问题
随机森林
lightbgm
3、集成学习
集成学习(Ensemble Learning)是一种能在很多机器学习任务上提高准确率的有效技术,它按照不同的思路来组合基础模型形成一个强学习器,从而在机器学习任务达到更好的效果。目前,有三种常见的集成学习框架:bagging,boosting和stacking。
① bagging:从训练集中进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果(这里每个基模型互不相关)。
② boosting:训练过程为阶梯状,基模型按次序一一进行训练(实现上可以做到并行),基模型的训练集按照某种策略每次都进行一定的转化。对所有基模型预测的结果进行线性综合产生最终的预测结果(后一个模型在前一个模型的基础上建立)。
③ stacking:stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为特征输入到模型中进行再训练,从而得到完整的stacking模型。stacking的方法在各大数据挖掘比赛上都很风靡,模型融合之后能够小幅度的提高模型的预测准确度。(二次训练)
三、代码实现
2、stacking方法(效果最好)
① SVR回归(SVM的回归模型的名字叫SVR)
from sklearn.svm import SVR
#划分数据集
x_train, x_val, y_train, y_val =get_data_plit(df,y,feature)
# 模型
svr=SVR()
# 训练
svr.fit(x_val,y_val)
# 评价
mean_absolute_error(svr.predict(x_val),y_val)
mean_squared_error(svr.predict(x_val),y_val)
② 随机森林RF
from sklearn.ensemble import RandomForestRegressor
x_train, x_val, y_train, y_val =get_data_plit(df,y,feature)
rf=RandomForestRegressor()
rf.fit(x_train,y_train)
mean_absolute_error(rf.predict(x_val),y_val)
mean_squared_error(rf.predict(x_val),y_val)
③ lgb(使用默认参数)
import lightgbm as lgb
x_train, x_val, y_train, y_val =get_data_plit(df,y,feature)
lgbR=lgb.LGBMRegressor(max_depth=4)
lgbR.fit(x_train,y_train)
mean_absolute_error(lgbR.predict(x_val),y_val)
mean_squared_error(lgbR.predict(x_val),y_val)
④ 线性回归stacking(集成学习,融合rf,SVR,LGB这三种机器学习方法)
from sklearn.ensemble import StackingRegressor
from sklearn.linear_model import LinearRegression
x_train, x_val, y_train, y_val =get_data_plit(df,y,feature)
estimators = [
('rf', RandomForestRegressor()),
('svr', SVR()),
("lgb",lgb.LGBMRegressor())
]
stacking= StackingRegressor(estimators=estimators,final_estimator=LinearRegression())
stacking.fit(x_train,y_train)
mean_absolute_error(stacking.predict(x_val),y_val)
mean_squared_error(stacking.predict(x_val),y_val)