网站建设完成推广,c 网站开发简单实例教程,网页制作免费的素材网站,爱站关键词挖掘查询工具1.简介该部分是代码整理的第二部分#xff0c;为了方便一些初学者调试代码#xff0c;作者已将该部分代码打包成一个工程文件#xff0c;包含简单的数据处理、xgboost配置、五折交叉训练和模型特征重要性打印四个部分。数据处理部分参考#xff1a;代码整理一#xff0c;这…1.简介该部分是代码整理的第二部分为了方便一些初学者调试代码作者已将该部分代码打包成一个工程文件包含简单的数据处理、xgboost配置、五折交叉训练和模型特征重要性打印四个部分。数据处理部分参考代码整理一这里只介绍不同的部分。本文主要是介绍一些重点的参数部分一是方便自己以后再次查询也希望帮助一些初学者快速的使用该项目应用到自己的工程或者比赛中。如果只是想要阅读代码可直接移步到尾部链接。2. 数据处理data pd.concat([train_data, test_data])
cate_feature [gender, cell_province, id_province, id_city, rate, term]
for item in cate_feature:data[item] LabelEncoder().fit_transform(data[item])item_dummies pd.get_dummies(data[item])item_dummies.columns [item str(i 1) for i in range(item_dummies.shape[1])]data pd.concat([data, item_dummies], axis1)
data.drop(cate_feature,axis1,inplaceTrue)该部分在lightgbm中只进行了labelEncoder编码处理然后通过categorical_feature变量处理在lightgbm中使用了类别特征的最优切分进行了处理具体详情参考:柯国霖大佬的回答。xgboost中没有对类别特征做处理这里对其进行了onehot编码处理。而在工程中如果类别过多我一般会放弃进行onehot主要是由于进行onehot会导致特征过于稀疏运算速度变慢严重影响模型的迭代速度并且最终对结果提升很有限,我通常只会进行labelEncoder, 也可以对特征进行embeding处理。3.模型3.1 参数和lightgbm一样xgboost也是使用key-value字典的方式存储参数下面给出的事二分类的参数params {booster: gbtree,objective: binary:logistic,eval_metric: auc,gamma: 0.1,max_depth: 8,alpha: 0,lambda: 0,subsample: 0.7,colsample_bytree: 0.5,min_child_weight: 3,silent: 0,eta: 0.03,nthread: -1,seed: 2019,
}objective目标函数二分类常用的是binary:logistic多分类multi:softmax,当是多分类任务时需要指定类别数量eg:num_class:33;回归任务reg:lineareval_metric评价函数如果该参数没有指定缺省值是通过目标函数来做匹配二分类常用auc和logloss多分类mlogloss回归任务均方误差mse均方根误差rmse, 平均绝对值误差maegamma用于控制是否后剪枝的参数,越大越保守一般0.1、0.2这样子max_depth树的深度对结果影响较大越深越容易过拟合alphaL1正则树的深度过大时可以适大该参数lambdaL2正则subsample随机采样的比率通俗理解就是选多少样本做为训练集选择小于1的比例可以减少方差即防止过拟合colsample_bytree这里是选择多少列作为训练集具体的理解就是选择多少特征min_child_weight决定最小叶子节点样本权重和。当它的值较大时可以避免模型学习到局部的特殊样本。但如果这个值过高会导致欠拟合eta学习率silent: 是否打印训练过程中的信息0表示打印1反之nthread运行的线程数-1所有线程该值需要根据具体情况调整线程对最终结果有一点影响曾今测试线程越多结果会变差一丢丢seed这个随机指定一个常数防止每次结果不一致3.2 五折交叉folds KFold(n_splits5, shuffleTrue, random_state2019)采用五折交叉统计实际就是训练多个模型和平均值融合如果时间允许的情况下10折交叉会好于5折。5折交叉还可以采用StratifiedKFold做切分。3.3 数据加载XGBoost可以加载多种数据格式的训练数据libsvm 格式的文本数据、Numpy 的二维数组、XGBoost 的二进制的缓存文件。加载的数据存储在对象 DMatrix 中而llightgbm是存储在Dataset中trn_data xgb.DMatrix(train_x.iloc[trn_idx], labeltrain_y[trn_idx])
val_data xgb.DMatrix(train_x.iloc[val_idx], labeltrain_y[val_idx])3.4 训练和预测##训练部分
watchlist [(trn_data, train), (val_data, valid)]
clf xgb.train(params, trn_data, num_round, watchlist, verbose_eval200, early_stopping_rounds200)##预测部分
test_pred_prob clf.predict(xgb.DMatrix(test), ntree_limitclf.best_ntree_limit) / folds.n_splitsparams参数字典trn_data 训练的数据num_round迭代次数watchlist这是一个列表用于对训练过程中进行评估列表中的元素。形式是evals [(dtrain,’train’),(dval,’val’)]或者是evals [(dtrain,’train’)],对于第一种情况它使得我们可以在训练过程中观察验证集的效果。verbose_eval 如果为True ,则对evals中元素的评估结果会输出在结果中如果输入数字假设为5则每隔5个迭代输出一次。ntree_limit验证集中最好的结果做预测4.模型重要性模型重要性是根据树模型中该特征的分裂次数做统计的可以基于此重要性来判断特种的重要程度深入的挖掘特征具体代码如下##保存特征重要性
fold_importance_df pd.DataFrame()
fold_importance_df[Feature] clf.get_fscore().keys()
fold_importance_df[importance] clf.get_fscore().values()
fold_importance_df[fold] fold_ 1
feature_importance_df pd.concat([feature_importance_df, fold_importance_df], axis0)##特征重要性显示
## plot feature importance
cols (feature_importance_df[[Feature, importance]] .groupby(Feature).mean().sort_values(byimportance, ascendingFalse).index)
best_features feature_importance_df.loc[feature_importance_df.Feature.isin(cols)].sort_values(byimportance,ascendingFalse)
plt.figure(figsize(8, 15))
sns.barplot(yFeature, ximportance,databest_features.sort_values(byimportance, ascendingFalse))
plt.title(LightGBM Features (avg over folds))
plt.tight_layout()
plt.savefig(../../result/xgb_importances.png)在lightgbm中对应的事clf.feature_importance()函数而在xgboost中对应的是clf.get_fscore()函数。如果特征过多无法完成显示可以只取topN显示如只显示top5cols (feature_importance_df[[Feature, importance]].groupby(Feature).mean().sort_values(byimportance, ascendingFalse)[:5].index)5.小总结xgboost和lightgbm对比它的速度会慢很多使用也没有lighgbm方便但是可以将xgboost训练的结果和lightgbm做融合提升最终的结果。代码地址data_mining_models. 写在最后欢迎关注作者和专栏和作者一块成长ML与DL成长之路推荐关注公众号AI成长社ML与DL的成长圣地。同时推荐鱼佬专栏学习更对竞赛知识机器学习理论与数据竞赛实战推荐阅读【lightgbm/xgboost/nn代码整理一】lightgbm做二分类多分类以及回归任务【lightgbm/xgboost/nn代码整理三】keras做二分类多分类以及回归任务【lightgbm/xgboost/nn代码整理四】pytorch做二分类多分类以及回归任务