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])