1. 程式人生 > >xgboost輸出特徵重要性排名和權重值

xgboost輸出特徵重要性排名和權重值

在機器學習實踐中,我們要經常用到xgboost框架去訓練資料,然後用訓練得到的模型再去預測其他未知的資料的標籤。

在判斷訓練得到的模型是否合理時,一個很重要的步驟就是檢視xgboost模型的特徵重要性排序。如果觀察得到模型的排名前幾的特徵都不符合我們正常的思維,那麼模型很可能是不穩定或者有問題的。在訓練得到模型檔案及特徵對映檔案後,可以通過下面一段程式碼檢視特徵排名、特徵名稱、特徵權重值

#-*-encoding: utf-8-*-


import xgboost as xgb
import pandas as pd
import operator
from matplotlib import pylab as plt
from pylab import *

fm = mpl.font_manager
fm.get_cachedir()
model_dir = 'your_model_directory_name/'
model_file = 'your_model_file_name'
fmap_file = 'your_fmap_file_name'
model =xgb.Booster(model_file=model_dir + model_file)


importance = model.get_fscore(fmap=model_dir + fmap_file)
f = open(model_dir + fmap_file)
fmap_dict = {}
for line in f:
    line = line.strip().split()
    fmap_dict[line[1]] = line[0]
feature_num = 10 #想要檢視top10的特徵名稱及權重,這裡設定想要檢視前多少個特徵及其權重
importance = sorted(importance.items(), key=operator.itemgetter(1), reverse=True)
importance = importance[:feature_num]
index = 1
print '特徵排名', '特徵名稱', '特徵權重值'
for line in importance:
    print index, fmap_dict[str(line[0])[1:]], line[1]
    index += 1