集成學(xué)習(xí)
就是通過(guò)某種方式把幾種機(jī)器學(xué)習(xí)方法融合起來(lái),得到更好的效果
一、問(wèn)題分析
基于Stacking的思想,以LightGBM、隨機(jī)森林、支持向量機(jī)為基學(xué)習(xí)器,多元線性回歸模型作為次學(xué)習(xí)器,構(gòu)建融合模型,并通過(guò)實(shí)驗(yàn)證明,融合模型的擬合能力較強(qiáng)于基學(xué)習(xí)器,誤差更低。
二、方法
2、基學(xué)習(xí)器
SVM
可用于回歸問(wèn)題也可用于分類問(wèn)題
隨機(jī)森林
lightbgm
3、集成學(xué)習(xí)
集成學(xué)習(xí)(Ensemble Learning)是一種能在很多機(jī)器學(xué)習(xí)任務(wù)上提高準(zhǔn)確率的有效技術(shù),它按照不同的思路來(lái)組合基礎(chǔ)模型形成一個(gè)強(qiáng)學(xué)習(xí)器,從而在機(jī)器學(xué)習(xí)任務(wù)達(dá)到更好的效果。目前,有三種常見(jiàn)的集成學(xué)習(xí)框架:bagging,boosting和stacking。
① bagging:從訓(xùn)練集中進(jìn)行子抽樣組成每個(gè)基模型所需要的子訓(xùn)練集,對(duì)所有基模型預(yù)測(cè)的結(jié)果進(jìn)行綜合產(chǎn)生最終的預(yù)測(cè)結(jié)果(這里每個(gè)基模型互不相關(guān))。

② boosting:訓(xùn)練過(guò)程為階梯狀,基模型按次序一一進(jìn)行訓(xùn)練(實(shí)現(xiàn)上可以做到并行),基模型的訓(xùn)練集按照某種策略每次都進(jìn)行一定的轉(zhuǎn)化。對(duì)所有基模型預(yù)測(cè)的結(jié)果進(jìn)行線性綜合產(chǎn)生最終的預(yù)測(cè)結(jié)果(后一個(gè)模型在前一個(gè)模型的基礎(chǔ)上建立)。

③ stacking:stacking是一種分層模型集成框架。以兩層為例,第一層由多個(gè)基學(xué)習(xí)器組成,其輸入為原始訓(xùn)練集,第二層的模型則是以第一層基學(xué)習(xí)器的輸出作為特征輸入到模型中進(jìn)行再訓(xùn)練,從而得到完整的stacking模型。stacking的方法在各大數(shù)據(jù)挖掘比賽上都很風(fēng)靡,模型融合之后能夠小幅度的提高模型的預(yù)測(cè)準(zhǔn)確度。(二次訓(xùn)練)

三、代碼實(shí)現(xiàn)
2、stacking方法(效果最好)
① SVR回歸(SVM的回歸模型的名字叫SVR)
from sklearn.svm import SVR
#劃分?jǐn)?shù)據(jù)集
x_train, x_val, y_train, y_val =get_data_plit(df,y,feature)
# 模型
svr=SVR()
# 訓(xùn)練
svr.fit(x_val,y_val)
# 評(píng)價(jià)
mean_absolute_error(svr.predict(x_val),y_val)
mean_squared_error(svr.predict(x_val),y_val)
② 隨機(jī)森林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(使用默認(rèn)參數(shù))
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(集成學(xué)習(xí),融合rf,SVR,LGB這三種機(jī)器學(xué)習(xí)方法)
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)