可解释机器学习 - 李宏毅笔记

简介: 可解释机器学习 - 李宏毅笔记

导语


在机器应用案例中:


金融行业:银行需要我们开发模型,帮助柜员判断要不要给这个用户办理信用贷款,柜员用机器学习模型来自动判断,判断不能给这位用户办理贷款,柜员想知道模型是依据这位用户的那些信用条件,不给他办理贷款的


医疗诊断:在医院里,医生借助诊断模型辅助他完成病人病情的诊断,医生想知道模型是依据这位病人检测报告中的那项指标看出对方得什么病的


法律断案:在法律上,法官借助断案模型辅助他完成犯人的案情定罪,法官想知道模型是依据这位犯人犯了哪些罪才给他定的这个有期徒刑5年呢


没有可解释的现状


每当我们建立任何机器学习或神经网络模型时,我们只是根据模型的预测结果来判断它。


但对于大多数非线性模型来说,我们永远不知道我们的模型是如何预测的,这意味着我们不知道哪些特征有助于我们的预测。


特别是神经网络这块,在做图像处理的时候,我们无法知道网络内部是怎么样做到学习到了识别猫狗的能力的。对于人类而言,模型像是一个黑盒。虽然线性模型可以跟直观的告诉我们模型怎么运转的,但是模型中有很多非线性,抽象的,是人类无法理解的。


为什么要做可解释


  1. 交叉验证可能会失败 尽管在投入生产之前,我们可以依靠交叉验证来测试我们的模型 但交叉验证的问题是,我们永远不知道在生产中会得到什么样的测试数据。
  2. A/B测试不是每个人的解决方案 虽然A/B测试是一个黄金标准,但问题公司将不得不向公共测试人员展示非最佳质量的产品。也可能很贵。


但是有可解释,我们就能很精准的发现模型中那些特征对模型影响因素最大,检查模型参数,并尝试了解模型如何在全局范围内工作

检查一个模型的单个特征的重要影响权重,试图找出模型做出决策的原因


回到应用案例:比如说医疗诊断

医生根据模型可解释,了解,病人是因为血小板指标较小,得的低血糖病,而不是像之前那样,模型输入病人的检测报告数据,输出病人得了低血糖。


下图为不同模型的可解释程度对比图


1554103e870947ac9ca0701421f2dbd8.png

什么样的可解释是最好的呢:


回到我们的人脑来看,我们人类不需要知道脑子的思维的运转是什么样的,但我们收到别人传递的信息,有时候还是会相信别人的一些话。


你给我一个理由,让我选择相信你说的话,就像下面这一组谈话,对方不同的方式理由,给人的选择相信对方情况是不同的。

571b4f06d11945d3b57dc5307864e069.png



因此我觉得能够让对方接受的理由,让人高兴的理由(可解释)就是好的可解释


可解释性分类:


可解释性可以为分为局部可解释和全局可解释

Local Explainable:这个图片的为什么是杨幂

Global Explainable:杨幂应该长什么样


Local Explainable基本思路


模型之所以知道这张图片是杨幂,是因为模型把重点关注到人的五官特征上。就像下面这种图,白色点就是模型真正去关注的地方


e3ecac650c3e4bf791773b197a437882.png

回归到可解释性,理由就可以说:因为这张图片的人的人脸五官,结合起来看,所以她是杨幂。

那如果说我们要知道可解释性中这张图片那个五官特征起最决定性的作用,能帮我们判断她是杨幂的呢


方法:通过改变特征数据的权重,或者删除特征数据来看最后输出的变化,在图像中就是通过改变像素的某一个像素值,来看loss的变化,如果loss变化大,那说明这个位置的像素对图片的重要性大


Global Explainable基本思路


对于模型的Global可解释性,就说让模型去学习,杨幂长什么样子。

在net网络中,模型通过不同的卷积核去发现出杨幂这个人的特征,如下图所示。

99721dd0b579412b9f0e3bafe0901a88.png

通过不同的纹理,来侦测出一个人的五官特征点,让模型学习到杨幂的特征,这里就有点类似于GAN中的生成器一样。


可解释性框架


机器学习可解释性的一些主要框架,如ELI5、LIME、SKATER或SHAP(以及PDPbox和FairML)


ELI5项目实战案例


我们的示例将使用一个模型,该模型根据足球队的统计数据预测一个足球队是否会拥有“最佳球员”赢家


import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
y = (data['Man of the Match'] == "Yes")  # Convert from string "Yes"/"No" to binary
feature_names = [i for i in data.columns if data[i].dtype in [np.int64]]
X = data[feature_names]
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=1)
my_model = RandomForestClassifier(n_estimators=100,
                                  random_state=0).fit(train_X, train_y)
import eli5
from eli5.sklearn import PermutationImportance
perm = PermutationImportance(my_model, random_state=1).fit(val_X, val_y)
eli5.show_weights(perm, feature_names = val_X.columns.tolist())

0c2099a80f654e87bd7b74401e228631.png


解释排列的重要性

朝上的值是最重要的特征,朝下的值最不重要。

在我们的例子中,最重要的特征是进球。这似乎是明智的。对于其他变量的顺序是否令人惊讶,球迷可能有一些自己直觉

相关文章
|
23天前
|
机器学习/深度学习 计算机视觉 Python
模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数
本文介绍了网格搜索(Grid Search)在机器学习中用于优化模型超参数的方法,包括定义超参数范围、创建参数网格、选择评估指标、构建模型和交叉验证策略、执行网格搜索、选择最佳超参数组合,并使用这些参数重新训练模型。文中还讨论了GridSearchCV的参数和不同机器学习问题适用的评分指标。最后提供了使用决策树分类器进行网格搜索的Python代码示例。
36 1
|
6月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习】解释什么是线性回归?
【5月更文挑战第15天】【机器学习】解释什么是线性回归?
|
5月前
|
机器学习/深度学习 算法 BI
机器学习笔记(一) 感知机算法 之 原理篇
机器学习笔记(一) 感知机算法 之 原理篇
|
5月前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
44 0
|
5月前
|
机器学习/深度学习 分布式计算 API
技术好文:Spark机器学习笔记一
技术好文:Spark机器学习笔记一
38 0
|
6月前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】解释什么是K-means聚类?
【5月更文挑战第11天】【机器学习】解释什么是K-means聚类?
|
6月前
|
机器学习/深度学习 监控 算法
【机器学习】提供学习率的直观解释
【5月更文挑战第18天】【机器学习】提供学习率的直观解释
|
6月前
|
机器学习/深度学习 自然语言处理 PyTorch
fast.ai 机器学习笔记(四)(1)
fast.ai 机器学习笔记(四)
133 1
fast.ai 机器学习笔记(四)(1)
|
6月前
|
机器学习/深度学习 算法 数据可视化
【Python机器学习专栏】决策树算法的实现与解释
【4月更文挑战第30天】本文探讨了决策树算法,一种流行的监督学习方法,用于分类和回归。文章阐述了决策树的基本原理,其中内部节点代表特征判断,分支表示判断结果,叶节点代表类别。信息增益等标准用于衡量特征重要性。通过Python的scikit-learn库展示了构建鸢尾花数据集分类器的示例,包括训练、预测、评估和可视化决策树。最后,讨论了模型解释和特征重要性评估在优化中的作用。
122 1
|
6月前
|
机器学习/深度学习 Python 索引
fast.ai 机器学习笔记(二)(4)
fast.ai 机器学习笔记(二)
54 0
fast.ai 机器学习笔记(二)(4)

热门文章

最新文章