挖掘算法(1)朴素贝叶斯算法
博客公告: ?(1)本博客所有博客文章搬迁至《博客虫》http://blogchong.com/ ? ? 该文档为实实在在的原创文档,转载请注明:http://blog.sina.com.cn/s/blog_8c243ea30102uzwp.html? 1 文档说明? ? ? ? ? 2 算法介绍? 2.1 贝叶斯定理? (1)问题引申:已知某条件概率,如何得知两个事件交换之后的概率。也就是在已知P(A|B)的情况下如何求得P(B|A); (2)条件概率:P(A|B)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A发生的条件概率; (3)基本求解公式:P(A|B)=P(AB)/P(B)//AB同时发生的概率处于B发生的概率; (4)贝叶斯定理:P(B|A)=P(A|B)*P(B)/P(A); ? 2.2朴素贝叶斯算法? 2.2.1 朴素贝叶斯思想基础? 对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别; 所以朴素贝叶斯分类器其实根本思想就是通过分类概率以及条件概率,计算分类的后验概率,然后比较,最大则说明该项属于该类别。 ? 2.2.2 朴素贝叶斯分类过程? (1)设x={a1,a2,…,am}为一个待分类项,而每个a为x的一个特征属性。 (2)有类别集合C={y1,y2,yn}。 (3)计算P(y1|x),P(y2|x),P(yn|x)。//这些是后验概率 (4)如果P(yk|x)=max{ P(y1|x),P(yn|x)},则x属于yk。 ? 关键点,计算条件概率(如上第三步): 1)找到一个已知分类的待分类项集合,这个集合叫做训练样本集。 2)统计得到在各类别下各个特征属性的条件概率估计: P(a1|y1),P(a2|y1),P(am|y1); P(a1|y2),P(a2|y2),P(am|y2);P(a1|yn),P(a2|yn),P(am|yn) //需要通过条件概率和分类概率计算后验概率 3)如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导: P(yi|x) =P(x|yi)P(yi)/P(x)? 4)因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有: P(x|yi)P(yi) = P(a1|yi)| P(a2|yi)…P(am|yi)P(yi) =P(yi)∏P(aj|yi);? ? 2.2.3 朴素贝叶斯实现流程? ? 可以看到,整个朴素贝叶斯分类分为三个阶段: 第一阶段--准备工作阶段: 这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。 这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。 第二阶段--分类器训练阶段: 这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。 其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,根据前面讨论的公式可以由程序自动计算完成。 第三阶段--应用阶段: 这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,由程序完成。 ? 2.3 条件概率求解补充? ? 且 注: (1)第一个参数为特征属性的均值:μ (2)而第二个参数为特征属性方差:σ^2 (3)条件概率:P(ak|yi) ? 2.4 算法分析? ? (1)? (2)? (3)? ? 3 应用实例? //病人分类实例 ?
3.1实例描述?
? //拥有一批病例表,通过病症,推断患者患病类型。 病历表:症状 职业 疾病 喷嚏 护士 感冒 18人 喷嚏 教师 感冒 12人 喷嚏 农夫 感冒 7人 喷嚏 工人 感冒 3人 喷嚏 护士 过敏 1人 喷嚏 农夫 过敏 13人 喷嚏 工人 过敏 16人 喷嚏 农夫 脑震荡 3人 喷嚏 工人 脑震荡 7人 头痛 工人 感冒 10人 头痛 教师 感冒 12人 头痛 农夫 感冒 5人 头痛 护士 感冒 13人 头痛 工人 过敏 8人 头痛 护士 过敏 2人 头痛 农夫 过敏 10人 头痛 教师 脑震荡 1人 头痛 农夫 脑震荡 4人 头痛 工人 脑震荡 15人 //总人数:160人 分类要求: 假设又来了一个病人,拥有病症(喷嚏),职业(工人),求其最有可能患病类型? ? 3.2朴素贝叶斯分类过程? 3.2.1准备阶段? 确定特征属性: 分析如下,疾病为类别集合,患病的人为待分类集合(X),症状和职业为特征属性集合。 //保证样本特征属性不相干 获取训练样本: 病例表则为训练样本。 ? 3.2.2分类器训练阶段? 对每个类别计算P(Yi): 类别划分: C={C0:感冒;C1:过敏;C2:脑震荡};//C0=80;C1=50;C2=30 则有类别概率如下(先验概率): P(C0)=1/2;P(C1)=5/16;P(C2)=3/16 对每个特征属性计算所有划分的条件概率: 特征属性: 症状A0={A00:喷嚏;A01:头痛}; 职业A1={A10:护士;A11:农夫;A12:工人;A13:教师}; 计算特征属性划分概率:? P(A00|C0)=1/2 ; P(A01|C0)=1/2 ; P(A00|C1)=3/5 ; P(A01|C1)=2/5 ; P(A00|C2)=1/3 ; P(A01|C2)=2/3 ; //计算职业划分概率 P(A10|C0)=31/80 ; P(A11|C0)=12/80 ; P(A12|C0)=13/80 ;P(A13|C0)=24/80 ; P(A10|C1)=3/50 ; P(A11|C1)=23/50 ; P(A12|C1)=24/50 ; P(A13|C1)=0; P(A10|C2)=0 ; P(A11|C2)=7/30 ; P(A12|C2)=22/30 ; P(A13|C2)=1/30; ? 3.2.3应用阶段? 朴素贝叶斯分类器: 患者特征属性: A00(喷嚏);A12(工人); 分类器鉴别(计算后验概率): C0(感冒):P(C0)P(X|C0)=P(C0)P(A00|C0)P(A12|C0)=(1/2)*(1/2)*(13/80)=13/320=0.040625 C1(过敏):P(C1)P(X|C1)=P(C1)P(A00|C1)P(A12|C1)=(5/16)*(3/5)*(24/50)=9/100=0.09 C2(脑震):P(C2)P(X|C2)=P(C2)P(A00|C2)P(A12|C2)=(3/16)*(1/3)*(22/30)=11/240=0.04583 判断: 通过分类器进行分类,其过敏(C1)的概率最大。 ? 3.3实例补充? (1)原始例子只有6个样本,笔者扩充到160个,构造的过程中可能存在误差,该实例只是用来说明如何使用朴素贝叶斯分类器进行分类; (2)通过该实例主要是要掌握朴素贝叶斯分类器的具体使用; (3)训练样本尽量大,分类才会更准确,属性划分尽量合理; (4)属性划分频率通过统计的方式计算; (5)其他著名实例:账号检测,性别分类,垃圾邮件分类等; ? 4 MapReduce实现? ? ? ? 4.1 文本分类过程? ? //中文分词可以通过ITCLAS分词器进行分词处理; //特征词的Wk的判断参数:计算其TFIDF值(TFIDF算法); (1)? //分别有以下几个value输出: 1)? 2)? 3)? 4)? (2)? //分别有以下几个value输出: 1)? (3)? ? 4.2 实现补充? (1)? (2)? (3)? ? ? 5 文档小结? ? ????????此外笔者水平有限,欢迎指正文中的各种问题。一起探讨,一起学习! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |