xgboost特征工程

Xgboost在各大数据挖掘比赛中是一个大杀器,往往可以取得比其他各种机器学习算法更好的效果。数据预处理,特征工程,调参对Xgboost的效果有着非常重要的影响。这里介绍一下运用xgboost的特征选择,运用xgboost的特征选择可以筛选出更加有效的特征代入Xgboost模型。


这里采用的数据集来自于Kaggle | Allstate Claims Severity比赛,这里的训练集如下所示,有116个离散特征(cat1-cat116),14个连续特征(cont1 -cont14),离散特征用字符串表示,先要对其进行数值化:

[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1.    id cat1 cat2 cat3 cat4 cat5 cat6 cat7 cat8 cat9   ...        cont6  \  
  2. 0   1    A    B    A    B    A    A    A    A    B   ...     0.718367     
  3. 1   2    A    B    A    A    A    A    A    A    B   ...     0.438917     
  4. 2   5    A    B    A    A    B    A    A    A    B   ...     0.289648     
  5. 3  10    B    B    A    B    A    A    A    A    B   ...     0.440945     
  6. 4  11    A    B    A    B    A    A    A    A    B   ...     0.178193     
  7.   
  8.       cont7    cont8    cont9   cont10    cont11    cont12    cont13  \  
  9. 0  0.335060  0.30260  0.67135  0.83510  0.569745  0.594646  0.822493     
  10. 1  0.436585  0.60087  0.35127  0.43919  0.338312  0.366307  0.611431     
  11. 2  0.315545  0.27320  0.26076  0.32446  0.381398  0.373424  0.195709     
  12. 3  0.391128  0.31796  0.32128  0.44467  0.327915  0.321570  0.605077     
  13. 4  0.247408  0.24564  0.22089  0.21230  0.204687  0.202213  0.246011  


xgboost的特征选择的代码如下:

[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import numpy as np  
  2. import pandas as pd  
  3. import xgboost as xgb  
  4. import operator  
  5. import matplotlib.pyplot as plt  
  6.   
  7. def ceate_feature_map(features):  
  8.     outfile = open('xgb.fmap''w')  
  9.     i = 0  
  10.     for feat in features:  
  11.         outfile.write('{0}\t{1}\tq\n'.format(i, feat))  
  12.         i = i + 1  
  13.     outfile.close()  
  14.   
  15.   
  16. if __name__ == '__main__':  
  17.     train = pd.read_csv("../input/train.csv")  
  18.     cat_sel = [n for n in train.columns if n.startswith('cat')]  #类别特征数值化  
  19.     for column in cat_sel:  
  20.         train[column] = pd.factorize(train[column].values , sort=True)[0] + 1  
  21.   
  22.     params = {  
  23.         'min_child_weight'100,  
  24.         'eta'0.02,  
  25.         'colsample_bytree'0.7,  
  26.         'max_depth'12,  
  27.         'subsample'0.7,  
  28.         'alpha'1,  
  29.         'gamma'1,  
  30.         'silent'1,  
  31.         'verbose_eval'True,  
  32.         'seed'12  
  33.     }  
  34.     rounds = 10  
  35.     y = train['loss']  
  36.     X = train.drop(['loss''id'], 1)  
  37.   
  38.     xgtrain = xgb.DMatrix(X, label=y)  
  39.     bst = xgb.train(params, xgtrain, num_boost_round=rounds)  
  40.   
  41.     features = [x for x in train.columns if x not in ['id','loss']]  
  42.     ceate_feature_map(features)  
  43.   
  44.     importance = bst.get_fscore(fmap='xgb.fmap')  
  45.     importance = sorted(importance.items(), key=operator.itemgetter(1))  
  46.   
  47.     df = pd.DataFrame(importance, columns=['feature''fscore'])  
  48.     df['fscore'] = df['fscore'] / df['fscore'].sum()  
  49.     df.to_csv("../input/feat_sel/feat_importance.csv", index=False)  
  50.   
  51.     plt.figure()  
  52.     df.plot(kind='barh', x='feature', y='fscore', legend=False, figsize=(610))  
  53.     plt.title('XGBoost Feature Importance')  
  54.     plt.xlabel('relative importance')  
  55.     plt.show()  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值