基于Tableau构建朴素贝叶斯分类器(无需R/Py)
Posted 论智
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Tableau构建朴素贝叶斯分类器(无需R/Py)相关的知识,希望对你有一定的参考价值。
论智
作者 | weakish
来源 | duelingdata
基于Tableau构建机器学习算法和预测模型需要集成R或Python,并将模型纳入ETL(提取、转化、加载)流程。某些机构可能并不具备这样的能力,或者厌倦了这样的模式。Deloitte数据科学家、Tableau禅师(Tableau禅师是由Tableau社区评选的称号,授予对Tableau社区有较大贡献的人)Adam McCann最近发表了一篇博客,介绍了如何完全使用Tableau开发一个朴素贝叶斯分类模型,并且这个模型可以随新数据的增加而伸缩。
朴素贝叶斯是一个基于贝叶斯定理的概率分类模型。它可以根据多个独立条件预测输出的概率。朴素贝叶斯极为简单灵活而易于扩展。朴素贝叶斯分类可用于检测欺诈行为、预估损耗和诊断医学状况。
McCann的教程使用了来自Kaggle挑战的Titanic乘客的训练数据。教程内容主要包括如何使用Tableau构建模型,以及如何将这个模型应用到新数据上。
预测乘客是否存活
在Tableau中构建朴素贝叶斯分类模型,需要创建大量计算字段(在这个例子中将近30个),训练模型,并结合新数据集预测结果。不过,一旦这些都设定好了,你就可以在Tableau服务环境上实现模型,并在传入新数据后自动生成新的预测。
McCann根据Titanic乘客的属性(年龄、性别、舱等之类)预测其是否存活。
首先是设定因变量。在这个例子中,因变量是乘客的Survived(存活)字段。这是一个数字变量。因此McCann创建了一个计算字段。
接着创建P(Survived)字段,表示所有乘客的存活率的先验概率。例如,Titanic的所有乘客的存活率为38.4%。
然后创建一系列输入变量。对每个输出类别(存活或死亡)而言,每个输入变量都需要一个计算字段,以便为每个输入创建条件概率。例如,下面的Class (P|Survived)字段用于乘客的舱等,包括三个离散的等级:头等舱、二等舱和三等舱。
McCann使用了6个输入变量来训练模型:年龄、舱等、性别、登船港、父母或子女的数量、兄弟姐妹或配偶的数量。也就是说,12个字段。如果按每个输出种类算,那就是6个字段。然而,经过训练和测试之后,McCann只使用两个输入变量:舱等和性别,这样得到的结果最精确。
接下来,需要计算每个条件的总先验概率(不考虑输出)。也就是说,头等舱、二等舱、三等舱,以及男性、女性在全体乘客中的比例。
将这些概率相乘,得到总先验概率,使用(P)字段表示。这是所有条件组合的概率(例如,头等舱女性、三等舱男性)。
所有计算字段具备后,我们就可以应用贝叶斯定理了:
P(A|B)是贝叶斯定理的输出,也称为后验概率。这是给定预测因子或输入(舱等和性别)后乘客存活的概率。
P(A)是不考虑其他因素的情况下,乘客存活的先验概率。也就是我们在第一步计算的P(Survived)字段。
P(B|A)是一个具有特定舱等或性别的乘客的存活概率。也就是我们在第二步计算的Class(P|Survived)和Gender(P|Survived)。
P(B)是不考虑输出的条件下,所有条件组合(舱等和性别)的先验概率。也就是我们在最后一步计算的(P)字段。
为了计算P(A|B),我们首先需要一个存储贝叶斯定理中的分子(也就是P(B|A)和P(A)相乘的结果)。这个字段称为P|Survived。同理,还需要一个类似的字段用于计算死亡率。
接下来就是贝叶斯定理的输出了:P|Survived字段除以P字段。我们一样需要为死亡率创建一个类似的字段。
最后的概率字段需要将两个输出归一化,以得到整齐的百分率。
这就是乘客的最终存活概率。同理可以得到乘客的最终死亡概率。基于这两个字段,可以预测结果。如果存活概率大于死亡概率,那么我们预测这个乘客存活,否则,我们就预测这个乘客死亡。我们创建了一个Prediction字段来表示这个结果。
为了评估和验证这个模型,McCann比较了模型预测的准确程度和训练集的实际结果。为了评价准确程度,McCann计算了第一类错误(假阳性结果)。McCann创建了一个新的MATCH字段比较预测结果和实际结果的差别。准确的预测返回TRUE,不准确的预测返回FALSE。
这也帮助McCann选择了能产生最准确结果的输入变量。最终模型只使用了性别和舱等,达到了79%的准确度。
最重要的是,将模型应用到新数据上。
因此,McCann使用了同一项Kaggle挑战的测试数据集。McCann将新的测试数据集导入Tableau。除了不包含结果外,测试数据集的字段和训练数据集是一样的,但实际所需的仅仅是性别和舱等两个输入变量。将这两个变量相连,然后使用上面基于训练数据集创建的运算字段来生成预测。下面是一个比较,6名具有相同属性(性别和舱等)的乘客,在训练数据和测试数据上,模型的预测结果是一致的。
真实环境下你可以给训练模型传入新数据,同时产生新结果。例如,如果你要预测一个雇员离职的概率,你可以给模型传入一个包含所有雇员信息(含已离职雇员)的训练集。然后将当前员工的数据传给训练模型,以得到每一个现有雇员离职的概率。模型的准确率和输入变量会随着新数据的加入而演进,并且,你可以在Tableau内即时动态调整。
在McCann看来,在Tableau平台上,贝叶斯是一个惊人地强大的工具。由于贝叶斯理论的灵活性,它可以被应用到很多商业问题上,而不需要调整底层架构或技术栈。根据具体商业问题的不同,你的模型可以随着新数据的加入而演进和完善,或者保持一致。在Tableau上追踪模型的准确率相对简单。同时,由于模型在预测结果之外还同时生成一个概率,对于大多数终端用户来说,要相对容易理解。
参照上文的步骤,每个人都可以在Tableau上构建有洞察力的预测模型。不过,朴素贝叶斯分类模型并不适用于一些数据集或商业问题。因此使用这个方法要小心谨慎,别忘了测试和验证你的发现。
以上是关于基于Tableau构建朴素贝叶斯分类器(无需R/Py)的主要内容,如果未能解决你的问题,请参考以下文章
R构建朴素贝叶斯分类器(Naive Bayes Classifier)