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-folds
  • clf: classifier
  • trn_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]
  
Posted on Jan 28, 2020