大数据:数据挖掘十大经典算法概述

国际权威的学术组织theIEEEInternationalConferenceonDataMining(ICDM)2006年12月评选出了数据挖掘领域的十大经典算法:C4.5,k-Means,SVM,Apriori,EM,PageRank,AdaBoost,kNN,NaiveBayes,andCART.

不仅仅是选中的十大算法,其实参加评选的18种算法,实际上随便拿出一种来都可以称得上是经典算法,它们在数据挖掘领域都产生了极为深远的影响。

1.C4.5

C4.5以决策树的形式构建了一个分类器。分类器是进行数据挖掘的一个工具,它处理大量需要进行分类的数据,并尝试预测新数据所属的类别。

C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法.?C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:

1)用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;

2)在树构造过程中进行剪枝;

3)能够完成对连续属性的离散化处理;

4)能够对不完整数据进行处理。

C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。

为什么使用C4.5算法?

可以这么说,决策树最好的卖点是他们方便于翻译和解释。他们速度也很快,是种比较流行的算法。输出的结果简单易懂。

哪里可以使用它?

在OpenTox上可以找到一个很流行的开源Java实现方法。Orange是一个用于数据挖掘的开源数据可视化和分析工具,它的决策树分类器是用C4.5实现的。

2.Thek-meansalgorithm,即K-Means算法

k-meansalgorithm算法是一个聚类算法,从一个目标集中创建多个组,每个组的成员都是比较相似的。这是个想要探索一个数据集时比较流行的聚类分析技术。聚类分析属于设计构建组群的算法,这里的组成员相对于非组成员有更多的相似性。在聚类分析的世界里,类和组是相同的意思。

把n的对象根据他们的属性分为k个分割,k

为什么要使用k-means算法?

我认为大多数人都同意这一点:k-means关键卖点是它的简单。它的简易型意味着它通常要比其他的算法更快更有效,尤其是要大量数据集的情况下更是如此。

k-means算法是设计来处理连续数据的。对于离散数据你需要使用一些小技巧后才能让k-means算法奏效。

Kmeans在哪里使用?

网上有很多可获得的kmeans聚类算法的语言实现:

ApacheMahout

Julia

R

SciPy

Weka

MATLAB

SAS

3.Supportvectormachines

支持向量机,英文为SupportVectorMachine,简称SV机(论文中一般简称SVM)。支持向量机(SVM)获取一个超平面将数据分成两类。以高水准要求来看,除了不会使用决策树以外,SVM与C4.5算法是执行相似的任务的。超平面(hyperplane)是个函数,类似于解析一条线的方程。实际上,对于只有两个属性的简单分类任务来说,超平面可以是一条线的。

SVM是一种監督式學習的方法,它广泛的应用于统计分类以及回归分析中。支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。一个极好的指南是C.J.CBurges的《模式识别支持向量机指南》。vanderWalt和Barnard将支持向量机和其他分类器进行了比较。

为什么要用SVM?

SVM和C4.5大体上都是优先尝试的二类分类器。根据“没有免费午餐原理”,没有哪一种分类器在所有情况下都是最好的。此外,核函数的选择和可解释性是算法的弱点所在。

在哪里使用SVM?

有什么SVM的实现方法,比较流行的是用scikit-learn,MATLAB和libsvm实现的这几种。

4.TheApriorialgorithm

Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。Apriori算法学习数据的关联规则(associationrules),适用于包含大量事务(transcation)的数据库。关联规则学习是学习数据库中不同变量中的相互关系的一种数据挖掘技术。

Apriori算法核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。

基本的Apriori算法有三步:

参与,扫描一遍整个数据库,计算1-itemsets出现的频率。

剪枝,满足支持度和可信度的这些1-itemsets移动到下一轮流程,再寻找出现的2-itemsets。

重复,对于每种水平的项集一直重复计算,知道我们之前定义的项集大小为止。

这个算法是监督的还是非监督的?

Apriori一般被认为是一种非监督的学习方法,因为它经常用来挖掘和发现有趣的模式和关系。

还有,对Apriori算法改造一下也能对已经标记好的数据进行分类。

为什么使用Apriori算法?

它易于理解,应用简单,还有很多的派生算法。但另一方面,当生成项集的时候,算法是很耗费内存、空间和时间。

大量的Apriori算法的语言实现可供使用。比较流行的是ARtool,Weka,andOrange。

5.最大期望(EM)算法

在数据挖掘领域,最大期望算法(Expectation-Maximization,EM)一般作为聚类算法(类似k-means算法)用来知识挖掘。其中概率模型依赖于无法观测的隐藏变量(LatentVariabl)。最大期望经常用在机器学习和计算机视觉的数据集聚(DataClustering)领域。

算法的精髓在于:

通过优化似然性,EM生成了一个很棒的模型,这个模型可以对数据点指定类型标签—听起来像是聚类算法!

EM是监督算法还是非监督算法呢?

因为我们不提供已经标好的分类信息,这是个非监督学习算法。

为什么使用它?

EM算法的一个关键卖点就是它的实现简单直接。另外,它不但可以优化模型参数,还可以反复的对丢失数据进行猜测。

这使算法在聚类和产生带参数的模型上都表现出色。在得知聚类情况和模型参数的情况下,我们有可能解释清楚有相同属性的分类情况和新数据属于哪个类之中。

EM算法的弱点:

第一,EM算法在早期迭代中都运行速度很快,但是越后面的迭代速度越慢。

第二,EM算法并不能总是寻到最优参数,很容易陷入局部最优而不是找到全局最优解。

EM算法实现可以在Weka中找到,mclustpackage里面有R语言对算法的实现,scikit-learn的gmmmodule里也有对它的实现。

6.PageRank

PageRank是Google算法的重要内容。2001年9月被授予美国专利,专利人是Google创始人之一拉里·佩奇(LarryPage)。因此,PageRank里的page不是指网页,而是指佩奇,即这个等级方法是以佩奇来命名的。

PageRank根据网站的外部链接和内部链接的数量和质量俩衡量网站的价值。PageRank是为了决定一些对象和同网络中的其他对象之间的相对重要程度而设计的连接分析算法(linkanalysisalgorithm)。

PageRank背后的概念是,每个到页面的链接都是对该页面的一次投票,被链接的越多,就意味着被其他网站投票越多。这个就是所谓的“链接流行度”——衡量多少人愿意将他们的网站和你的网站挂钩。PageRank这个概念引自学术中一篇论文的被引述的频度——即被别人引述的次数越多,一般判断这篇论文的权威性就越高。

这算法是监督的还是非监督的?

PageRank常用来发现一个网页的重要度关联度,通常被认为是一种非监督学习算法。

为什么使用PageRank?

PageRank的主要卖点是:由于得到新相关链接具有难度,算法依然具有良好的鲁棒性。

简单一点说,如果你又一个图或者网络,并想理解其中元素的相对重要性,优先性,排名或者相关性,可以用PageRank试一试。

哪里使用过它?Google拥有PageRank的商标。但是斯坦福大学取得了PageRank算法的专利权。如果使用PageRank,你可能会有疑问:我不是律师,所以最好和一个真正的律师确认一下。但是只要和Google或斯坦福没有涉及到商业竞争,应该都是可以使用这个算法的。

给出PageRank的三个实现:

1C++OpenSourcePageRankImplementation

2PythonPageRankImplementation

3igraph–Thenetworkanalysispackage(R)

7.AdaBoost

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

为什么使用AdaBoost?

AdaBoost算法简单,编程相对来说简洁直白。

另外,它速度快!

因为每轮连续的Adaboost回合都重新定义了每个最好学习器的权重,因此这是个自动调整学习分类器的非常简洁的算法,你所要做的所有事就是指定运行的回合数。

算法灵活通用:AdaBoost可以加入任何学习算法,并且它能处理多种数据。

AdaBoost有很多程序实现和变体。给出一些:

scikit-learn

ICSIBoost

gbm:GeneralizedBoostedRegressionModels

8.kNN:k-nearestneighborclassification

K最近邻(k-NearestNeighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

为什么我们会用kNN?

便于理解和实现是我们使用它的两个关键原因。根据距离测度的方法,kNN可能会非常精确。

但是这还只是故事的一部分,下面是我们需要注意的五点:

1当试图在一个大数据集上计算最临近点时,kNN算法可能会耗费高昂的计算成本。

2噪声数据(Noisydata)可能会影响到kNN的分类。

3选择大范围的属性筛选(feature)会比小范围的筛选占有很多优势,所以属性筛选(feature)的规模非常重要。

4由于数据处理会出现延迟,kNN相比积极分类器,一般需要更强大的存储需求。

5选择一个合适的距离测度对kNN的准确性来说至关重要。

哪里用过这个方法?有很多现存的kNN实现手段:

MATLABk-nearestneighborclassification

scikit-learnKNeighborsClassifier

k-NearestNeighbourClassificationinR

9.NaiveBayes

朴素贝叶斯(NaiveBayes)并不只是一个算法,而是一系列分类算法,这些算法以一个共同的假设为前提:

被分类的数据的每个属性与在这个类中它其他的属性是独立的。

独立是什么意思呢?当一个属性值对另一个属性值不产生任何影响时,就称这两个属性是独立的。

在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(DecisionTreeModel)和朴素贝叶斯模型(NaiveBayesianModel,NBC)。朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。

理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC模型的性能最为良好。

为什么使用NaiveBayes?

就像你在上面看到的例子一样,NaiveBayes只涉及到了简单的数学知识。加起来只有计数、乘法和除法而已。

一旦计算好了频数表(frequencytables),要分类一个未知的水果只涉及到计算下针对所有类的概率,然后选择概率最大的即可。

尽管算法很简单,但是NaiveBayes却出人意料的十分精确。比如,人们发现它是垃圾邮件过滤的高效算法。

NaiveBayes的实现可以从Orange,scikit-learn,Weka和R里面找到。

10.CART:分类与回归树

CART,ClassificationandRegressionTrees。在分类树下面有两个关键的思想。第一个是关于递归地划分自变量空间的想法;第二个想法是用验证数据进行剪枝。

CART和C4.5对比如下:

这是个监督算法还是非监督的?

为了构造分类和回归树模型,需要给它提供被分类好的训练数据集,因此CART是个监督学习算法。

为什么要使用CART?

使用C4.5的原因大部分也适用于CART,因为它们都是决策树学习的方法。便于说明和解释这类的原因也适用于CART。和C4.5一样,它们的计算速度都很快,算法也都比较通用流行,并且输出结果也具有可读性。

scikit-learn在他们的决策树分类器部分实现了CART算法;R语言的treepackage也有CART的实现;Weka和MATLAB也有CART的实现过程。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180608A0IDOV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券