xgboost模型特徵重要性的不同計算方式
1.特徵重要性的意義
(邏輯迴歸模型最簡單,我就拿它說事了)
我們都知道在常見的邏輯迴歸模型中,每個特徵對應一個模型引數
w
i
w_{i}
wi,該引數越大,那麼該特徵對模型預測結果的影響就會越大,我們就說該特徵就越重要,因此LR模型的特徵重要性評估方式就是
w
i
w_{i}
wi的大小((體特徵重要性計算方式見我另一篇部落格LR模型特徵重要性排序)。
說了這麼多還沒有提到特徵重要性的意義,其實計算特徵重要性的目的就是為了更好的理解模型,給模型提供可解釋性,通過進一步分析去挖掘更多有用的新特徵。給你一個模型,丟給你一堆資料包去訓練,你知道哪個特徵對你的模型來說不可獲取,哪類特徵對你的模型來說可有可無嗎?這個時候就可以去分析特徵重要性了。
2.Xgboost特徵重要性計算方式
而在陳天奇大神的神作-Xgboost訓練框架中,其本質是GBDT模型的一個優化版的實現框架,作為一個Boosting模型,Xgboost模型也有由一個個的基模型組合而成的,本篇部落格中,我們只介紹基模型為決策樹模型時,如何計算Xgboost輸入資料中的每個特徵的重要性程度。
Talk is cheap,Show me the code
,直接亮程式碼
#!/usr/bin/env python
# -*-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()
print('特徵排名', '特徵名稱', '特徵權重值')
# 模型檔案,特徵對映檔案
model_dir = 'dir_name/'
model_file = 'model_file_name'
fmap_file = 'idx_file_name'
# 讀取模型檔案
model = xgb.Booster(model_file=model_dir + model_file)
# 選擇特徵重要性程度的描述方式,並計算特徵重要性程度
importance = model.get_score(fmap=model_dir + fmap_file, importance_type='weight')
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)
plt.figure()
plt.plot(np.array(list(dict(importance).values())), np.array(list(dict(importance).keys())))
plt.show()
importance = importance[:feature_num]
index = 1
for line in importance:
print(index, fmap_dict[str(line[0])[1:]], line[1])
index += 1
在上面的第22行程式碼,表示我們讀取xgboost模型,並且計算特徵重要性得分。函式get_score
有2個入參,分別是:
- fmap:xgboost的二進位制模型檔案
- importance_type:計算特徵重要性的方式
Xgboost有常見的5種特徵重要性評估方式,分別是'weight', 'gain', 'cover', 'total_gain', 'total_cover'
,下面會分別一一介紹。
- ‘weight’:權重形式,表示在所有樹中,一個特徵在分裂節點時被使用了多少次。
- ‘gain’:(平均)增益形式,表示在所有樹中,一個特徵作為分裂節點存在時,帶來的增益的平均值。
- ‘cover’:(平均)覆蓋度,表示在所有樹中,一個特徵作為分裂節點存在時,覆蓋的樣本數量的平均值。
- ‘total_gain’:相對於’gain’,這裡表示的是帶來的總增益大小。
- ‘total_cover’:相對於’cover’,這裡表示的是覆蓋的總樣本數量。
## 3.Xgboost不同的特徵重要性計算方式優劣分析 此處僅為個人愚見,主要是基於自己在實踐中經驗之談。我在實踐中使用`weight`偏多。
weight
把某個特徵在所有樹中被使用的次數統計了出來,我們知道在Xgboost模型中,基分類器的決策樹中的特徵是可以被重複使用的,當一個特徵不斷的被選作為分裂節點時,那麼我認為該特徵相比於其他特徵是更加重要的。所以我在實踐中也常常使用wight
形式的計算形式來對模型的所有特徵進行重要性排序。
當然了,另外4種–基於增益和覆蓋度的重要性計算方式也自有他們的道理,在實踐中可以視情況選擇。
在重要性計算方式選擇上,有其他什麼更好的參考觀點,歡迎共同學習研討。
相關文章
- xgboost 特徵重要性計算特徵
- xgboost特徵重要性特徵
- 用xgboost模型對特徵重要性進行排序模型特徵排序
- XGBoost 輸出特徵重要性以及篩選特徵特徵
- 【特徵工程】(資料)使用Xgboost篩選特徵重要性特徵工程
- xgboost 特徵重要性選擇 / 看所有特徵哪個重要特徵
- XGBoost學習(六):輸出特徵重要性以及篩選特徵特徵
- 用xgboost獲取特徵重要性及應用特徵
- 【演算法】關於xgboost特徵重要性的評估演算法特徵
- 用xgboost獲取特徵重要性原理及實踐特徵
- xgboost輸出特徵重要性排名和權重值特徵
- 使用XGboost模組XGBClassifier、plot_importance來做特徵重要性排序Import特徵排序
- xgboost 特徵選擇,篩選特徵的正要性特徵
- 影像特徵計算——紋理特徵特徵
- RF、GBDT、XGboost特徵選擇方法特徵
- xgboost 設定每條資料的重要性
- Python中XGBoost的特性重要性和特性選擇Python
- 機器學習之 基於xgboost的特徵篩選機器學習特徵
- 基於Python的Xgboost模型實現Python模型
- xgboost get_fscore 判斷特徵重要程度的三種指標特徵指標
- 案例詳解 | 基於Embedding的特徵安全計算特徵
- 不同量子計算機的架構計算機架構
- 特徵模型和特徵-這是什麼?特徵模型
- 領域驅動設計(DDD)中模型的重要性 - Jeronimo模型
- 特徵工程:基於梯度提升的模型的特徵編碼效果測試特徵工程梯度模型
- python ubuntu lib7 -計算人臉特徵向量PythonUbuntu特徵
- 2 簡單的計算機模型MARIE計算機模型
- 線性模型已退場,XGBoost時代早已來模型
- STM32在ArduinoIDE環境下的開發(不同的下載方式,不同的BootLoader方式,無需BootLoader方式)UIIDEboot
- 雲端計算支援 IT 安全的12種方式
- 雲端計算的7種變化方式
- 好程式設計師web前端分享CSS不同元素margin的計算程式設計師Web前端CSS
- 不同時間段的光色模型模型
- 程式的定義、組成、組織方式、特徵特徵
- 程式設計師計算私活薪資的正確方式程式設計師
- 基於XGBoost模型的幸福度預測——阿里天池學習賽模型阿里
- 大文字平行計算實現方式
- 雲端計算教程學習入門影片:雲端計算的模型都有哪些模型