日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模型融合方法

發布時間:2023/12/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模型融合方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • GBDT模型
  • #GradientBoostingRegressor梯度提升決策樹 folds = StratifiedKFold(n_splits=5, shuffle=True, random_state=2018) oof_gbr_263 = np.zeros(train_shape) predictions_gbr_263 = np.zeros(len(X_test_263))for fold_, (trn_idx, val_idx) in enumerate(folds.split(X_train_263, y_train)):print("fold n°{}".format(fold_+1))tr_x = X_train_263[trn_idx]tr_y = y_train[trn_idx]gbr_263 = gbr(n_estimators=400, learning_rate=0.01,subsample=0.65,max_depth=7, min_samples_leaf=20,max_features=0.22,verbose=1)gbr_263.fit(tr_x,tr_y)oof_gbr_263[val_idx] = gbr_263.predict(X_train_263[val_idx])predictions_gbr_263 += gbr_263.predict(X_test_263) / folds.n_splitsprint("CV score: {:<8.8f}".format(mean_squared_error(oof_gbr_263, target)))
  • XGB模型
  • ##### xgb_263 #xgboost xgb_263_params = {'eta': 0.02, #lr'max_depth': 6, 'min_child_weight':3,#最小葉子節點樣本權重和'gamma':0, #指定節點分裂所需的最小損失函數下降值。'subsample': 0.7, #控制對于每棵樹,隨機采樣的比例'colsample_bytree': 0.3, #用來控制每棵隨機采樣的列數的占比 (每一列是一個特征)。'lambda':2,'objective': 'reg:linear', 'eval_metric': 'rmse', 'silent': True, 'nthread': -1}folds = StratifiedKFold(n_splits=5, shuffle=True, random_state=2019) oof_xgb_263 = np.zeros(len(X_train_263)) predictions_xgb_263 = np.zeros(len(X_test_263))for fold_, (trn_idx, val_idx) in enumerate(folds.split(X_train_263, y_train)):print("fold n°{}".format(fold_+1))trn_data = xgb.DMatrix(X_train_263[trn_idx], y_train[trn_idx])val_data = xgb.DMatrix(X_train_263[val_idx], y_train[val_idx])watchlist = [(trn_data, 'train'), (val_data, 'valid_data')]xgb_263 = xgb.train(dtrain=trn_data, num_boost_round=3000, evals=watchlist, early_stopping_rounds=600, verbose_eval=500, params=xgb_263_params)oof_xgb_263[val_idx] = xgb_263.predict(xgb.DMatrix(X_train_263[val_idx]), ntree_limit=xgb_263.best_ntree_limit)predictions_xgb_263 += xgb_263.predict(xgb.DMatrix(X_test_263), ntree_limit=xgb_263.best_ntree_limit) / folds.n_splitsprint("CV score: {:<8.8f}".format(mean_squared_error(oof_xgb_263, target)))
  • 隨機森林模型
  • #RandomForestRegressor隨機森林 folds = KFold(n_splits=5, shuffle=True, random_state=2019) oof_rfr_263 = np.zeros(len(X_train_263)) predictions_rfr_263 = np.zeros(len(X_test_263))for fold_, (trn_idx, val_idx) in enumerate(folds.split(X_train_263, y_train)):print("fold n°{}".format(fold_+1))tr_x = X_train_263[trn_idx]tr_y = y_train[trn_idx]rfr_263 = rfr(n_estimators=1600,max_depth=9, min_samples_leaf=9, min_weight_fraction_leaf=0.0,max_features=0.25,verbose=1,n_jobs=-1) #并行化#verbose = 0 為不在標準輸出流輸出日志信息 #verbose = 1 為輸出進度條記錄 #verbose = 2 為每個epoch輸出一行記錄rfr_263.fit(tr_x,tr_y)oof_rfr_263[val_idx] = rfr_263.predict(X_train_263[val_idx])predictions_rfr_263 += rfr_263.predict(X_test_263) / folds.n_splitsprint("CV score: {:<8.8f}".format(mean_squared_error(oof_rfr_263, target)))
  • LightGBM
  • ##### lgb_263 # #lightGBM決策樹 lgb_263_param = { 'num_leaves': 7, 'min_data_in_leaf': 20, #葉子可能具有的最小記錄數 'objective':'regression', 'max_depth': -1, 'learning_rate': 0.003, "boosting": "gbdt", #用gbdt算法 "feature_fraction": 0.18, #例如 0.18時,意味著在每次迭代中隨機選擇18%的參數來建樹 "bagging_freq": 1, "bagging_fraction": 0.55, #每次迭代時用的數據比例 "bagging_seed": 14, "metric": 'mse', "lambda_l1": 0.1, "lambda_l2": 0.2, "verbosity": -1} folds = StratifiedKFold(n_splits=5, shuffle=True, random_state=4) #交叉切分:5 oof_lgb_263 = np.zeros(len(X_train_263)) predictions_lgb_263 = np.zeros(len(X_test_263))for fold_, (trn_idx, val_idx) in enumerate(folds.split(X_train_263, y_train)):print("fold n°{}".format(fold_+1))trn_data = lgb.Dataset(X_train_263[trn_idx], y_train[trn_idx])val_data = lgb.Dataset(X_train_263[val_idx], y_train[val_idx])#train:val=4:1num_round = 10000lgb_263 = lgb.train(lgb_263_param, trn_data, num_round, valid_sets = [trn_data, val_data], verbose_eval=500, early_stopping_rounds = 800)oof_lgb_263[val_idx] = lgb_263.predict(X_train_263[val_idx], num_iteration=lgb_263.best_iteration)predictions_lgb_263 += lgb_263.predict(X_test_263, num_iteration=lgb_263.best_iteration) / folds.n_splitsprint("CV score: {:<8.8f}".format(mean_squared_error(oof_lgb_263, target)))
  • 極端隨機森林回歸
  • #ExtraTreesRegressor 極端隨機森林回歸 folds = KFold(n_splits=5, shuffle=True, random_state=13) oof_etr_263 = np.zeros(train_shape) predictions_etr_263 = np.zeros(len(X_test_263))for fold_, (trn_idx, val_idx) in enumerate(folds.split(X_train_263, y_train)):print("fold n°{}".format(fold_+1))tr_x = X_train_263[trn_idx]tr_y = y_train[trn_idx]etr_263 = etr(n_estimators=1000,max_depth=8, min_samples_leaf=12, min_weight_fraction_leaf=0.0,max_features=0.4,verbose=1,n_jobs=-1)# max_feature:劃分時考慮的最大特征數etr_263.fit(tr_x,tr_y)oof_etr_263[val_idx] = etr_263.predict(X_train_263[val_idx])predictions_etr_263 += etr_263.predict(X_test_263) / folds.n_splitsprint("CV score: {:<8.8f}".format(mean_squared_error(oof_etr_263, target)))
  • Bagging方法
    投票法是一種遵循少數服從多數原則的集成學習模型,通過多個模型的集成降低方差,從而提高模型的魯棒性。在理想情況下,投票法的預測效果應當優于任何一個基模型的預測效果。
    投票法在回歸模型與分類模型上均可使用:
    回歸投票法:預測結果是所有模型預測結果的平均值。
    分類投票法:預測結果是所有模型種出現最多的預測結果。
    分類投票法又可以被劃分為硬投票與軟投票:
    硬投票:預測結果是所有投票結果最多出現的類。
    軟投票:預測結果是所有投票結果中概率加和最大的類。

  • Boosting方法
    Boosting方法是使用同一組數據集進行反復學習,得到一系列簡單模型,然后組合這些模型構成一個預測性能十分強大的機器學習模型。顯然,Boosting思想提高最終的預測效果是通過不斷減少偏差的形式,與Bagging有著本質的不同。在Boosting這一大類方法中,主要介紹兩類常用的Boosting方式:Adaptive Boosting 和 Gradient Boosting 以及它們的變體Xgboost、LightGBM以及Catboost。

  • Stacking方法
    Stacking,這個集成方法在比賽中被稱為“懶人”算法,因為它不需要花費過多時間的調參就可以得到一個效果不錯的算法,同時,這種算法也比前兩種算法容易理解的多,因為這種集成學習的方式不需要理解太多的理論,只需要在實際中加以運用即可。 stacking嚴格來說并不是一種算法,而是精美而又復雜的,對模型集成的一種策略。Stacking集成算法可以理解為一個兩層的集成,第一層含有多個基礎分類器,把預測的結果(元特征)提供給第二層, 而第二層的分類器通常是邏輯回歸,他把一層分類器的結果當做特征做擬合輸出預測結果。在介紹Stacking之前,我們先來對簡化版的Stacking進行討論,也叫做Blending,接著我們對Stacking進行更深入的討論。

  • Blending方法
    下面我們來詳細討論下這個Blending集成學習方式:

  • (1) 將數據劃分為訓練集和測試集(test_set),其中訓練集需要再次劃分為訓練集(train_set)和驗證集(val_set);
    (2) 創建第一層的多個模型,這些模型可以使同質的也可以是異質的;
    (3) 使用train_set訓練步驟2中的多個模型,然后用訓練好的模型預測val_set和test_set得到val_predict, test_predict1;
    (4) 創建第二層的模型,使用val_predict作為訓練集訓練第二層的模型;
    (5) 使用第二層訓練好的模型對第二層測試集test_predict1進行預測,該結果為整個測試集的結果。

    總結

    以上是生活随笔為你收集整理的模型融合方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。