转自:http://www.cnblogs.com/zhizhan/p/4432943.htmlhtml
一、决策树易于理解和解释,能够可视化分析,容易提取出规则。程序员
二、能够同时处理标称型和数值型数据。算法
三、测试数据集时,运行速度比较快。数据库
四、决策树能够很好的扩展到大型数据库中,同时它的大小独立于数据库大小。网络
一、对缺失数据处理比较困难。数据结构
二、容易出现过拟合问题。dom
三、忽略数据集中属性的相互关联。机器学习
四、ID3算法计算信息增益时结果偏向数值比较多的特征。分布式
一、对决策树进行剪枝。能够采用交叉验证法和加入正则化的方法。函数
二、使用基于决策树的combination算法,如bagging算法,randomforest算法,能够解决过拟合的问题
企业管理实践,企业投资决策,因为决策树很好的分析能力,在决策过程应用较多。
一、KNN是一种在线技术,新数据能够直接加入数据集而没必要进行从新训练
二、KNN理论简单,容易实现
一、对于样本容量大的数据集计算量比较大。
二、样本不平衡时,预测误差比较大。如:某一类的样本比较少,而其它类样本比较多。
三、KNN每一次分类都会从新进行一次全局运算。
四、k值大小的选择。
文本分类、模式识别、聚类分析,多分类领域
一、解决小样本下机器学习问题。
二、解决非线性问题。
三、无局部极小值问题。(相对于神经网络等算法)
四、能够很好的处理高维数据集。
五、泛化能力比较强。
一、对于核函数的高维映射解释力不强,尤为是径向基函数。
二、对缺失数据敏感。
文本分类、图像识别、主要二分类领域
一、很好的利用了弱分类器进行级联。
二、能够将不一样的分类算法做为弱分类器。
三、AdaBoost具备很高的精度。
四、相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每一个分类器的权重。
一、AdaBoost迭代次数也就是弱分类器数目不太好设定,可使用交叉验证来进行肯定。
二、数据不平衡致使分类精度降低。
三、训练比较耗时,每次从新选择当前分类器最好切分点。
模式识别、计算机视觉领域,用于二分类和多分类场景
一、对大数量训练和查询时具备较高的速度。即便使用超大规模的训练集,针对每一个项目一般也只会有相对较少的特征数,而且对项目的训练和分类也仅仅是特征几率的数学运算而已。
二、支持增量式运算。便可以实时的对新增的样本进行训练。
三、朴素贝叶斯对结果解释容易理解。
一、因为使用了样本属性独立性的假设,因此若是样本属性有关联时其效果很差。
文本分类、欺诈检测中使用较多
一、计算代价不高,易于理解和实现
一、容易产生欠拟合。
二、分类精度不高。
用于二分类领域,能够得出几率值,适用于根据分类几率排名的领域,如搜索排名等。
Logistic回归的扩展softmax能够应用于多分类领域,如手写字识别等。
一、分类准确度高,学习能力极强。
二、对噪声数据鲁棒性和容错性较强。
三、有联想能力,能逼近任意非线性关系。
一、神经网络参数较多,权值和阈值。
二、黑盒过程,不能观察中间结果。
三、学习过程比较长,有可能陷入局部极小值。
目前深度神经网络已经应用与计算机视觉,天然语言处理,语音识别等领域并取得很好的效果。
===============================================================================================
原文:http://suanfazu.com/t/qian-tan-wo-dui-ji-qi-xue-xi-de-dian-li-jie/305
机器学习方法很是多,也很成熟。下面我挑几个说。
首先是SVM。由于我作的文本处理比较多,因此比较熟悉SVM。SVM也叫支持向量机,其把数据映射到多维空间中以点的形式存在,而后找到可以分类的最优超平面,最后根据这个平面来分类。SVM能对训练集以外的数据作很好的预测、泛化错误率低、计算开销小、结果易解释,但其对参数调节和核函数的参数过于敏感。我的感受SVM是二分类的最好的方法,但也仅限于二分类。若是要使用SVM进行多分类,也是在向量空间中实现屡次二分类。
SVM有一个核心函数SMO,也就是序列最小最优化算法。SMO基本是最快的二次规划优化算法,其核心就是找到最优参数α,计算超平面后进行分类。SMO方法能够将大优化问题分解为多个小优化问题求解,大大简化求解过程。某些条件下,把原始的约束问题经过拉格朗日函数转化为无约束问题,若是原始问题求解棘手,在知足KKT的条件下用求解对偶问题来代替求解原始问题,使得问题求解更加容易。 SVM还有一个重要函数是核函数。核函数的主要做用是将数据从低位空间映射到高维空间。详细的内容我就不说了,由于内容实在太多了。总之,核函数能够很好的解决数据的非线性问题,而无需考虑映射过程。
第二个是KNN。KNN将测试集的数据特征与训练集的数据进行特征比较,而后算法提取样本集中特征最近邻数据的分类标签,即KNN算法采用测量不一样特征值之间的距离的方法进行分类。KNN的思路很简单,就是计算测试数据与类别中心的距离。KNN具备精度高、对异常值不敏感、无数据输入假定、简单有效的特色,但其缺点也很明显,计算复杂度过高。要分类一个数据,却要计算全部数据,这在大数据的环境下是很可怕的事情。并且,当类别存在范围重叠时,KNN分类的精度也不过高。因此,KNN比较适合小量数据且精度要求不高的数据。
KNN有两个影响分类结果较大的函数,一个是数据归一化,一个是距离计算。若是数据不进行归一化,当多个特征的值域差异很大的时候,最终结果就会受到较大影响;第二个是距离计算。这应该算是KNN的核心了。目前用的最多的距离计算公式是欧几里得距离,也就是咱们经常使用的向量距离计算方法。
我的感受,KNN最大的做用是能够随时间序列计算,即样本不能一次性获取只能随着时间一个一个获得的时候,KNN能发挥它的价值。至于其余的特色,它能作的,不少方法都能作;其余能作的它却作不了。
第三个就是Naive Bayes了。Naive Bayes简称NB(牛X),为啥它牛X呢,由于它是基于Bayes几率的一种分类方法。贝叶斯方法能够追溯到几百年前,具备深厚的几率学基础,可信度很是高。Naive Baye中文名叫朴素贝叶斯,为啥叫“朴素”呢?由于其基于一个给定假设:给定目标值时属性之间相互条件独立。好比我说“我喜欢你”,该假设就会假定“我”、“喜欢”、“你”三者之间毫无关联。仔细想一想,这几乎是不可能的。马克思告诉咱们:事物之间是有联系的。同一个事物的属性之间就更有联系了。因此,单纯的使用NB算法效率并不高,大都是对该方法进行了必定的改进,以便适应数据的需求。
NB算法在文本分类中用的很是多,由于文本类别主要取决于关键词,基于词频的文本分类正中NB的下怀。但因为前面提到的假设,该方法对中文的分类效果很差,由于中文顾左右而言他的状况太多,但对直来直去的老美的语言,效果良好。至于核心算法嘛,主要思想全在贝叶斯里面了,没啥可说的。
第四个是回归。回归有不少,Logistic回归啊、岭回归啊什么的,根据不一样的需求能够分出不少种。这里我主要说说Logistic回归。为啥呢?由于Logistic回归主要是用来分类的,而非预测。回归就是将一些数据点用一条直线对这些点进行拟合。而Logistic回归是指根据现有数据对分类边界线创建回归公式,以此进行分类。该方法计算代价不高,易于理解和实现,并且大部分时间用于训练,训练完成后分类很快;但它容易欠拟合,分类精度也不高。主要缘由就是Logistic主要是线性拟合,但现实中不少事物都不知足线性的。即使有二次拟合、三次拟合等曲线拟合,也只能知足小部分数据,而没法适应绝大多数数据,因此回归方法自己就具备局限性。但为何还要在这里提出来呢?由于回归方法虽然大多数都不合适,但一旦合适,效果就很是好。
Logistic回归实际上是基于一种曲线的,“线”这种连续的表示方法有一个很大的问题,就是在表示跳变数据时会产生“阶跃”的现象,说白了就是很难表示数据的忽然转折。因此用Logistic回归必须使用一个称为“海维塞德阶跃函数”的Sigmoid函数来表示跳变。经过Sigmoid就能够获得分类的结果。
为了优化Logistic回归参数,须要使用一种“梯度上升法”的优化方法。该方法的核心是,只要沿着函数的梯度方向搜寻,就能够找到函数的最佳参数。但该方法在每次更新回归系数时都须要遍历整个数据集,对于大数据效果还不理想。因此还须要一个“随机梯度上升算法”对其进行改进。该方法一次仅用一个样本点来更新回归系数,因此效率要高得多。
第五个是决策树。据我了解,决策树是最简单,也是曾经最经常使用的分类方法了。决策树基于树理论实现数据分类,我的感受就是数据结构中的B+树。决策树是一个预测模型,他表明的是对象属性与对象值之间的一种映射关系。决策树计算复杂度不高、输出结果易于理解、对中间值缺失不敏感、能够处理不相关特征数据。其比KNN好的是能够了解数据的内在含义。但其缺点是容易产生过分匹配的问题,且构建很耗时。决策树还有一个问题就是,若是不绘制树结构,分类细节很难明白。因此,生成决策树,而后再绘制决策树,最后再分类,才能更好的了解数据的分类过程。
决策树的核心树的分裂。到底该选择什么来决定树的分叉是决策树构建的基础。最好的方法是利用信息熵实现。熵这个概念很头疼,很容易让人迷糊,简单来讲就是信息的复杂程度。信息越多,熵越高。因此决策树的核心是经过计算信息熵划分数据集。
我还得说一个比较特殊的分类方法:AdaBoost。AdaBoost是boosting算法的表明分类器。boosting基于元算法(集成算法)。即考虑其余方法的结果做为参考意见,也就是对其余算法进行组合的一种方式。说白了,就是在一个数据集上的随机数据使用一个分类训练屡次,每次对分类正确的数据赋权值较小,同时增大分类错误的数据的权重,如此反复迭代,直到达到所需的要求。AdaBoost泛化错误率低、易编码、能够应用在大部分分类器上、无参数调整,但对离群点敏感。该方法其实并非一个独立的方法,而是必须基于元方法进行效率提高。我的认为,所谓的“AdaBoost是最好的分类方法”这句话是错误的,应该是“AdaBoost是比较好的优化方法”才对。
好了,说了这么多了,我有点晕了,还有一些方法过几天再写。总的来讲,机器学习方法是利用现有数据做为经验让机器学习,以便指导之后再次碰到的决策。目前来讲,对于大数据分类,仍是要借助分布式处理技术和云技术才有可能完成,但一旦训练成功,分类的效率仍是很可观的,这就比如人年龄越大看待问题越精准的道理是同样的。这八个月里,从最初的理解到一步步实现;从需求的逻辑推断到实现的方法选择,天天都是辛苦的,但天天也都是紧张刺激的。我天天都在想学了这个之后能够实现什么样的分类,其实想一想都是让人兴奋的。当初,我逃避作程序员,主要缘由就是我不喜欢作已经知道结果的事情,由于那样的工做没有什么期盼感;而如今,我能够利用数据分析获得我想象不到的事情,这不只知足了个人好奇感,也让我能在工做中乐在其中。也许,我距离社会的技术需求还有很远的距离,但我对本身充满信心,由于,我不感到枯燥,不感到彷徨,虽然有些力不从心,但态度坚决。
===================================================
http://blog.csdn.net/vola9527/article/details/43347747
简述机器学习十大算法的每一个算法的核心思想、工做原理、适用状况及优缺点等。
1)C4.5算法:
ID3算法是以信息论为基础,以信息熵和信息增益度为衡量标准,从而实现对数据的概括分类。ID3算法计算每一个属性的信息增益,并选取具备最高增益的属性做为给定的测试属性。
C4.5算法核心思想是ID3算法,是ID3算法的改进,改进方面有:
1)用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;
2)在树构造过程当中进行剪枝
3)能处理非离散的数据
4)能处理不完整的数据
C4.5算法优势:产生的分类规则易于理解,准确率较高。
缺点:
1)在构造树的过程当中,须要对数据集进行屡次的顺序扫描和排序,于是致使算法的低效。
2)C4.5只适合于可以驻留于内存的数据集,当训练集大得没法在内存容纳时程序没法运行。
2)K means 算法:
是一个简单的聚类算法,把n的对象根据他们的属性分为k个分割,k< n。 算法的核心就是要优化失真函数J,使其收敛到局部最小值但不是全局最小值。
其中N为样本数,K是簇数,rnk b表示n属于第k个簇,uk 是第k个中心点的值。而后求出最优的uk
优势:算法速度很快
缺点是,分组的数目k是一个输入参数,不合适的k可能返回较差的结果。
3)朴素贝叶斯算法:
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。算法的基础是几率问题,分类原理是经过某对象的先验几率,利用贝叶斯公式计算出其后验几率,即该对象属于某一类的几率,选择具备最大后验几率的类做为该对象所属的类。朴素贝叶斯假设是约束性很强的假设,假设特征条件独立,但朴素贝叶斯算法简单,快速,具备较小的出错率。
在朴素贝叶斯的应用中,主要研究了电子邮件过滤以及文本分类研究。
4)K最近邻分类算法(KNN)
分类思想比较简单,从训练样本中找出K个与其最相近的样本,而后看这k个样本中哪一个类别的样本多,则待断定的值(或说抽样)就属于这个类别。
缺点:
1)K值须要预先设定,而不能自适应
2)当样本不平衡时,如一个类的样本容量很大,而其余类样本容量很小时,有可能致使当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。
该算法在分类时有个重要的不足是,当样本不平衡时,即:一个类的样本容量很大,而其余类样本数量很小时,颇有可能致使当输入一个未知样本时,该样本的K个邻居中大数量类的样本占多数。 可是这类样本并不接近目标样本,而数量小的这类样本很靠近目标样本。这个时候,咱们有理由认为该位置样本属于数量小的样本所属的一类,可是,KNN却不关心这个问题,它只关心哪类样本的数量最多,而不去把距离远近考虑在内,所以,咱们能够采用权值的方法来改进。和该样本距离小的邻居权值大,和该样本距离大的邻居权值则相对较小,由此,将距离远近的因素也考虑在内,避免因一个样本过大致使误判的状况
该算法适用于对样本容量比较大的类域进行自动分类。
5)EM最大指望算法
EM算法是基于模型的聚类方法,是在几率模型中寻找参数最大似然估计的算法,其中几率模型依赖于没法观测的隐藏变量。E步估计隐含变量,M步估计其余参数,交替将极值推向最大。
EM算法比K-means算法计算复杂,收敛也较慢,不适于大规模数据集和高维数据,但比K-means算法计算结果稳定、准确。EM常常用在机器学习和计算机视觉的数据集聚(Data Clustering)领域。
6)PageRank算法
是google的页面排序算法,是基于从许多优质的网页连接过来的网页,一定仍是优质网页的回归关系,来断定全部网页的重要性。(也就是说,一我的有着越多牛X朋友的人,他是牛X的几率就越大。)
优势:
彻底独立于查询,只依赖于网页连接结构,能够离线计算。
缺点:
1)PageRank算法忽略了网页搜索的时效性。
2)旧网页排序很高,存在时间长,积累了大量的in-links,拥有最新资讯的新网页排名却很低,由于它们几乎没有in-links。
7)AdaBoost
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不一样的分类器(弱分类器),而后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法自己是经过改变数据分布来实现的,它根据每次训练集之中每一个样本的分类是否正确,以及上次的整体分类的准确率,来肯定每一个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练获得的分类器最后融合起来,做为最后的决策分类器。
整个过程以下所示:
1. 先经过对N个训练样本的学习获得第一个弱分类器;
2. 将分错的样本和其余的新数据一块儿构成一个新的N个的训练样本,经过对这个样本的学习获得第二个弱分类器;
3. 将和都分错了的样本加上其余的新样本构成另外一个新的N个的训练样本,经过对这个样本的学习获得第三个弱分类器;
4. 如此反复,最终获得通过提高的强分类器。
目前AdaBoost算法普遍的应用于人脸检测、目标识别等领域。
8)Apriori算法
Apriori算法是一种挖掘关联规则的算法,用于挖掘其内含的、未知的却又实际存在的数据关系,其核心是基于两阶段频集思想的递推算法 。
Apriori算法分为两个阶段:
1)寻找频繁项集
2)由频繁项集找关联规则
算法缺点:
1) 在每一步产生侯选项目集时循环产生的组合过多,没有排除不该该参与组合的元素;
2) 每次计算项集的支持度时,都对数据库中 的所有记录进行了一遍扫描比较,须要很大的I/O负载。
9)SVM支持向量机
支持向量机是一种基于分类边界的方法。其基本原理是(以二维数据为例):若是训练数据分布在二维平面上的点,它们按照其分类汇集在不一样的区域。基于分类边界的分类算法的目标是,经过训练,找到这些分类之间的边界(直线的――称为线性划分,曲线的――称为非线性划分)。对于多维数据(如N维),能够将它们视为N维空间中的点,而分类边界就是N维空间中的面,称为超面(超面比N维空间少一维)。线性分类器使用超平面类型的边界,非线性分类器使用超曲面。
支持向量机的原理是将低维空间的点映射到高维空间,使它们成为线性可分,再使用线性划分的原理来判断分类边界。在高维空间中是一种线性划分,而在原有的数据空间中,是一种非线性划分。
SVM在解决小样本、非线性及高维模式识别问题中表现出许多特有的优点,并可以推广应用到函数拟合等其余机器学习问题中。
10)CART分类与回归树
是一种决策树分类方法,采用基于最小距离的基尼指数估计函数,用来决定由该子数
据集生成的决策树的拓展形。若是目标变量是标称的,称为分类树;若是目标变量是连续的,称为回归树。分类树是使用树结构算法将数据分红离散类的方法。
优势
1)很是灵活,能够容许有部分错分红本,还可指定先验几率分布,可以使用自动的成本复杂性剪枝来获得概括性更强的树。
2)在面对诸如存在缺失值、变量数多等问题时CART 显得很是稳健。