iml 包
機器學習模型通掣炙蹋可以很好地進行預測,但無法解釋。 iml軟件包提供了用于分析任何黑匣子機器學習模型的工具:
特征重要性:哪些是最重要的功能但惶?
特征效應:特征如何影響預測女责? (累積的局部影響漆枚,偏相關(guān)圖和個別條件期望曲線)
單個預測的解釋:單個數(shù)據(jù)點的特征值如何影響其預測? (LIME和Shapley值)
替代樹:我們可以用短決策樹來近似底層黑匣子模型嗎抵知?
iml包適用于任何分類和回歸機器學習模型:隨機森林墙基,線性模型,神經(jīng)網(wǎng)絡刷喜,xgboost等残制。
示例
1.讀取數(shù)據(jù)并建立隨機森林模型
library("iml")
library("randomForest")
data("Boston", package = "MASS")
head(Boston)
set.seed(42)
rf = randomForest(medv ~ ., data = Boston, ntree = 50)
X = Boston[which(names(Boston) != "medv")]
predictor = Predictor$new(rf, data = X, y = Boston$medv)
- 特征重要性圖
我們可以使用FeatureImp來衡量每個特征對于預測的重要性。 特征重要性度量是通過改組每個特征并測量性能下降多少來起作用的掖疮。 對于此回歸任務痘拆,我們選擇使用平均絕對誤差(mae)來衡量性能損失,另一種選擇是均方誤差(mse)氮墨。
imp = FeatureImp$new(predictor, loss = "mae")
plot(imp)
print(imp$results)
feature | importance.05 | importance | importance.95 | permutation.error |
---|---|---|---|---|
lstat | 3.557901 | 4.632124 | 5.497080 | 4.565000 |
rm | 2.900720 | 3.119034 | 4.531629 | 3.073835 |
nox | 1.667456 | 1.714099 | 1.881914 | 1.689260 |
crim | 1.569166 | 1.656692 | 1.679968 | 1.632685 |
dis | 1.593274 | 1.626608 | 1.872172 | 1.603037 |
indus | 1.351980 | 1.462431 | 1.485823 | 1.441239 |
ptratio | 1.388786 | 1.417079 | 1.538757 | 1.396544 |
age | 1.345481 | 1.416432 | 1.485841 | 1.395906 |
tax | 1.254460 | 1.361721 | 1.442950 | 1.341988 |
black | 1.205680 | 1.254997 | 1.340960 | 1.236811 |
rad | 1.059286 | 1.132156 | 1.186773 | 1.115750 |
zn | 1.035060 | 1.074501 | 1.091897 | 1.058930 |
chas | 0.996149 | 1.036302 | 1.072554 | 1.021285 |
- 特征效應
除了知道哪些特征很重要外纺蛆,我們還對特征如何影響預測結(jié)果感興趣。 FeatureEffect類實現(xiàn)累積的局部效應圖规揪,偏依賴圖和單個條件期望曲線桥氏。 下圖顯示了“ lstat”特征的局部累積效果(ALE)。 ALE顯示了當特征變化時預測結(jié)果如何變化猛铅。 x軸上的標記表示“ lstat”特征的分布字支,顯示了一個區(qū)域與預測結(jié)果的相關(guān)性(很少或沒有點表示我們不應過度解釋該區(qū)域)。
ale = FeatureEffect$new(predictor, feature = "lstat")
ale$plot()
effs = FeatureEffects$new(predictor)
plot(effs)
4.交互作用
我們還可以衡量要素之間相互作用的強烈程度奸忽。 交互作用量度取決于交互作用解釋了f(x)的方差堕伪。 度量介于0(無交互)和1( f(x)因交互而引起的方差的100%)之間。 對于每個特征栗菜,我們衡量它們與任何其他特征的交互程度:
interact = Interaction$new(predictor)
plot(interact)
我們還可以指定一項特征欠雌,并衡量其與所有其他特征的所有2向交互
interact = Interaction$new(predictor, feature = "crim")
plot(interact)
- 替代模型
使模型更易于解釋的另一種方法是用一個更簡單的模型-決策樹替換黑匣子。 我們采用黑匣子模型(在我們的情況下為隨機森林)的預測疙筹,并針對原始特征和預測結(jié)果訓練決策樹富俄。 該圖顯示了擬合樹的終端節(jié)點。 maxdepth參數(shù)控制樹的生長深度而咆,以及樹的可解釋性霍比。
tree = TreeSurrogate$new(predictor, maxdepth = 2)
plot(tree)
使用替換的決策樹模型進行預測
tree$predict(Boston)
6.1 Local模型解釋單個預測值
> lime.explain = LocalModel$new(predictor, x.interest = X[1,])
Loading required package: glmnet
Loading required package: Matrix
Loaded glmnet 3.0-2
Loading required package: gower
> lime.explain$results
beta x.recoded effect x.original feature feature.value
rm 4.4836483 6.575 29.479987 6.575 rm rm=6.575
ptratio -0.5244767 15.300 -8.024493 15.3 ptratio ptratio=15.3
lstat -0.4348698 4.980 -2.165652 4.98 lstat lstat=4.98
> lime.explain = LocalModel$new(predictor, x.interest = X[1,])
> lime.explain$results
> plot(lime.explain)
beta | x.recoded | effect | x.original | feature | feature.value | |
---|---|---|---|---|---|---|
rm | 4.3179058 | 6.421 | 27.725273 | 6.421 | rm | rm=6.421 |
ptratio | -0.5330579 | 17.800 | -9.488430 | 17.8 | ptratio | ptratio=17.8 |
lstat | -0.4418233 | 9.140 | -4.038265 | 9.14 | lstat | lstat=9.14 |
6.2 博弈論解釋單個預測值
shapley = Shapley$new(predictor, x.interest = X[1,])
shapley$plot()
7.并行計算見幫助文檔