超强的 Python 库:DALEX

今天我要向大家介绍一个超强的 Python 库:DALEX

链接:https://github.com/ModelOriented/DALEX

DALEX 是一个专为解释复杂的预测模型而设计的 Python 库。它提供了一组工具,使数据科学家和算法工程师能够更好地理解和解释他们的机器学习模型。

在现实世界中,机器学习模型被广泛使用,并且在分类或回归任务中具有多种应用。由于计算能力的增强、新数据源和新方法的可用性,机器学习模型变得越来越复杂,很难追踪输入变量和模型结果之间的联系。它们因高性能而被使用,但缺乏可解释性是它们最弱的方面之一。

在许多应用中,我们需要知道、理解或证明输入变量在模型中的使用方式以及它们对最终模型预测有什么影响。

图片[1]-超强的 Python 库:DALEX-山海云端论坛

以下是 DALEX 库的一些主要特点和功能。

模型独立性:DALEX 设计为与任何类型的机器学习模型兼容。无论是简单的线性回归还是复杂的深度学习模型,DALEX 都能提供解释。

特征重要性:DALEX 可以计算和展示模型中各个特征对预测结果的重要性。这有助于识别影响模型决策最重要的因素。

模型比较:通过 DALEX,用户可以比较不同模型的性能和解释。这对于选择最适合特定问题的模型非常有用。

可视化:DALEX 提供了多种图表和图形,使模型解释更加直观易懂。

互动工具:DALEX 还配有交互工具,例如 Shiny 应用程序,使用户能够以更动态的方式探索和解释模型。

跨语言支持:虽然最初是为 R 语言开发的,但 DALEX 也提供了 Python 实现,扩大了其适用范围。

开源:作为一个开源项目,DALEX 允许社区贡献和改进,确保其持续发展和适应新的机器学习技术。

DALEX 是一个强大的工具,尤其是在需要解释复杂模型预测的情况下,如在高风险领域(例如金融、医疗或法律)的决策支持系统中。通过提供对模型行为的深入理解,它有助于增加透明度和信任,同时确保模型的公平性和可靠性。

初体验

库的安装

我们可以直接使用 pip 来进行安装。

<code>pip install dalex</code>

加载数据集

这里,我们使用泰坦尼克号数据集作为示例数据集。

<code>import dalex as dx import pandas as pd import numpy as np from sklearn.neural_network import MLPClassifier from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.impute import SimpleImputer from sklearn.pipeline import Pipeline from sklearn.compose import ColumnTransformer data = dx.datasets.load_titanic() X = data.drop(columns='survived') y = data.survived data.head(10)</code>
图片[2]-超强的 Python 库:DALEX-山海云端论坛

训练模型

我们首先对数据集中的不同特征进行了转换。然后训练了一个 MLP 分类器,它有 3 个隐藏层,大小分别为150、100、50。

<code>numerical_features = ['age', 'fare', 'sibsp', 'parch'] numerical_transformer = Pipeline( steps=[ ('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler()) ] ) categorical_features = ['gender', 'class', 'embarked'] categorical_transformer = Pipeline( steps=[ ('imputer', SimpleImputer(strategy='constant', fill_value='missing')), ('onehot', OneHotEncoder(handle_unknown='ignore')) ] ) preprocessor = ColumnTransformer( transformers=[ ('num', numerical_transformer, numerical_features), ('cat', categorical_transformer, categorical_features) ] ) classifier = MLPClassifier(hidden_layer_sizes=(150,100,50), max_iter=500, random_state=0) clf = Pipeline(steps=[('preprocessor', preprocessor), ('classifier', classifier)]) clf.fit(X, y)</code>

为模型创建解释程序

计算变量的重要性。

<code>exp = dx.Explainer(clf, X, y) explanation=exp.model_parts() explanation.plot()</code>
图片[3]-超强的 Python 库:DALEX-山海云端论坛

预测级解释

首先我们创建一个要预测的样本,然后对它进行预测。

<code>john = pd.DataFrame({'gender': ['male'], 'age': [25], 'class': ['1st'], 'embarked': ['Southampton'], 'fare': [72], 'sibsp': [0], 'parch': 0}, index = ['John']) exp.predict(john) #array([0.08127727]) predict_parts 函数计算变量归因作为 Break Down、iBreakDown 或 Shapley 值解释。 bd_john = exp.predict_parts(john, type='break_down', label=john.index[0]) bd_interactions_john = exp.predict_parts(john, type='break_down_interactions', label="John+") sh_john = exp.predict_parts(john, type='shap', B = 10, label=john.index[0]) bd_john.result</code>
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容