近邻算法 又称为被动学习算法。这种算法只是将训练集的数据保存起来,在收到测试数据时才会进行计算。
贝叶斯算法 则是一种主动学习算法,它会根据训练集构建起一个模型,并用这个模型来对新的记录进行分类,因此速度会快很多。
贝叶斯算法的两个优点:能够给出分类结果的置信度;以及它是一种主动学习算法。
用 P( h ) 来表示事件 h 发生的概率;
用 P( h | D ) 来表示 D 条件下事件 h 发生的概率。
P( h ) 表示事件 h 发生的概率,称为 h 的先验概率;
P( h | d ) 称为后验概率,表示在观察了数据集 d 之后,h 事件发生的概率是多少。
贝叶斯法则描述了 P( h )、P( h | D )、P( D )、以及P( D | h )这四个概率之间的关系:
在数据挖掘中,我们通常会使用这个公式去判断不同事件之间的关系。
例: 我们要为一家销售电子产品的公司发送宣传邮件,共有笔记本、台式机、平板电脑三种产品。我们需要根据目标用户的类型来分别派送这三种宣传邮件。有一位居住在 88005 地区的女士,她的女儿在读大学,并居住在家中,而且她还会参加瑜伽课程,那我们应该派发哪种邮件?
我们用D来表示这位客户的特征:
因此我们需要计算以下三个概率:
选择概率最大的结果。
如果我们有 h1, h2, hn,它们相当于不同的类别
在计算出以上这些概率后,选取最大的结果,就能用作分类了。这种方法叫最大后验估计,记为h MAP 。
H 表示所有的时间,所以 h ∈ H 表示“对于集合中的每一个事件”。整个公式的含义就是:对于集合中的每一个事件,计算出 P( h | D) 的值,并取最大的结果。
对于所有的事件,公式的分母都是 P( D ) ,因此即便只计算 P( D | h )P( h ),也可以判断出最大的结果。
例: 已知这种癌症在美国的感染率是 08%。血液检验的结果有阳性和阴性两种,且存在准确性的问题:如果这个人患有癌症,则有 98% 的几率测出阳性;如果他没有癌症,会有 97% 的几率测出阴性。Ann 到医院做了血液检测,呈阳性。
描述语言的公式表示:
美国有 08% 的人患有这种癌症:P( 癌症 ) = 0008
992% 的人没有患有这种癌症:P( ┐癌症 ) = 0992
对于患有癌症的人,他的血液检测结果返回阳性的概率是 98%:P( 阳性 | 癌症 ) = 098
对于患有癌症的人,检测结果返回阴性的概率是 2%:P( 阴性 | 癌症 ) = 002
对于没有癌症的人,返回阴性的概率是 97%:P( 阴性 | ┐癌症 ) = 097
对于没有癌症的人,返回阳性的概率是 3%:P( 阳性 | ┐癌症 ) = 003
贝叶斯法则计算:
P( 阳性 | 癌症 )P( 癌症 ) = 098 0008 = 00078
P( 阳性 | ┐癌症 )P( ┐癌症 ) = 003 0992 = 00298
分类结果是她不会患有癌症
用到不止一个前提条件时,计算这样的概率只需将各个条件概率相乘即可:
P( 买绿茶 | 88005 & 买有机食品 ) = P( 88005 | 买绿茶 )P( 买有机食品 | 买绿茶 )P( 买绿茶 ) = 06 08 05 = 024
P( ┐买绿茶 | 88005 & 买有机食品 ) = P( 88005 | ┐买绿茶 )P( 买有机食品 | ┐买绿茶 )P( ┐买绿茶 ) = 04 025 05 = 005
P( i500 | 健康、中等水平、热情一般、适应) = P( 健康 | i500 )P( 中等水平 | i500 )P( 热情一般 | i500 )P( 适应 | i500 )
使用朴素贝叶斯计算得到的概率其实是真实概率的一种估计,而真是概率是对全量数据做统计得到的。
大部分情况下,这种估计都是接近于真实概率的。但但真是概率非常小时,这种抽样统计的方法就会有问题了。
在朴素贝叶斯中,概率为 0 的影响是很大的,甚至会不顾其他概率的大小。此外,抽样统计的另一个问题是会低估真实概率。
上式中的 nc 可能为 0,解决方法是将公式变为:
决定常数 m 的方法有很多,我们这里使用值的类别作为 m ,比如投票有赞成和否决两种类别,所以 m 就为 2。p 则是先验概率,比如赞成和否决的概率分别是 05,那么 p 就是 05。
朴素贝叶斯算法使用的是分类型数据,在贝叶斯方法中,我们会对事物进行计数,这种计数则是可以度量的。
我们可以划定几个范围作为分类,如:
划分类别后,就可以应用朴素贝叶斯算法了。
标准差是用来衡量数据的离散程度的,如果所有数据都接近于平均值,那标准差也会比较小。
对所有的数据进行统计,得到的便是总体标准差。
无法获取总体的数据,只能选取一部分样本,这时计算得到的就是样本标准差。
68% 的数据会标准差为 1 的范围内,95% 的数据会落在标准差为 2 的范围内:
用希腊字母 μ (读“谬”)来表示平均值,σ (读“西格玛”)来表示标准差。
例( e 是自然常数,约等于 2718 ):
实现简单(只需计数即可)
需要的训练集较少
运算效率
无法学习特征之间的相互影响
实现也比较简单
不需要按特定形式准备数据
需要大量内存保存训练集数据
处理训练集较大的情况,包括推荐系统、蛋白质分析、分类等。
参考原文原文 >自主学习算法和机器学习的区别?
一、指代不同
1、机器学习算法:是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。
2、深度学习:是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标人工智能。
二、学习过程不同
1、机器学习算法:学习系统的基本结构。环境向系统的学习部分提供某些信息,学习部分利用这些信息修改知识库,以增进系统执行部分完成任务的效能,执行部分根据知识库完成任务,同时把获得的信息反馈给学习部分。
2、深度学习:通过设计建立适量的神经元计算节点和多层运算层次结构,选择合适的输人层和输出层,通过网络的学习和调优,建立起从输入到输出的函数关系,虽然不能100%找到输入与输出的函数关系,但是可以尽可能的逼近现实的关联关系。三、应用不同
1、机器学习算法::数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、DNA序列测序、语音和手写识别、战略游戏和机器人运用。
2、深度学习:计算机视觉、语音识别、自然语言处理等其他领域。
比较流行的有聚类方法有k均值聚类,属于分割式聚类的方法。
K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。目的是最小化E=sum(x-\miu_i), 其中\miu_i是每个簇的均值。
直接求上式的最小值并不容易,这是一个NP难的问题,因此采用启发式的迭代方法K-Means。
K-Means很简单,用下面一组图就可以形象的描述。上图a表达了初始的数据集,假设k=3。在图b中,我们随机选择了三个k类所对应的类别质心,即图中的红绿和草绿色质心,然后分别求样本中所有点到这三个质心的距离,并标记每个样本的类别为和该样本距离最小的质心的类别,如图c所示,经过计算样本和红绿和草绿色质心的距离,我们得到了所有样本点的第一轮迭代后的类别。此时我们对我们当前标记为红绿和草绿色点分别求其新的质心,重复了这个过程,将所有点的类别标记为距离最近的质心的类别并求新的质心。最终我们得到的三个类别如图。
首先我们看看K-Means算法的一些要点。
1 对于K-Means算法,首先要注意的是k值的选择,一般来说,我们会根据对数据的先验经验选择一个合适的k值,如果没有什么先验知识,则可以通过交叉验证选择一个合适的k值。
2 在确定了k的个数后,我们需要选择k个初始化的质心,就像上图b中的随机质心。由于我们是启发式方法,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心,最好这些质心不能太近。
传统的K-Means算法流程。
输入样本集合,然后划分成k 人为分类,凭经验将样品进行初步的分类
选择凝聚点后,求均值,求距离,归类
更新质心
重新求均值和距离,再重新归类
大样本优化Mini Batch K-Means
在统的K-Means算法中,要计算所有的样本点到所有的质心的距离。如果样本量非常大,比如达到10万以上,特征有100以上,此时用传统的K-Means算法非常的耗时,就算加上elkan K-Means优化也依旧。在大数据时代,这样的场景越来越多。此时Mini Batch K-Means应运而生。
顾名思义,Mini Batch,也就是用样本集中的一部分的样本来做传统的K-Means,这样可以避免样本量太大时的计算难题,算法收敛速度大大加快。当然此时的代价就是我们的聚类的精确度也会有一些降低。一般来说这个降低的幅度在可以接受的范围之内。
在Mini Batch K-Means中,我们会选择一个合适的批样本大小batch size,我们仅仅用batch size个样本来做K-Means聚类。那么这batch size个样本怎么来的?一般是通过无放回的随机采样得到的。
为了增加算法的准确性,我们一般会多跑几次Mini Batch K-Means算法,用得到不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。
K-Means与KNN
K-Means是无监督学习的聚类算法,没有样本输出;而KNN是监督学习的分类算法,有对应的类别输出。KNN基本不需要训练,对测试集里面的点,只需要找到在训练集中最近的k个点,用这最近的k个点的类别来决定测试点的类别。而K-Means则有明显的训练过程,找到k个类别的最佳质心,从而决定样本的簇类别。
两者也有一些相似点,两个算法都包含一个过程,即找出和某一个点最近的点。两者都利用了最近邻(nearest neighbors)的思想。
KNN(K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。近邻算法就是将数据集合中每一个记录进行分类的方法。
总体来说,KNN分类算法包括以下4个步骤:
1准备数据,对数据进行预处理
2计算测试样本点(也就是待分类点)到其他每个样本点的距离
3对每个距离进行排序,然后选择出距离最小的K个点
4对K个点所属的类别进行比较,根据少数服从多数的原则,将测试样本点归入在K个点中占比最高的那一类
该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数 , 该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点 。
K-Means小结
K-Means的主要优点有:
1)原理比较简单,实现也是很容易,收敛速度快。
2)聚类效果较优。
3)算法的可解释度比较强。
4)主要需要调参的参数仅仅是簇数k。
K-Means的主要缺点有:
1)K值的选取不好把握
2)对于不是凸的数据集比较难收敛
3)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。
4) 采用迭代方法,得到的结果只是局部最优。
5) 对噪音和异常点比较的敏感。
PAM算法。 PAM法和K-means法很相似,但是它保证跑出来你的数据是最优的,和k-means不一样的是,虽然它也随机选择群中心,但是群中心的选择并非虚拟的,而是选取真正的数据点作为群中心。比如一开始选择3和20两个点作为群中心,并得到SS值。然后用不同的点去替换3或者20,选择最小SS值的点作为新的群中心,依次类推,直到SS值不能进一步优化。然后根据最后的群中心去聚类。PAM算法能够处理非数值类型的字段,但是其效率很慢,难以处理大数据量的情况。
除了分割聚类的方法,还有阶层式聚类的方法。我们看看ward方法。
华德法( Ward’s Method ): 华德法是阶层式聚类分析法中效果最好的,但是其运算速度较慢。理论差平方是判断聚类效果好不好的一个指标(每个资料点同群中心距离的平方和),其计算方式如下,SS值最小则说明聚类效果最好。华德法采用了一个取巧的方法,保证效果最好,仍然以上述例子示范。第一次聚类(聚成4类)有十种可能性,选择AB使得SS值最小,第二次(聚成3类)选择DE使得SS最小,第三次(聚成2类)选择CDE使得SS最小,直到聚成一类。
聚类分析是非常有用的,比如在公司可以给客户分类,或者说客户画像。如何了解用户的需求,把握用户的期望,对迅速对用户作出精准的投放这些手段已经成为企业能否的关键了。
某移动运营商在5月发展了19999个新用户,在新用户入网后一个月后,1、希望通过提供一些优惠提高用户的忠诚度 2、希望通过推荐一些产品提升客单价。
为达到这一目的,我们需要对新用户进行洞察,弄清楚以下的问题: a、应该给客户提供什么优惠? 我们的优惠能否给客户带来惊喜?不同的客户是否该根据他们的喜好提供不同的优惠?b、客户对我们的什么产品感兴趣?不同的客户是否应该推荐不同的产品?
这个时候就可以使用聚类分析。1、对于给定的待预测样本,先计算它与训练数据集中每个样本的距离,并按照距离从小到大排序。
2、选取距离待预测样本最近的K个样本作为第一组邻居,并计算它们的输出值的平均值记为y1。
3、选取距离待预测样本第K+1个最近的样本到K2个最近的样本作为第二组邻居,并计算它们的输出值的平均值记为y2。
4、计算修正值为:(y1+y2)/2-y1。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)