- 本地模式(local):单机运行,将Spark应用以多线程方式直接运行在本地,通常只用于测试。我一般都会在windows环境下做充足的测试,无误以后才会打包提交到集群去执行。慎重!
- YARN/mesos模式:运行在资源管理系统上,对于Yarn存在两种细的模式,yarn-client和yarn-cluster,它们是有区别的。
一张图知晓yarn-client模式
一张图知晓yarn-cluster模式
为了安全起见,如果模型结果文件最终都是存于HDFS上的话,都支持使用yarn-cluster模式,即使某一个节点出问题,不影响整个任务的提交和执行。
总结:很多做大数据挖掘的朋友,代码能力和大数据生态圈的技术会是一个软弱,其实这点是很不好的,关键时候容易吃大亏。而我上面所提的,都是围绕着写好一个场景模型,从code实现到上线发布都需要留心的知识点。多一份了解,少一分无知。况且一天谈什么算法模型,落地都成困难,更别提上线以后对模型的参数修改和特征筛选。
第三部分:创作第一个数据挖掘算法(朴素贝叶斯)
看过以前文章的小伙伴都应该知道,在业务层面上,使用场景最多的模型大体归纳为以下四类:
- 分类模型,去解决有监督性样本学习的分类场景。
- 聚类模型,去自主判别用户群体之间的相似度。
- 综合得分模型,去结合特征向量和权重大小计算出评估值。
- 预测响应模型,去以历为鉴,预测未来。
所以我这里首先以一个简单的分类算法来引导大家去code出算法背后的计算逻辑,让大家知晓这样一个流程。
朴素贝叶斯的实现流程
- 理解先验概率和后验概率的区别?
a.先验概率:是指根据以往经验和分析得到的概率。简单来说,就是经验之谈,打趣来说——不听老人言,吃亏在眼前。
b.后验概率:是指通过调查或其它方式获取新的附加信息,去修正发生的概率。也就是参考的信息量更多、更全。
- 它们之间的转换,推导出贝叶斯公式
条件概率:
注:公式中P(AB)为事件AB的联合概率,P(A|B)为条件概率,表示在B条件下A的概率,P(B)为事件B的概率。
推导过程:
将P(AB)带入表达式
贝叶斯公式:
简单来说,后验概率 = ( 先验概率 * 似然度)/标准化常量。
扩展:
三、如何去理解朴素二字?
朴素贝叶斯基于一个简单的假定:给定特征向量之间相互条件独立。
朴素体现:
考虑到P(B1B2...Bn)对于所有类别都是一样的。而对于朴素贝叶斯的分类场景并需要准确得到某种类别的可能性,更多重点在于比较分类结果偏向那种类别的可能性更大。因此从简化度上,还可以对上述表达式进行优化。
简化公式:
这也是朴素贝叶斯得以推广使用一个原因,一方面降低了计算的复杂度,一方面却没有很大程度上影响分类的准确率。
但客观来说,朴素的假设也是这个算法存在缺陷的一个方面,有利有弊。
四、如何动手实现朴素贝叶斯算法
这里面有很多细节,但是为了迎合文章的主题,不考虑业务,只考虑实现。我们假设已经存在了下面几个东西: