程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

【Python特征工程系列】基于LIME对XGboost模型结果进行解释

hfteth 2025-02-04 14:11:21 技术文章 21 ℃

这是我的第362篇原创文章。

一、引言

复杂模型往往具有黑盒属性,虽然能给出较高准确率的结果,但难以解释内在原理,为实际应用带来不便,比如:营销中有了产品销量的预测,还需告诉业务人员应该进行怎样的操作;风控中给出了风险概率,还需要给出具体风险点相关人员才能处理;银行信贷业务需要明确告知客户被拒原因等。因此,在使用复杂模型时,需要给出相关手段,增加模型的透明度和可解释性,LIME就是其中的方法之一。

LIME (Local Interpretable Model-agnostic Explanations)是一个强大的Python库,可以帮助解释机器学习分类器(或模型)正在做什么。LIME的主要目的是为复杂ML模型做出的单个预测提供可解释的、人类可读的解释。通过提供对这些模型如何运作的详细理解,LIME鼓励人们对机器学习系统的信任。

LIME通过使用一个更简单的、围绕特定实例的本地可解释模型来近似复杂的ML模型来运行。LIME工作流程的主要可以分为一下步骤:

  1. 选择要解释的实例。
  2. 通过生成一组相邻样本来干扰实例。
  3. 使用复杂ML模型获得扰动样本的预测。
  4. 拟合一个更简单的,可解释的模型(例如,线性回归或决策树)对受干扰的样本及其预测。
  5. 解释更简单的模型,为原始实例提供解释。

二、实现过程

2.1 准备数据

filename = 'data.csv'
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS',
         'RAD', 'TAX', 'PRTATIO', 'B', 'LSTAT', 'MEDV']
dataset = pd.read_csv(filename, names=names, delim_whitespace=True)
df = pd.DataFrame(dataset)
print(df)

df:

2.2 划分数据集

features = names[:-1]
target = ['MEDV']
X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)

2.3 建模预测

model = XGBRegressor(n_estimators=100, max_depth=10)
model.fit(X_train, y_train)
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
print(r2_score(y_test, y_test_pred))

r2_score:

2.4 建立解释器

建立解释器,解释第1个样本的规则,选择13个特征:

explainer = LimeTabularExplainer(X_train.values,feature_names=list(X_train.columns), mode='regression')
exp = explainer.explain_instance(X_test.iloc[0].values, model.predict, num_features=13)

绘图展示结果:

# 画图
exp.as_pyplot_figure()
# 需要在jupyter notebook中运行才能显示
exp.show_in_notebook(show_table=True, show_all=False)

结果:

分析图:

选择第1个样本利用LIME解释器解释规则,发现特征LSAT和CRIM7是影响房价的主要理由。

作者简介: 读研期间发表6篇SCI数据算法相关论文,目前在某研究院从事数据算法相关研究工作,结合自身科研实践经历持续分享关于Python、数据分析、特征工程、机器学习、深度学习、人工智能系列基础知识与案例。关注gzh:数据杂坛,获取数据和源码学习更多内容。

原文链接:

【Python特征工程系列】基于LIME对XGboost模型结果进行解释(案例+源码)

Tags:

最近发表
标签列表