機器學習(十七)Microsoft的InterpretM可解釋性 機器學習模型

InterpretML 簡介

  • 適合可解釋的模型

  • 解釋blackbox機器學習,可視化的展示“黑箱"機器學習

InterpretML是一個開源軟件包,用於訓練可解釋的模型並解釋黑盒系統。可解釋性主要表現在以下幾點:

  • 模型調試 - 模型哪裏出現了錯誤?

  • 檢測偏差 - 模型表現出哪些區分能力?

  • 策略學習 - 模型是否滿足某些規則要求?

  • 高風險的應用 - 醫療保健,金融,司法等

從歷史上看,最容易理解的模型不是很準確,最準確的模型是不可理解的。 Microsoft Research開發了一種稱爲可解釋增強機Explainable Boosting Machine(EBM)的算法,該算法具有高精度和可懂度。 EBM使用現代機器學習技術,如裝袋和助推,爲傳統GAM(Generalized Additive Models)注入新的活力。 這使它們像隨機森林和梯度提升樹一樣準確,並且還增強了它們的可懂度和可編輯性。

除了EBM之外,InterpretML還支持LIME,SHAP,線性模型,部分依賴,決策樹和規則列表等方法。該軟件包可以輕鬆比較和對比模型,以找到最適合您需求的模型。

安裝

Python 3.5+ | Linux, Mac OS X, Windows

pip install numpy scipy pyscaffold
pip install -U interpret

實例1 迴歸任務-波士頓房價預測

import pandas as pd
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
​
boston = load_boston()
feature_names = list(boston.feature_names)
X, y = pd.DataFrame(boston.data, columns=feature_names), boston.target
​
seed = 1
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=seed)

探索數據集

from interpret import show
from interpret.data import Marginal
​
marginal = Marginal().explain_data(X_train, y_train, name = 'Train Data')
show(marginal)


很強大,比以前自己在做的繁瑣EDA的時候便捷多了,marginal可以識別出變量的類型,比如連續變量或者類別型變量,可以計算出與Y的相關性係數等。

訓練 Explainable Boosting Machine (EBM)

from interpret.glassbox import ExplainableBoostingRegressor, LinearRegression, RegressionTree
​
ebm = ExplainableBoostingRegressor(random_state=seed)
ebm.fit(X_train, y_train)   #Works on dataframes and numpy arrays

ExplainableBoostingRegressor(data_n_episodes=2000,
early_stopping_run_length=50,
early_stopping_tolerance=1e-05,
feature_names=['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT'],
feature_step_n_inner_bags=0,
feature_types=['continuous', 'continuous', 'continuous', 'categorical', 'continuous', 'continuous', 'continuous', 'continuous', 'continuous', 'continuous', 'continuous', 'continuous', 'continuous'],
holdout_size=0.15, holdout_split=0.15, interactions=0,
learning_rate=0.01, max_tree_splits=2,
min_cases_for_splits=2, n_estimators=16, n_jobs=-2,
random_state=1, schema=None, scoring=None,
training_step_episodes=1)

模型全局概覽:模型總體上學到了什麼

ebm_global = ebm.explain_global(name='EBM')
show(ebm_global)


可以學習到每個特徵在不同密度下的貢獻分數

局部解釋:每個特徵與預測的關係

ebm.explain_local(X_test[:5], y_test[:5], name='EBM')
show(ebm_local)

預測值與真實值比較下的不同特徵重要性

評估EBM的性能


迴歸任務評估指標爲RMSE=3.82,R2=0.85(越接近1性能越好),已經很不錯

測試一些其他的可解釋模型

LinearRegression, RegressionTree

from interpret.glassbox import LinearRegression, RegressionTree

lr = LinearRegression(random_state=seed)
lr.fit(X_train, y_train)

rt = RegressionTree(random_state=seed)
rt.fit(X_train, y_train)

使用DashBoard展現不同模型的性能

lr_perf = RegressionPerf(lr.predict).explain_perf(X_test, y_test, name='Linear Regression')
rt_perf = RegressionPerf(rt.predict).explain_perf(X_test, y_test, name='Regression Tree')

show(lr_perf)
show(rt_perf)
show(ebm_perf)



與線性迴歸、決策樹模型作比較,還是EBM的性能強大

Glassbox:展示所有的模型都有全局和局部

lr_global = lr.explain_global(name='Linear Regression')
rt_global = rt.explain_global(name='Regression Tree')

show(lr_global)
show(rt_global)
show(ebm_global)


DashBoard儀表板:一次查看所有內容

show([marginal, lr_global, lr_perf, rt_global, rt_perf, ebm_global, ebm_perf])

完整代碼請見:https://github.com/yanqiangmiffy/quincy-python-v2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章