如何有效沟通你的机器学习结果?

简介: 多问自己一个“那又怎样?”,会很有用。疑问7月初,我赴南京参会。 James Hendler 教授的演讲非常精彩。其中一个片段,让我印象深刻。
img_c134e9852ff778917231bd3e837c6efb.jpe

多问自己一个“那又怎样?”,会很有用。

疑问

7月初,我赴南京参会。 James Hendler 教授的演讲非常精彩。

img_59e5ff4328028a4a2144749b83bd3bda.jpe

其中一个片段,让我印象深刻。

他说,许多人跑模型,跑出来一个比别人都高的准确率,于是就觉得任务完成了。他自己做健康信息研究,通过各种特征判定病人是否需要住院治疗。很容易就可以构建一个模型,获得很好的分类效果。

但是,这其实远远不够。因为别人(例如他的医生客户们)非常可能会问出一个问题“so what?” (意即“那又怎样?”)

我听了深以为然。

因为模型准确率再高,有时也免不了会有运气的成分。能否在实际应用中发挥作用,并不能单单靠着一个数字来说明。

医生们都有自己作为专业人士的骄傲。如果计算机模型不能从理据上说服他们,那肯定是不会加以采纳的。同时,他们对于病患的健康和生命安全,也有足够重大的责任,因此无法简单接受机器模型的结果,而不加以自己的理解与思考。

对于机器学习模型研究的这种批评,之前我也听到一些。但是不少人仅仅是批评,却没有给出有效的解决方法。

该怎么办呢?Hendler 教授的解决办法,是给医生展示一些统计图表。例如描述年龄与二次入院关系的散点图。

img_e0feb40a064c40453df7e0fcd263e486.jpe

我听了大为惊诧,提问环节第一个就把话筒抢了过来,问:

这种图形,属于描述统计。难道不应该是正式进行模型训练之前,就做了的吗?如果把它作为沟通模型的结果,那还做什么机器学习呢?

解释

Hendler 教授耐心地给我解答了这个问题。

img_1b0ca47879b6734ab8a85bd45a89d750.jpe

他说,没错,这个图形确实属于描述统计。然而,数百上千个特征里面,知道该汇报哪几个变量的统计图,就必须是机器学习之后才能做的。

实际上,医生们看了这个简单的统计图之后,非常震撼。

他们的刻板印象认为,老年人身体状况差,因此二次入院几率高;年轻人身体好,自愈能力强,因此不大容易“二进宫”。

就此,他们发现了一直以来决策上的失误——对于年轻病患,他们往往比较放心,因此缺乏足够的留院观察和治疗;反倒是对老年人,照顾得更加精细。造成的结果,是本以为没事儿的年轻人,再次重症发病入院;老年人却不少都治愈后健康回家了。

这种结果的传递沟通,有效地改进了医生的决策和行为方式。

其实,Hendler 教授的研究目的,不是去跟别人比拼一个数字,而是帮助医生更好地帮助病患。看似最为简单,没有技术含量的统计图,反倒比各种黑科技更能起到实际作用。

茶歇的时候,我们又聊了20分钟。

他给我讲,他的博士生,现在正在尝试在深度学习中找寻那些影响最后结果的关键要素,有的时候,甚至会选择跨过层级,来设计最简单明确的变量间关联设定。这样,深度学习的结果,可以最大限度(对别人)进行解释。即便会牺牲一些(当然不会很大)准确率,也在所不惜。

反思

为什么我们一直对准确率的数字,这么着迷,而忽略了模型的沟通解释呢?

其实道理也很简单,机器学习的最初广泛用途,给我们的思维带来了路径依赖。

还记得吗?机器学习逐渐受到世人重视的案例?

我说的不是 AlphaGo。

就是几乎每一本讲机器学习的书,都会用到的那个例子,MNIST。

img_2859e953877f1e5d6c8e23023243a9cc.png

专家们最初要解决的问题,无非是把原先需要人工分拣的邮件,变成机器自动分拣。关键在于手写数字的识别。

这个具体用例,有它的特点。

首先是任务目标单一,就是追求更高的准确率;

其次是分类数量确定,0-9,一共10个数字,不会更多,不会更少;

最后是犯错成本低,即便准确率达不到100%,也没有什么大问题——寄错了信,在人工分拣时代也是正常。

于是,这样的任务,就适合大家拼结果准确率数字。

但是,人们的思维惯性和路径依赖(包括各种竞赛的规则设置),导致了后面的机器学习任务,也都只关注数字,尤其是准确率。

img_01ad3d88b404b6f9e87150c01c866d28.png

但这其实是不对的。类似于决策支持,尤其是健康医疗的决策支持,就不适合单单比拼数字。

即便误判 0.1%,背后可能也是许许多多鲜活的生命,因此犯错成本极高。

医生并没有因为模型的准确率提升而被取代,反而在信息浪潮奔涌而来的场景下,充当把关人的角色,责任更加重大了。

一个模型要能说服医生,影响其决策行为,就必须解释清楚判断的依据,而不能递给他一个黑箱,告诉他:

你该这样做。

img_23daa812775a328f122f8fcb2850834c.png

方法

原理想明白了,怎么实施呢?

如果每一个模型跑完,都只是拿出多张描述性统计图给用户,好像也不大合适。

通过文献阅读,我发现了其他机器学习研究人员为了解释结果所做的努力。

在深度学习领域,现在做得比较好的,是卷积神经网络。

在《文科生如何理解卷积神经网络?》一文中,我给你解释过卷积神经网络的概念和使用方法。

img_2204d6b9f3152f8de9015a3bd260851f.png

但是,我们当时,还只是给你讲解如何用它进行分类等,没有涉及解释方案。

你看这样一幅图,机器模型可以很容易分辨它为“非洲象”。

img_ab016676c97bb4ebdd1c966eeedb1040.jpe

但是,这到底是机器具有了辨别能力,还是只不过运气使然呢?

单看结果,不好分辨。但是我们可以对卷积神经网络训练的结果参数进行可视化,并且叠加到原图上,你一眼就可以看到,机器做出图像分类的依据,究竟是什么。

img_b2ede6cbb114f279512e9d67251f17c0.jpe

显然,在机器重点关注的区域里,象的鼻子和耳朵占了最大的决策比重。

由此可以看出,这不是简单的好运气。

以上例子,来自于 François Chollet 的《Deep Learning with Python》。书中附有详细的代码,供你用 Python 和 Keras 自己实现这种可视化结果。

小结

你训练出的模型表现好,这是成功的基础,但不是全部。

只展示一个数字给别人,在很多特定的应用场景下,是不够的。问题越是重要,犯错代价越高,这种方式就越不能被接受。这时候多问自己一个“那又怎样?”,没有坏处。

你需要明确自己用户的需求。与之有效沟通的关键在于用同理心,尊重对方。作为一个人,特别是一个专业人士,对方进行有效思考的要件,就是足够的理据支撑。

不管是用文中介绍的卷积神经网络可视化方法,还是 Hendler 教授所做的看似基础无比的描述性统计图,都可以根据问题的特点,加以采用。只要能够真正影响对方的决策,帮助他们更好地达成自己的目标,你的机器学习分析,便有了更佳的效果。

喜欢请点赞。还可以微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)

如果你对数据科学感兴趣,不妨阅读我的系列教程索引贴《如何高效入门数据科学?》,里面还有更多的有趣问题及解法。

目录
相关文章
|
Oracle 架构师 Java
Java 22 新增利器: 使用 Java Stream Gather 优雅地处理流中的状态
本文中我们分析了 什么 是 “流”,对比了 Java 上几种常见的 “流”库,引入和详细介绍了 Java 22 中的 Stream Gather API 。同时也简单分享了利用虚拟线程 如何简化 Stream map Concurrent操作符的实现。希望抛砖引玉和大家分享新的特性,共同进步。同时也希望大家都可以升级到新版本的 JDK,更好的赋能业务。
|
11月前
|
PyTorch 算法框架/工具
数据集学习笔记(三):调用不同数据集获取trainloader和testloader
本文介绍了如何使用PyTorch框架调用CIFAR10数据集,并获取训练和测试的数据加载器(trainloader和testloader)。
163 4
数据集学习笔记(三):调用不同数据集获取trainloader和testloader
|
SQL Oracle 关系型数据库
|
机器学习/深度学习 数据可视化 算法
决策树VS世界:掌握Python机器学习中的这棵树,决策从此不再迷茫
【8月更文挑战第2天】在数据驱动时代,决策树作为一种直观且易于解释的机器学习方法,因其强大的分类与回归能力备受青睐。本文介绍决策树的基础概念:通过属性测试划分数据,优化选择以提高预测准确度。使用Python的scikit-learn库,我们演示了如何加载鸢尾花数据集,构建并训练决策树模型,评估其准确性,以及利用`plot_tree`函数可视化决策过程,从而更好地理解模型的工作原理。掌握这些技能,你将在面对复杂决策时更加自信。
111 2
|
Linux Windows
一篇文章讲明白Erlang打包工具rebar安装使用
一篇文章讲明白Erlang打包工具rebar安装使用
259 0
|
前端开发
掌握React中的useCallback:优化性能的秘诀
掌握React中的useCallback:优化性能的秘诀
|
数据库 消息中间件
基于RabbitMQ消息队列的分布式事务解决方案 - MQ分布式消息中间件实战
1 极速了解MQ 介绍Rabbitmg用于解决分布式事务必须掌握的5个核心概念 一款分布式消息中间件,基于erlang语言开发, 具备语言级别的高并发处理能力。和Spring框架是同一家公司。支持持久化、高可用 核心5个概念: Queue: 真正存储数据的地方 Exchange: 接收请求,转存数据 Bind: 收到请求后存储到哪里 消息生产者:发送数据的应用 消息消费者: 取出数据处理的应用 2、分布式事务问题 分布式事务是一个业务问题,不能脱离具体的场景。
7046 125
|
缓存 NoSQL Java
一个Redis的Java客户端Jedis的学习,线程不安全问题的解决及与MySQL的简单的结合
> Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilippo 使用 C 语言编写。 > > Redis 遵守 BSD 协议,实现了免费开源,其最新版本是 6.20,常用版本包括 3.0 、4.0、5.0。自 Redis 诞生以来,它以其超高的性能、完美的文档和简洁易懂的源码广受好评,国内外很多大型互联网公司都在使用 Redis,比如腾讯、阿里、Twitter、Github 等等。 简单的来说:Redis是一种极其高效的,迅速的一种基于缓存读写的N
|
存储 弹性计算 运维
Tair 的实操流程及常见问题 | 学习笔记
快速学习 Tair 的实操流程及常见问题
Tair 的实操流程及常见问题 | 学习笔记
|
存储 NoSQL JavaScript
使用redis实现聊天记录转存(下)
使用redis实现聊天记录转存(下)
使用redis实现聊天记录转存(下)