xgboost.plot_importance畫特征重要性,字段是中文名稱時


1.一般來說我們可以使用xgboost.get_score去畫圖,但是如果字段名字有中文時,是會報錯的

2.可以通過映射關系,從plot_importance的參數入手。但是可能會復雜一下。

3.可以使用xgb.DMatrix(tfeature_names=list),這個方法簡單實用。

下面演示一下第三個方法:

train_x, test_x, train_y, test_y = train_test_split(data_x.values, data_y.values, test_size=0.3,random_state=1234,stratify=data_y)

d_train = xgb.DMatrix(train_x, label=train_y,feature_names=list(data_x.columns))
d_valid = xgb.DMatrix(test_x, label=test_y,feature_names=list(data_x.columns))
watchlist = [(d_train, 'train'), (d_valid, 'valid')]
#參數設置
params={
    'eta': 0.2, # 特征權重 取值范圍0~1 通常最后設置eta為0.01~0.2
    'max_depth':3,   # 通常取值:3-10 樹的深度
    'min_child_weight':6, # 最小樣本的權重,調大參數可以防止過擬合
    'gamma':0.3,
    'subsample':0.8, #隨機取樣比例
    'colsample_bytree':0.8, #默認為1 ,取值0~1 對特征隨機采集比例
    'booster':'gbtree', #迭代樹
    'objective': 'binary:logistic', #邏輯回歸,輸出為概率
    'nthread':8, #設置最大的進程量,若不設置則會使用全部資源
    'scale_pos_weight': 10, #默認為0,1可以處理類別不平衡
    'lambda':1,   #默認為1
    'seed':1234, #隨機數種子
    'silent':1 , #0表示輸出結果
    'eval_metric': 'auc' # 檢驗指標
}
bst = xgb.train(params, d_train,1000,watchlist,early_stopping_rounds=500, verbose_eval=10)
tree_nums=bst.best_ntree_limit
print('最優模型樹的數量:%s,auc:%s' % (bst.best_ntree_limit, bst.best_score)) #最優模型樹的數量:81,auc:0.870911
bst = xgb.train(params, d_train,tree_nums,watchlist,early_stopping_rounds=500, verbose_eval=10)
#joblib.dump(bst, 'd:/xgboost.model') #保存模型

###########
plot_importance(bst,max_num_features=20)
plt.show()

按照一般的建模流程做就可以,不必在意是否能運行上面這段代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM