Machine Learning 10 Boosting家族
[TOC]
Xgboost
1 普通训练
2 对于利用交叉训练的
-
首先需要利用
DMatrix
来进行转换 -
然后通过xgb的
train()
来进行训练
for fold_n (train_idx, val_idx) in enumerate(folds.split(X)):
train_data = xgb.DMatrix(data=X_train)
val_data = xgb.DMatrix(data=X_val)
model = xgb.train()
Lightgbm
0 相关预处理
a) 中文属性的问题,需要编码,不然无法训练
1 普通训练
2 对于利用交叉训练的
几个组成成分
oof
: out-of-foldsclf
: classifiertrn_idx
,val_idx
: 是用来在交叉验证 中用来索引到数据的,因为是需要交叉验证,选取特定的集合- lightgbm需要用lgb.Dataset 来获取他特有的数据的格式。
# 两个其他的特殊 属性数组,一个储存的是得到数据的属性的数组(如果是整个数据集的所有属性的话,那features=train.columns)
features = ['feature1', 'feature2', 'feature3', 'feature4']
cat_feats = ['feature1', 'feature4']
# oof, predictions
oof = np.zeros(len(train))
prediction = np.zeros(len(train))
for fold_n, (trn_idx, val_idx) in enumerate(folds.split(X))
# 利用idx来找到交叉验证集
trn_data, val_data = lgb.Dataset(X[trn_idx], label=target[trn_idx]), lgb.Dataset(X[val_idx], label=target[val_idx])
'''
(如果需要的话,可能要通过iloc结合features来获取需要的提取的一些属性的数据)
trn_data, val_data = lgb.Dataset(X.iloc[trn_idx][features], label=target[trn_idx]), lgb.Dataset(X.iloc[val_idx][features], label=target[val_idx])
'''
clf = lgb.train(param, trn_data, epochs, valid_sets=[trn_data, val_data], verbose_eval=200, early_stopping_rounds=early_stopping_rounds, categorical_feature=cat_feats)
oof = clf.predict(train.iloc[trn_idx][features], num_iteration=clf.best_iteration)
fold_importance_df = pd.DataFrame()
fold_importance_df['Feature'] = [map_columns[i] for i in num_features]