决策树 一、 决策树优点
1、决策树便于理解和解释,可以可视化剖析,容易提取出规则。
2、可以同时处理标称型和数值型数据。
3、测试数据集时,运行速率比较快。
4、决策树可以挺好的扩充到小型数据库中,同时它的大小独立于数据库大小。
二、决策树缺点
1、对缺位数据处理比较困难。
2、容易出现过拟合问题。
3、忽略数据集中属性的互相关联。
4、ID3算法估算信息增益时结果偏向数值比较多的特点。
三、改进举措
1、对决策树进行摘心。可以采用交叉验证法和加入正则化的技巧。
2、使用基于决策树的combination算法,如bagging算法,randomforest算法,可以解决过拟合的问题
三、应用领域
企业管理实践,企业投资决策,由于决策树挺好的剖析能力,在决策过程应用较多。
KNN算法 一、KNN算法的优点
1、KNN是一种在线技术,新数据可以直接加入数据集而毋须进行重新训练
2、KNN理论简单,容易实现
二、KNN算法的缺点
1、对于样本容量大的数据集估算量比较大。
2、样本不平衡时,预测误差比较大。如:某一类的样本比较少,而其它类样本比较多。
3、KNN每一次分类就会重新进行一次全局运算。
4、k值大小的选择。
三、KNN算法应用领域
文本分类、模式识别、聚类分析,多分类领域
支持向量机(SVM) 一、 SVM优点
1、解决小样本下机器学习问题。
2、解决非线性问题。
3、无局部极小值问题。(相对于神经网路等算法)
4、可以挺好的处理高维数据集。
5、泛化能力比较强。
二、SVM缺点
1、对于核函数的高维映射解释力不强,尤其是径向基函数。
2、对缺位数据敏感。
三、SVM应用领域
文本分类、图像辨识、主要二分类领域
AdaBoost算法 一、 AdaBoost算法优点
1、很好的借助了弱分类器进行级联。
2、可以将不同的分类算法作为弱分类器。
3、AdaBoost具有很高的精度。
4、相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每位分类器的权重。
二、Adaboost算法缺点
1、AdaBoost迭代次数也就是弱分类器数量不太好设定,可以使用交叉验证来进行确定。
2、数据不平衡造成分类精度升高。
3、训练比较历时,每次重新选择当前分类器最好切分点。
三、AdaBoost应用领域
模式辨识、计算机视觉领域,用于二分类和多分类场景
朴素贝叶斯算法 一、 朴素贝叶斯算法优点
1、对大数目训练和查询时具有较高的速率。即使使用超大规模的训练集,针对每位项目一般也只会有相对较少的特点数,并且对项目的训练和分类也仅仅是特点机率的物理运算而已。
2、支持增量式运算。即可以实时的对新增的样本进行训练。
3、朴素贝叶斯对结果解释容易理解。
二、朴素贝叶斯缺点
1、由于使用了样本属性独立性的假定,所以假如样本属性有关联时其疗效不好。
三、朴素贝叶斯应用领域
文本分类、欺诈检查中使用较多
Logistic回归算法 一、logistic回归优点
1、计算代价不高,易于理解和实现
二、logistic回归缺点
1、容易形成欠拟合。
2、分类精度不高。
三、logistic回归应用领域
用于二分类领域,可以得出概率值,适用于按照分类机率排行的领域,如搜索排名等。
Logistic回归的扩充softmax可以应用于多分类领域,如手写字辨识等。
人工神经网络 一、 神经网路优点
1、分类准确度高,学习能力极强。
2、对噪音数据鲁棒性和容错性较强。
3、有联想能力,能迫近任意非线性关系。
二、神经网路缺点
1、神经网路参数较多,权值和阀值。
2、黑盒过程,不能观察中间结果。
3、学习过程比较长,有可能身陷局部极小值。
三、人工神经网络应用领域
目前深度神经网路早已应用与计算机视觉,自然语言处理,语音辨识等领域并取得挺好的疗效。
===============================================================================================
原文:
机器学习方法特别多,也很成熟。下面我挑几个说。
首先是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是比较好的优化方式”才对。
好了,说了这么多了,我有点晕了,还有一些方式过几天再写。总的来说,机器学习方法是借助现有数据作为经验让机器学习,以便指导之后再度遇到的决策。目前来说,对于大数据分类,还是要依靠分布式处理技术和云技术才有可能完成,但一旦训练成功,分类的效率还是很可观的,这就好比人年纪越大看待问题越精准的道理是一样的。这八个月里,从最初的理解到一步步实现;从需求的逻辑推论到实现的方式选择,每天都是辛苦的,但每晚也都是紧张剌激的。我每晚都在想学了这个之后可以实现什么样的分类,其实想想都是让人激动的。当初,我逃避做程序员,主要缘由就是我不喜欢做早已晓得结果的事情,因为那样的工作没有哪些期盼感;而如今,我可以借助数据剖析得到我想像不到的事情,这除了满足了我的好奇感,也让我能在工作中乐在其中。也许,我距离社会的技术需求还有很远的距离,但我对自己充满信心,因为,我不倍感沉闷,不倍感迷茫,虽然有些力不从心,但心态坚定。
===================================================
简述机器学习十大算法的每位算法的核心思想、工作原理、适用情况及优缺点等。
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个邻居中大容量类的样本占多数。
该算法适用于对样本容量比较大的类域进行手动分类。
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 显得十分稳健。