做图片可以卖给那些网站,静安广州网站建设,地方网站不让做吗,任务发布网站建设写在前面的话#xff1a; 我现在大四#xff0c;毕业设计是做一个基于大数据的用户画像研究分析。所以开始学习数据挖掘的相关技术。这是我学习的一个新技术领域#xff0c;学习难度比我以往学过的所有技术都难。虽然现在在一家公司实习#xff0c;但是工作还是挺忙的…写在前面的话 我现在大四毕业设计是做一个基于大数据的用户画像研究分析。所以开始学习数据挖掘的相关技术。这是我学习的一个新技术领域学习难度比我以往学过的所有技术都难。虽然现在在一家公司实习但是工作还是挺忙的经常要加班无论工作多忙,还是决定要写一个专栏,这个专栏就写一些数据挖掘算法、数据结构、算法设计和分析的相关文章。通过写博文来督促自己不断学习。以前对于数学没有多大的兴趣爱好从小到大学数学也是为了考试能考个好的成绩学过的很多数学知识并没有深刻的感受到它的用途不用也就慢慢遗忘但自从我看了数学之美这本书和开始学习数据挖掘后使我对数学有了很大的兴趣。数学源于生活用于生活。数据挖掘中涉及到很多统计学、线性代数、微积分等相关知识而我的很多数学知识都已经还给我以前的老师了所以现在只能慢慢一点一点捡起来。要感谢网上有很多作者写出的好的文章让我受益匪浅也算是站在他们的肩膀上学习。减少了我的学习困难而我今天开始写的专栏里的一系列文章很多例子都是借鉴于他们文章中的例子。想了想这个专栏名称就叫算法大杂烩以后我会把我工作中用到的、自己学习的新算法、以及回顾梳理的每一个算法的学习笔记和心得都更新到这个专栏里。写的博文难免会有写得不好的地方欢迎大家指正,我也喜欢和有共同学习爱好的人一起学习交流。 不一定每天都更会更新但是肯定会坚持写下去。 今天写的第一篇博文是关于朴素贝叶斯分类的。几年前我就听说过这个算法只是稍微了解一点点仅仅停留在只知道它是通过贝叶斯定理来分类的。写这篇文章之前我看了很多的相关知识包括书籍和网上的一些优秀的博文。哈哈到现在也应该算对于这个算法入门了吧。后面的参考链接中会附上一些参考的文章地址。 朴素贝叶斯分类 引子 朴素贝叶斯分类是一种常用的分类算法他根据研究对象的某些特征来推断出该研究对象属于该研究领域的哪个类别。 数学是解决我们生活中产生的各种问题的。所以数学源于生活生活中也处处体现数学我们编程不过是把人能够理解的数学知识转换成计算机能够理解的形式来解决实际问题。拿朴素贝叶斯分类来说其实生活中比比皆是举个例子 我们在大街上看到一个人猜测他属于哪个职业。这就是一种分类你是根据什么来判断的。可能是根据这个人的穿着打扮言行举止。 穿着打扮胡子拉碴、头发乱七八糟背着大的电脑包 言行举止双眼无神估计在想哪个bug的解决办法黑眼圈重头发没洗。 所以我大概能看出这个人职业是程序员开个玩笑这只是程序员自黑而已我身边的程序员都不是这样的当然也包括我。 其实穿着打扮、言行举止就是人的特征属性 我们要对某个对象分类必须根据他的特征属性来判断。 概述 要了解贝叶斯分类必须了解贝叶斯定理贝叶斯定理离不开条件概率 条件概率定义 事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为PA|B读作“在B条件下A的概率”。 根据文氏图可以很清楚地看到在事件B发生的情况下事件A发生的概率就是P(A∩B)除以P(B)。 根据文氏图可以很清楚地看到在事件B发生的情况下事件A发生的概率就是P(A∩B)除以P(B)。 P(A|B)P(A∩B)/P(B) 因此 P(A∩B)P(A|B)P(B) 所以 P(A|B)P(B)P(B|A)P(A) 即 P(A|B)P(B|A)P(A)/P(B) 上面的公式就是贝叶斯定理 生活中我们经常知道这种情况 P(A|B),但是不知道P(B|A).比如 A: 表示用户收入高 B表示订购2G流量套餐 P(A|B) 表示订购2G流量套餐的用户收入高的概率这个可以通过统计的样本算出得到。 但是现在有一个用户收入高A他购买2G流量套餐(B)的概率是多少即P(B|A)这才是我们关注 所以通过贝叶斯定理我们可以把这两者挂上钩求出我们想知道的P(B|A) 病人疾病预测分类例子 看一个简单的形式化的列子来说明贝叶斯分类的作用 这个例子来自阮一峰老师的介绍贝叶斯应用博文中的一个病人分类的例子 如下其中特征属性是症状和职业类别是疾病包括感冒过敏、脑震荡 某个医院早上收了六个门诊病人如下表。 [plain] view plaincopy print? 症状 职业 疾病 打喷嚏 护士 感冒 打喷嚏 农夫 过敏 头痛 建筑工人 脑震荡 头痛 建筑工人 感冒 打喷嚏 教师 感冒 头痛 教师 脑震荡 现在又来了第七个病人是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大 根据贝叶斯定理 P(A|B) P(B|A) P(A) / P(B) 可得 [plain] view plaincopy print? P(感冒|打喷嚏x建筑工人) P(打喷嚏x建筑工人|感冒) x P(感冒) / P(打喷嚏x建筑工人) 假定打喷嚏和建筑工人这两个特征是独立的因此上面的等式就变成了 [plain] view plaincopy print? P(感冒|打喷嚏x建筑工人) P(打喷嚏|感冒) x P(建筑工人|感冒) x P(感冒) / P(打喷嚏) x P(建筑工人) 这是可以计算的。 [plain] view plaincopy print? P(感冒|打喷嚏x建筑工人) 0.66 x 0.33 x 0.5 / 0.5 x 0.33 0.66 因此这个打喷嚏的建筑工人有66%的概率是得了感冒。同理可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率就可以知道他最可能得什么病。 这就是贝叶斯分类器的基本方法在统计资料的基础上依据找到的一些特征属性来计算各个类别的概率找到概率最大的类从而实现分类。 贝叶斯分类的定义 1、设为一个待分类项而每个a为x的一个特征属性。 2、有类别集合。 3、计算。 4、求出在X个属性条件下所有类别的概率选取概率最大的。则X属于概率最大的类别 则。 根据贝叶斯定理要求P(A|B)只要求出P(B|A)即可 .这里Y指A,X指B.把B分解为各个特征属性求出每个类别的每个特征属性即可如下 1、找到一个已知分类的待分类项集合这个集合叫做训练样本集。 2、统计得到在各类别下各个特征属性的条件概率估计。即。 3、如果各个特征属性是条件独立的则根据贝叶斯定理有如下推导 因为分母对于所有类别为常数因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的所以有 上式等号右边的每一项都可以从统计资料中得到由此就可以计算出每个类别对应的概率从而找出最大概率的那个类。 注意各个特征属性是条件独立的这是朴素贝叶斯所要求的如果各个特征属性不独立就不属于朴素贝叶斯属于贝叶斯网络后面的文章会讲解。 账号真假检测例子 再看一个例子该例子来自网上张阳的算法杂货铺博文 根据某社区网站的抽样统计该站10000个账号中有89%为真实账号设为C011%为虚假账号设为C1。 C0 0.89 C1 0.11 接下来就要用统计资料判断一个账号的真实性。假定某一个账号有以下三个特征 F1: 日志数量/注册天数 F2: 好友数量/注册天数 F3: 是否使用真实头像真实头像为1非真实头像为0 F1 0.1 F2 0.2 F3 0 请问该账号是真实账号还是虚假账号 方法是使用朴素贝叶斯分类器计算下面这个计算式的值。 P(F1|C)P(F2|C)P(F3|C)P(C) 虽然上面这些值可以从统计资料得到但是这里有一个问题F1和F2是连续变量不适宜按照某个特定值计算概率。 一个技巧是将连续值变为离散值计算区间的概率。比如将F1分解成[0, 0.05]、(0.05, 0.2)、[0.2, ∞]三个区间然后计算每个区间的概率。在我们这个例子中F1等于0.1落在第二个区间所以计算的时候就使用第二个区间的发生概率。 根据统计资料可得 P(F1|C0) 0.5, P(F1|C1) 0.1 P(F2|C0) 0.7, P(F2|C1) 0.2 P(F3|C0) 0.2, P(F3|C1) 0.9 因此 P(F1|C0) P(F2|C0) P(F3|C0) P(C0) 0.5 x 0.7 x 0.2 x 0.89 0.0623 P(F1|C1) P(F2|C1) P(F3|C1) P(C1) 0.1 x 0.2 x 0.9 x 0.11 0.00198 可以看到虽然这个用户没有使用真实头像但是他是真实账号的概率比虚假账号高出30多倍因此判断这个账号为真。 贝叶斯分类的含义 长久以来人们对一件事情发生或不发生的概率只有固定的0和1即要么发生要么不发生从来不会去考虑某件事情发生的概率有多大不发生的概率又是多大。比如如果问那时的人们一个问题“有一个袋子里面装着若干个白球和黑球请问从袋子中取得白球的概率是多少”他们会想都不用想会立马告诉你取出白球的概率就是1/2要么取到白球要么取不到白球即θ只能有一个值不是1/2就是0而且不论你取了多少次取得白球的概率θ始终都是1/2即不随观察结果X 的变化而变化。 直到贝叶斯定理的出现贝叶斯定理不把概率θ看做一个固定的值比如上面取白球的概率一直都是1/2而看做一个随机变量他会随着观察结果变化 贝叶斯及贝叶斯派提出了一个思考问题的固定模式 先验分布 样本信息 后验分布 上述思考模式意味着新观察到的样本信息将修正人们以前对事物的认知。换言之在得到新的样本信息之前人们对的认知是先验分布在得到新的样本信息后人们对的认知为。 条件概率公式进行变形可以得到如下形式 P(A|B)P(A) * P(B|A)/P(B) 我们把P(A)称为先验概率即在事件B发生之前事件A发生的概率在事件B发生之前它是一个无条件分布因为A还没有与事件B关联上他是先验分布。 P(A|B)称为后验概率Posterior probability即在B事件发生之后我们对A事件概率的重新评估。P(B|A)/P(B)称为可能性函数Likelyhood这是一个调整因子使得预估概率更接近真实概率。它的分布就是后验分布 所以条件概率可以理解成下面的式子 后验概率 先验概率 调整因子 这就是贝叶斯推断的含义。我们先预估一个先验概率然后加入实验结果看这个实验到底是增强还是削弱了先验概率由此得到更接近事实的后验概率。 在这里如果可能性函数P(B|A)/P(B)1意味着先验概率被增强事件A的发生的可能性变大如果可能性函数1意味着B事件无助于判断事件A的可能性如果可能性函数1意味着先验概率被削弱事件A的可能性变小。 水果糖问题例子 这个例子同样来自阮一峰老师的博文加深对贝叶斯推断的理解 第一个例子。两个一模一样的碗一号碗有30颗水果糖和10颗巧克力糖二号碗有水果糖和巧克力糖各20颗。现在随机选择一个碗从中摸出一颗糖发现是水果糖。请问这颗水果糖来自一号碗的概率有多大 我们假定H1表示一号碗H2表示二号碗。由于这两个碗是一样的所以P(H1)P(H2)也就是说在取出水果糖之前这两个碗被选中的概率相同。因此P(H1)0.5我们把这个概率就叫做先验概率即没有做实验之前来自一号碗的概率是0.5。 再假定E表示水果糖所以问题就变成了在已知E的情况下来自一号碗的概率有多大即求P(H1|E)。我们把这个概率叫做后验概率即在E事件发生之后对P(H1)的修正。 根据贝叶斯定理得到 P(H1|E)P(H1) * P(E|H1)/P(E) 已知P(H1)等于0.5P(E|H1)为一号碗中取出水果糖的概率等于0.75那么求出P(E)就可以得到答案。根据全概率公式不懂全概率公式的可以查找相关资料理解 P(E)P(E|H1) * P(H1) P(E|H2)*P(H2) 所以将数字代入原方程得到 P(H1|E)0.5* 0.75/0.6250.6 这表明来自一号碗的概率是0.6。也就是说取出水果糖之后H1事件的可能性得到了增强。 连续型特征属性和零概率事件处理 上面讲的特征属性值都是离散的账号真假检测例子中把连续的转换成区间每个区间也可以看成离散的但是如果在不能这样转换的情况下怎么解决如果特征属性值是不是离散的而是连续的怎么办 我们是站在巨人的肩膀上前人早已经为我们找到了应对之策 当特征属性为连续值时通常假定其值服从高斯分布也称正态分布。即 而 因此只要计算出训练样本中各个类别中此特征项划分的各均值和标准差代入上述公式即可得到需要的估计值。ak为观察到的属性值 另一个需要讨论的问题就是当P(a|y)0怎么办当某个类别下某个特征项划分没有出现时就是产生这种现象这会令分类器质量大大降低。为了解决这个问题引入了拉普拉斯校准它的思想非常简单就是对没类别下所有划分概率为零的的计数加1这样如果训练样本集数量充分大时并不会对结果产生影响并且解决了上述频率为零的尴尬局面。 买电脑是否和收入相关的例子 验证买电脑是否和收入有关的场景下 类 buys_computeryes包含1000个元组有0个元组incomelow ,990个元组 incomemedium,10个元组incomehigh,这些事件的概率分别是0, 0.990, 0.010. 有概率为0,肯定不行.使用拉普拉斯校准对每个收入-值对应加1个元组分别得到如下概率 [plain] view plaincopy print? 1/10030.001 991/10030.998 11/10030.011 这些校准的概率估计与对应的未校准的估计很接近但是避免了零概率值 性别分类的例子 再看一个阮一峰老师的朴素贝叶斯应用一文中摘自维基百科的例子关于处理连续变量的另一种方法。 下面是一组人类身体特征的统计资料。 [plain] view plaincopy print? 性别 身高英尺 体重磅 脚掌英寸 男 6 180 12 男 5.92 190 11 男 5.58 170 12 男 5.92 165 10 女 5 100 6 女 5.5 150 8 女 5.42 130 7 女 5.75 150 9 已知某人身高6英尺、体重130磅脚掌8英寸请问该人是男是女 根据朴素贝叶斯分类器计算下面这个式子的值。 P(身高|性别) x P(体重|性别) x P(脚掌|性别) x P(性别) 这里的困难在于由于身高、体重、脚掌都是连续变量不能采用离散变量的方法计算概率。而且由于样本太少所以也无法分成区间计算。怎么办 这时可以假设男性和女性的身高、体重、脚掌都是正态分布通过样本计算出均值和方差也就是得到正态分布的密度函数。有了密度函数就可以把值代入算出某一点的密度函数的值。 比如男性的身高是均值5.855、方差0.035的正态分布。所以男性的身高为6英尺的概率的相对值等于1.5789大于1并没有关系因为这里是密度函数的值只用来反映各个值的相对可能性。 有了这些数据以后就可以计算性别的分类了。 P(身高6|男) x P(体重130|男) x P(脚掌8|男) x P(男) 6.1984 x e-9 P(身高6|女) x P(体重130|女) x P(脚掌8|女) x P(女) 5.3778 x e-4 可以看到女性的概率比男性要高出将近10000倍所以判断该人为女性。 下一篇会写贝叶斯网络。 参考文章 http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.html http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html http://blog.csdn.net/zdy0_2004/article/details/41096141 参考书籍数据挖掘概念与技术。数据挖掘十大算法统计学概率论方面的数学知识 码字不易转载请指明出自http://blog.csdn.net/tanggao1314/article/details/66478782 转载于:https://www.cnblogs.com/csguo/p/7804355.html