朴素贝叶斯分类算法全解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Spark实现贝叶斯算法
public static void main(String[] args) { SparkConf sparkConf = new SparkConf().setAppName("Bayes").setMaster("local[2]"); JavaSparkContext sc = new JavaSparkContext(sparkConf); JavaRDD<String> data = sc.textFile("/home/yurnom/data/sample_naive_bayes_data.txt"); RDD<LabeledPoint> parsedData = data.map(line -> { String[] parts = line.split(","); double[] values = Arrays.stream(parts[1].split(" ")) .mapToDouble(Double::parseDouble) .toArray(); //LabeledPoint代表一条训练数据,即打过标签的数据 return new LabeledPoint(Double.parseDouble(parts[0]), Vectors.dense(values)); }).rdd();
贝叶斯公式
朴素贝叶斯分类
朴素贝叶斯分类,Naive Bayes,你也可以叫它NB算法。其核心思 想非常简单:对于某一预测项,分别计算该预测项为各个分类的概 率,然后选择概率最大的分类为其预测分类。就好像你预测一个娘 炮是女人的可能性是40%,是男人的可能性是41%,那么就可以判 断他是男人。 Naive Bayes的数学定义如下: 1.设 x={a 1 ,a 2 ,..,a m } 为一个待分类项,而每个 a i 为 x 的一个 特征属性 2.已知类别集合 C={y 1 ,y 2 ,..,y n } 3.计算 x 为各个类别的概率: P(y 1 |x),P(y 2 |x),..,P(y n |x) 4.如果 P(y k |x)=max{P(y 1 |x),P(y 2 |x),..,P(y n |x)} ,则 x 的类别为 yk
分类算法
举个例子,我们日常生活中看到一个陌生人,要做的第一件事情就 是判断其性别,判断性别的过程就是一个分类的过程。根据以往的 生活经验,通常经过头发长短、服饰和体型这三个要素就能判断出 来一个人的性别。这里的“生活经验”就是一个训练好的关于性别 判断的模型,其训练数据是日常生活中遇到的形形色色的人。突然 有一天,一个娘炮走到了你面前,长发飘飘,穿着紧身的衣裤,可 是体型却很man,于是你就疑惑了,根据以往的经验——也就是已 经训练好的模型,无法判断这个人的性别。于是你学会了通过喉结 来判断其性别,这样你的模型被训练的质量更高了。但不可否认的 是,永远会出现一个让你无法判断性别的人。所以模型永远无法达 到100%的准确,只会随着训练数据的不断增多而无限接近100%的 准确。
Spark实现贝叶斯算法
测试数据 0,1 0 0 0,2 0 0 0,1 0 0.1 0,2 0 0.2 0,1 0.1 0 0,2 0.2 0 1,0 1 0.1 1,0 2 0.2
朴素贝叶斯分类
其中第一列代表类别,训练数据中有三种类别:0、1、2。第2-4列 代表数据的三个维度,可以想象成前文中性别分类算法中的头发长 度、服饰和体型这三个要素。通常来说为了保证每个要素的权值相 差不大,需要取相对的数值,例如头发长度/最长的头发长度。
贝叶斯公式
贝叶斯公式,或者叫做贝叶斯定理,是贝叶斯分类的基础。而贝叶 斯分类是一类分类算法的统称,这一类算法的基础都是贝叶斯公式。 目前研究较多的四种贝叶斯分类算法有:Naive Bayes、TAN、 BAN和GBN。 理工科的学生在大学应该都学过概率论,其中最重要的几个公式中 就有贝叶斯公式——用来描述两个条件概率之间的关系,比如 P(A|B)和P(B|A)。如何在已知事件A和B分别发生的概率,和事件B 发生时事件A发生的概率,来求得事件A发生时事件B发生的概率, 这就是贝叶斯公式的作用。其表述如下:
朴素贝叶斯分类
如何获取第四步中的最大值,也就是如何计算第三步中的各个条件 概率最为重要。可以采用如下做法: 1.获取训练数据集,即分类已知的数据集 2.统计得到在各类别下各个特征属性的条件概率估计,即: P(a 1 |y 1 ),P(a 2 |y 1 ),...,P(a m |y 1 );P(a 1 |y 2 ),P(a 2 |y 2 ),...,P(a m |y 2 );...;P(a 1 |y n ),P(a 2 |y n ),...,P(a m |y n ) ,其中的数据可以是离 散的也可以是连续的 3.如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导: P(y i |x)=P(x|y i )P(y i )P(x) 对于某x来说,分母是固定的,所以只要找出分子最大的即为条件 概率最大的。又因为各特征属性是条件独立的,所以有: P(x|y i )P(y i )=P(a 1 |y i )P(a 2 |y i )...P(a m |y i )P(y i )=P(y i )∏ m j=1 P(a j |y i )
Spark实现贝叶斯算法
本章要点
一、分类算法 二、贝叶斯公式 三、朴素贝叶斯分类 四、Spark实现贝叶斯算法
ቤተ መጻሕፍቲ ባይዱ 分类算法
何为分类算法?简单来说,就是将具有某些特性的物体归类对应到 一个已知的类别集合中的某个类别上。从数学角度来说,可以做如 下定义: 已知集合: C={y 1 ,y 2 ,..,y n } 和 I={x 1 ,x 2 ,..,x m ,..} ,确定映射 规则 y=f(x) ,使得任意 x i ∈I 有且仅有一个 y j ∈C 使得 y j =f(x i ) 成立。 其中,C为类别集合,I为待分类的物体,f则为分类器,分类算法 的主要任务就是构造分类器f。 分类算法的构造通常需要一个已知类别的集合来进行训练,通常来 说训练出来的分类算法不可能达到100%的准确率。分类器的质量 往往与训练数据、验证数据、训练数据样本大小等因素相关。