《Scala机器学习》一一2.1 影响图

2.1 影响图

决策过程会涉及多个方面,但通常关于不确定条件下做决策的书都会介绍影响图(Influence Diagrams for Team Decision Analysis, Decision Analysis 2 (4): 207–228)。
影响图可以帮助分析和理解决策过程。决策可以很简单,比如在个性化环境中选择要展示给用户的下一篇新闻文章;也可以很复杂,比如检测企业网络中的恶意软件或者决定下一个研究项目内容。
假设要根据天气来决定一个人是否要乘船旅行。可以将决策过程描述为一个图表。图2-1展示了决定她是否在俄勒冈州的波特兰期间能参加一次划船旅行:

图2-1表示是否参加活动的决策是通过某种潜在满意度所驱动,它是决策本身以及在活动当时的天气的函数。然而,做划船旅行计划时,实际的天气条件是不确定的,因此,天气和天气预报节点之间用边连接起来,这表示天气预报和实际旅行时的天气有一定的相关性。假期活动节点是决策节点。该决策只基于天气预报,所以只有一个父节点。图中的最终节点满意度是一个旅行计划决策和实际天气的函数。显然,去+好天气和不去+坏天气会得到最高分(满意度最高)。而去+坏天气和不去+好天气则是一个不好的结果,后一种情况可能只是错失一个机会,但不一定是一个错误的决定,因为最终的结果取决于天气预报的准确度。
假设节点相互独立,则它们之间不存在边。比如,满意度不应该依赖于天气预报,因为只要人上了船,天气预报和满意度就变得不相关了。而一旦决定旅行,那么坐船旅行期间的实际天气就不再影响决策了。因为当初的决策完全是基于天气预报决定的,至少在这个简单模型中是这样,这里没有涉及购买旅行保险的情况。
影响图展示了做决策的不同阶段和信息流(第7章会给出一个用Scala实现的具体图)。在这个简化图中,决策唯一需要的信息就是天气预报。虽然在旅行中可以得到实际天气的信息,但若做出决策,就不会再改变了。天气和决策的数据可以用来对人们做出决策的满意度建模。
现在要将这个方法映射到广告问题上,即最终目标是用户对投放广告的满意度,这可能会让广告商投入更多的费用。满意度是用户特定环境状态的函数,广告商在做决策时并不知道。但是使用机器学习算法,通过用户最近访问网络的记录以及其他能收集到的信息(如地理位置、浏览器代理信息、访问时间、广告类别等(见图2-2)),就可预测用户的状态。

虽然不太可能测量到用户大脑中多巴胺(dopamine)的水平(这种方式肯定能用一定的指标来度量,并有可能减少不确定性),但也可以通过用户的活动来间接度量用户的满意度,这些活动要么是用户对广告的反应,要么是用户从点击开始到浏览完相关信息所花的时间。它们都可以用来估计模型和算法的有效性。下图为影响图,它与之前那个“假期”的影响图相似,只是针对广告决策过程做了一些调整。
实际的处理过程可能更加复杂,可以用一个决策链来表示,它的每一个节点都跟前几个时间点有关。比如,著名的马尔可夫决策过程(Markov Chain Decision Process)。这种情况的图可能会在多个时间点上重复。
另外还有一个例子是企业互联网中的恶意软件分析系统,这种情况下,可通过命令控制(C2)、横向移动或者通过分析企业交换机上包的数据泄露情况来检测网络连接。其目标是最小化这种突发情况对运作系统所带来的潜在影响。
其中一种可能的决策是重新映像节点的子集(至少要分开它们)。收集的数据可能具有不确定性,许多正常的软件可能也会以可疑的方式发送数据包,模型能基于风险和潜在的影响来区分它们。这种特定情形下的决策可能需要收集额外的信息。
本书将这个案例以及其他潜在的商业案例留给读者去做成相应的图。下面会考虑一个更复杂的优化问题。

时间: 2024-10-23 18:32:47

《Scala机器学习》一一2.1 影响图的相关文章

《Scala机器学习》一一导读

前 言 这是一本关于机器学习的书,它以Scala为重点,介绍了函数式编程方法以及如何在Spark上处理大数据.九个月前,当我受邀写作本书时,我的第一反应是:Scala.大数据.机器学习,每一个主题我都曾彻底调研过,也参加了很多的讨论,结合任何两个话题来写都具有挑战性,更不用说在一本书中结合这三个主题.这个挑战激发了我的兴趣,于是就有了这本书.并不是每一章的内容都像我所希望的那样圆满,但技术每天都在快速发展.我有一份具体的工作,写作只是表达我想法的一种方式. 下面先介绍机器学习.机器学习经历了翻天

《Scala机器学习》一一第2章 数据管道和建模

