LightGBM
11363 ワード
LightGBM:
boostingアルゴリズムの一種で、全量軽量の勾配リフト(LightGradient Boosting Machine)と呼ばれ、マイクロソフトが2017年にオープンソースしたSOTA Boostingアルゴリズムのフレームワークである.
XGBoostと同様に、LightGBMもGBDTアルゴリズムのフレームワークの1つのエンジニアリング実装ですが、より迅速で効率的です.
インストールするときは注意しましょう.問題が発生した場合は、次の巧みな処理方法を参考にしてください.
https://blog.csdn.net/sinat_36226553/article/details/106109821(不思議なライトbm取り付け時の解決方法)
irisデータセットの使用例のコードは次のとおりです.
パラメータ補完:
max_depth,default=-1,type=int,ツリーの最大深さ制限,min_へのフィット防止data_in_leaf,default=20,type=int,リーフノード最小サンプル数,オーバーフィット防止feature_fraction, default=1.0, type=double, 0.0 < feature_fraction<1.0,ランダム選択特徴割合,加速訓練およびオーバーフィット防止feature_fraction_seed,default=2,type=int,ランダムシード数,毎回ランダムにサンプルを選択できる一貫性bagging_fraction,default=1.0,type=double,ランダム森林に類似し,毎回サンプリングせずにデータlambda_を選択するl 1,default=0,type=double,L 1正則lambda_l 2,default=0,type=double,L 2正則min_split_gain,default=0,type=double,最小分割情報利得値top_rate,default=0.2,type=double,大勾配ツリーの保持割合other_rate,default=0.1,type=int,小勾配ツリーの保持割合min_data_per_group,default=100,type=int,各分類グループの最小データ量max_cat_threshold,default=32,type=int,分類特徴の最大しきい値
boostingアルゴリズムの一種で、全量軽量の勾配リフト(LightGradient Boosting Machine)と呼ばれ、マイクロソフトが2017年にオープンソースしたSOTA Boostingアルゴリズムのフレームワークである.
XGBoostと同様に、LightGBMもGBDTアルゴリズムのフレームワークの1つのエンジニアリング実装ですが、より迅速で効率的です.
インストールするときは注意しましょう.問題が発生した場合は、次の巧みな処理方法を参考にしてください.
https://blog.csdn.net/sinat_36226553/article/details/106109821(不思議なライトbm取り付け時の解決方法)
irisデータセットの使用例のコードは次のとおりです.
import pandas as pd
import lightgbm as lgb
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
#
iris = load_iris()
data = iris.data
target = iris.target
X_train, X_test, y_train, y_test =train_test_split(data, target, test_size=0.2)
#
gbm = lgb.LGBMRegressor(objective='regression',
num_leaves=31,
learning_rate=0.05,
n_estimators=20)
#
gbm.fit(X_train, y_train,eval_set=[(X_test, y_test)],eval_metric='l1',early_stopping_rounds=5)
#
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration_)
#
print(mean_squared_error(y_test, y_pred) ** 0.5)
#
print(list(gbm.feature_importances_))
#LightGBM
import time
import numpy as np
import pandas as pd
import lightgbm as lgb
from sklearn.model_selection import KFold
from sklearn.metrics import mean_squared_error
# , label
features = [f for f in df.columns if f not in [label]]
#
def evalerror(pred, df):
label = df.get_label().values.copy()
score = mean_squared_error(label, pred)*0.5
return ('mse', score, False)
#
params = {
'learning_rate': 0.01,
'boosting_type': 'gbdt',
'objective': 'regression',
'metric': 'mse',
'sub_feature': 0.7,
'num_leaves': 60,
'colsample_bytree': 0.7,
'feature_fraction': 0.7,
'min_data': 100,
'min_hessian': 1,
'verbose': -1,
}
t0 = time.time()
train_preds = np.zeros(train.shape[0])
#
kf = KFold(n_splits=5, shuffle=True, random_state=43)
for i, (train_index, valid_index) in enumerate(kf.split(train)):
print('train for {} epoch...'.format(i))
train2 = train.iloc[train_index]
valid2 = train.iloc[valid_index]
lgb_train = lgb.Dataset(train2[features], train2['total_cost'], categorical_feature=['hy', 'sex', 'pay_type'])
lgb_valid = lgb.Dataset(valid2[features], valid2['total_cost'], categorical_feature=['hy', 'sex', 'pay_type'])
model = lgb.train(params,
lgb_train,
num_boost_round=3000,
valid_sets=lgb_valid,
verbose_eval=300,
feval=evalerror,
early_stopping_rounds=100)
#
feat_importance = pd.Series(model.feature_importance(), index=features).sort_values(ascending=False)
train_preds[valid_index] += model.predict(valid2[features], num_iteration=model.best_iteration)
print('Validset score: {}'.format(mean_squared_error(labels, train_preds)*0.5))
print('Cross Validation spend {} seconds'.format(time.time() - t0))
パラメータ補完:
max_depth,default=-1,type=int,ツリーの最大深さ制限,min_へのフィット防止data_in_leaf,default=20,type=int,リーフノード最小サンプル数,オーバーフィット防止feature_fraction, default=1.0, type=double, 0.0 < feature_fraction<1.0,ランダム選択特徴割合,加速訓練およびオーバーフィット防止feature_fraction_seed,default=2,type=int,ランダムシード数,毎回ランダムにサンプルを選択できる一貫性bagging_fraction,default=1.0,type=double,ランダム森林に類似し,毎回サンプリングせずにデータlambda_を選択するl 1,default=0,type=double,L 1正則lambda_l 2,default=0,type=double,L 2正則min_split_gain,default=0,type=double,最小分割情報利得値top_rate,default=0.2,type=double,大勾配ツリーの保持割合other_rate,default=0.1,type=int,小勾配ツリーの保持割合min_data_per_group,default=100,type=int,各分類グループの最小データ量max_cat_threshold,default=32,type=int,分類特徴の最大しきい値