**第2章数据管道和建模**上一章介绍了一些研究数据的基本工具.本章将深入介绍一些更复杂的主题,其中包括建立统计模型.最优控制以及科学驱动(science-driven)的工具等问题.不过事先声明,本书只会涉及最优控制的若干主题,因为本书是介绍基于Scala的机器学习(ML),而不是数据驱动的企业管理理论,企业管理理论本身就足以写成一本书.本章不会介绍基于Scala的具体实现,而是在一个高层次上探讨构建数据驱动型企业的问题.后面的章节将详细讨论如何实现这些细节.本章也特别强调不确定性的处理.不确

《Scala机器学习》一一2.7 总结

2.7 总结 本章介绍了一种用于设计数据驱动企业的高级架构方法.同时还向读者介绍了影响图,它是一个用来了解传统企业和数据驱动企业是如何做决策的工具.接着介绍了几个重要的模型,如Kelly准则和多臂老虎机,并从数学的角度来说明这些问题是至关重要的.在这些内容的基础上还介绍了马尔可夫决策过程,该过程通过已有的决定和观察的结果来得到决策策略.本章深入研究了构建决策数据管道较为实用的方法,以及可用于构建它们的主要组件和框架.最后讨论了不同阶段和节点之间传递数据和建模结果的问题,以及将结果如何呈现给用户.

《Scala机器学习》一一3.2 理解Spark的架构

3.2 理解Spark的架构 并行化是将工作负载划分为在不同线程或不同节点上执行的子任务.下面介绍Spark实现并行化的原理,以及它如何管理子任务的执行和子任务之间的通信.3.2.1 任务调度Spark工作负载的划分由弹性分布式数据集(Resilient Distributed Dataset,RDD)的分区数决定,这是Spark的基本抽象和管道结构.RDD是一种可并行操作的.不可变元素的分区集合.具体细节可能取决于Spark的运行模式,图3-2为Spark任务/资源调度的示意图. 图3-2 通

《Scala机器学习》一一3.3 应用

3.3 应用 下面会介绍Spark/Scala中的一些实际示例和库,具体会从一个非常经典的单词计数问题开始.3.3.1 单词计数 大多数现代机器学习算法需要多次传递数据.如果数据能存放在单台机器的内存中,则该数据会容易获得,并且不会呈现性能瓶颈.如果数据太大,单台机器的内存容纳不下,则可保存在磁盘(或数据库)上,这样虽然可得到更大的存储空间,但存取速度大约会降为原来的1/100.另外还有一种方式就是分割数据集,将其存储在网络中的多台机器上,并通过网络来传输结果.虽然对这种方式仍有争议,但分析表明

《Scala机器学习》一一2.5 数据驱动系统的基本组件

2.5 数据驱动系统的基本组件 简单地说,一个数据驱动架构包含如下的组件(或者可精简为以下这些组件): 数据收集:需要从系统和设备上收集数据.大多数的系统有日志,或者至少可选择将日志写入本地文件系统.一些系统可以通过网络来传输信息,比如syslog.但若没有审计信息,缺少持久层意味着有可能丢失数据. 数据转换层:也被称为提取.变换和加载(ETL).现在数据转换层也可以进行实时处理,即通过最近的数据来计算汇总信息.数据转换层也用来重新格式化数据和索引数据,以便能被UI组件有效地访问. 数据分析和机

《Scala机器学习》一一3.4 机器学习库

3.4 机器学习库 Spark是基于内存的存储系统,它本质上能提高节点内和节点之间的数据访问速度.这似乎与ML有一种自然契合,因为许多算法需要对数据进行多次传递或重新分区.MLlib是一个开源库,但仍有一些私人公司还在不断按自己的方式来实现MLlib中的算法. 在第5章会看到大多数标准机器学习算法可以表示为优化问题.例如,经典线性回归会最小化回归直线与实际y值之间的距离平方和: 其中,是由下面的线性表达式所得到的预测值: A通常称为斜率,B通常称为截距.线性优化问题更一般化的公式可以写成最小化加

《Scala机器学习》一一1.6 相关性的基础

1.6 相关性的基础读者可能已经注意到,从列联表检测相关性是很难的.检测模式来源于实践,但许多人更擅长于识别可视化的模式.检测行为模式是机器学习的基本目标之一.虽然高级的监督机器学习技术将在第4章和第5章中讨论,但对变量之间相互依存关系的初步分析可得到正确的数据转换(或最佳的推理技术).目前有很多成熟的可视化工具及相关的网站(如http://www.kdnuggets.com)都专注于数据分析.数据研究和可视化软件的排名以及推荐.本书不会去质疑该排名的有效性和准确性,但确实很少有网站会介绍用Sc

《Scala机器学习》一一1.5 使用Scala和Spark的Notebook工作

1.5 使用Scala和Spark的Notebook工作通常,这五种数字汇总方式不足以对数据形成初步认识.描述性统计(descriptive statistics)的术语非常通用,并且可以采用非常复杂的方法来描述数据.分位数和帕雷托图(Pareto chart)都是描述性统计的例子,当分析一个以上的属性时,相关性也是.在大多数情况下都能查阅到这些数据汇总的方法,但通过具体的计算来理解这些方法也很重要.Scala或者Spark Notebook(https://github.com/Bridgew