常见机器学习算法一、最近邻算法(KNN)1.概述KNN的主要过程如下:Step1:计算训练样本和测试样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);Step2:对上面所有的距离值进行排序;Step3:选前k个最小距离的样本;Step4:根据这k个样本的标签进行投票,得到最后的分类类别;如何选择一个最佳的K值,这取决于数据。一般情况下,在分类时较大的K值能够减小噪声的影响。但会使类别之间的界限变得模糊。一个较好的K值可通过各种启发式技术来获取,比如,交叉验证。另外噪声和非相关性特征向量的存在会使K近邻算法的准确性减小。近邻算法具有较强的一致性结果。随着数据趋于无限,算法保证错误率不会超过贝叶斯算法错误率的两倍。对于一些好的K值,K近邻保证错误率不会超过贝叶斯理论误差率。2.优点(1)理论成熟,思想简单,既可以用来做分类也可以用来做回归;(2)可用于非线性分类;(3)训练时间复杂度为O(n);(4)对数据没有假设,准确度高,对outlier不敏感;(5)KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练3.缺点(1)对于样本容量大的数据集计算量比较大。(2)样本不平衡时,预测偏差比较大。如:某一类的样本比较少,而其它类样本比较多。(3)KNN每一次分类都会重新进行一次全局运算。(4)k值大小的选择。(5)需要大量的内存;4.应用领域文本分类、模式识别、聚类分析,多分类领域二、朴素贝叶斯(NaïveBayes,NB)1.概述朴素贝叶斯属于生成式模型(关于生成模型和判别式模型,主要还是在于是否是要求联合分布),非常简单,你只是做了一堆计数。如果注有条件独立性假设(一个比较严格的条件),朴素贝叶斯分类器的收敛速度将快于判别模型,如逻辑回归,所以你只需要较少的训练数据即可。即使NB条件独立假设不成立,NB分类器在实践中仍然表现的很出色。它的主要缺点是它不能学习特征间的相互作用,用mRMR中R来讲,就是特征冗余。引用一个比较经典的例子,比如,虽然你喜欢BradPitt和TomCruise的电影,但是它不能学习出你不喜欢他们在一起演的电影。2.优点:(1)朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率;(2)对小规模的数据表现很好,能个处理多分类任务;(3)对缺失数据不太敏感,算法也比较简单,常用于文本分类;(4)对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已;(5)支持增量式运算。即可以实时的对新增的样本进行训练;(6)朴素贝叶斯对结果解释容易理解。3.缺点:(1)需要计算先验概率;(2)分类决策存在错误率;(3)对输入数据的表达形式很敏感。(4)由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好。4.应用领域文本分类、欺诈检测中使用较多三、决策树(DecisionTree)1.概述决策树中很重要的一点就是选择一个属性进行分枝,因此要注意一下信息增益的计算公式,并深入理解它。信息熵的计算公式如下:其中的n代表有n个分类类别(比如假设是2类问题,那么n=2)。分别计算这2类样本在总样本中出现的概率p1和p2,这样就可以计算出未选中属性分枝前的信息熵。现在选中一个属性xixi用来进行分枝,此时分枝规则是:如果xi=vxi=v的话,将样本分到树的一个分支;如果不相等则进入另一个分支。很显然,分支中的样本很有可能包括2个类别,分别计算这2个分支的熵H1和H2,计算出分枝后的总信息熵H’=p1H1+p2H2,则此时的信息增益ΔH=H-H’。以信息增益为原则,把所有的属性都测试一边,选择一个使增益最大的属性作为本次分枝属性。2.优点:(1)易于理解和解释,可以可视化分析,容易提取出规则。(2)在相对短的时间内能够对大型数据源做出可行且效果良好的结果。(3)可以同时处理标称型和数值型数据。(4)比较适合处理有缺失属性的样本;(5)能够处理不相关的特征;(6)它可以毫无压力地处理特征间的交互关系并且是非参数化的,因此你不必担心异常值或者数据是否线性可分(7)决策树可以很好的扩展到大型数据库中,同时它的大小独立于数据库大小。3、缺点(1)对缺失数据处理比较困难。(2)容易出现过拟合问题,但这也就是诸如随机森林RF(或提升树boostedtree)之类的集成方法的切入点。另外,随机森林经常是很多分类问题的赢家(通常比支持向量机好上那么一丁点),它训练快速并且可调,同时你无须担心要像支持向量机那样调一大堆参数,所以在以前都一直很受欢迎。(3)忽略数据集中属性的相互关联。(4)ID3算法计算信息增益时结果偏向数值比较多的特征(随机森林可以很大程度上减少过拟合);(5)不支持在线学习,于是在新样本到来后,决策树需要全部重建。改进措施(1)对决策树进行剪枝。可以采用交叉验证法和加入正则化的方法。(2)使用基于决策树的Combination算法,如Bagging算法,RandomForest算法,可以解决过拟合的问题4、应用领域企业管理实践,企业投资决策,由于决策树很好的分析能力,在决策过程应用较多。四、逻辑斯蒂回归(LogisticRegression)1.概述属于判别式模型,有很多正则化模型的方法(L0,L1,L2,etc),而且你不必像在用朴素贝叶斯那样担心你的特征是否相关。与决策树与SVM机相比,你还会得到一个不错的概率解释,你甚至可以轻松地利用新数据来更新模型(使用在线梯度下降算法,onlinegradientdescent)。如果你需要一个概率架构(比如,简单地调节分类阈值,指明不确定性,或者是要获得置信区间),或者你希望以后将更多的训练数据快速整合到模型中去,那么使用它吧。Sigmoid函数:2.优点:(1)实现简单,广泛的应用于工业问题上;(2)分类时计算量非常小,速度很快,存储资源低;(3)便利的观测样本概率分数;(4)对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;3.缺点:(1)特征空间很大时,逻辑回归的性能不是很好;(2)容易欠拟合,分类精度不高。(3)不能很好地处理大量多类特征或变量;(4)只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分(对于非线性特征,需要进行转换)4.应用领域用于二分类领域,可以得出概率值,适用于根据分类概率排名的领域,如搜索排名等。Logistic回归的扩展softmax可以应用于多分类领域,如手写字识别等。五、SVM支持向量机1.概述高准确率,为避免过拟合提供了很好的理论保证,而且就算数据在原特征空间线性不可分,只要给个合适的核函数,它就能运行得很好。在动辄超高维的文本分类问题中特别受欢迎。可惜内存消耗大,难以解释,运行和调参也有些烦人,而随机森林却刚好避开了这些缺点,比较实用。2.优点(1)可以解决高维问题,即大型特征空间;(2)能够处理非线性特征的相互作用;(3)解决小样本下机器学习问题。(4)无需依赖整个数据;(5)泛化能力比较强。(6)无局部极小值问题。(相对于神经网络等算法)3.缺点(1)当观测样本很多时,效率并不是很高(大样本反而不合适)(2)对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数;(3)对缺失数据敏感;对于核的选择也是有技巧的(libsvm中自带了四种核函数:线性核、多项式核、RBF以及sigmoid核):第一,如果样本数量小于特征数,没必要选择非线性核,使用线性核就可以;第二,如果样本数量大于特征数目,这时可以使用非线性核,将样本映射到更高维度,一般可以得到更好的结果;第三,如果样本数目和特征数目相等,该情况可以使用非线性核,原理和第二种一样。对于第一种情况,也可以先对数据进行降维,然后使用非线性核,这也是一种方法。4.SVM应用领域文本分类、图像识别、主要二分类领域六、Adaboost1.概述Adaboost是一种加和模型,每个模型都是基于上一次模型的错误率来建立的,过分关注分错的样本,而对正确分类的样本减少关注度,逐次迭代之后,可以得到一个相对较好的模型。是一种典型的boosting算法。2.优点(1)具有很高精度(2)简单,不用做特征筛选。(3)很好的利用了弱分类器进行级联,可以将不同的分类算法作为弱分类器,Adaboost算法提供的是框架;(4)当使用简单分类器时,计算出的结果是可以理解的,并且弱分类器的构造极其简单;(5)不容易发生overfitting。(6)相对于bagging算法和RandomForest算法,AdaBoost充分考虑的每个分类器的权重。3.缺点:对outlier比较敏感AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定。数据不平衡导致分类精度下降。训练比较耗时,每次重新选择当前分类器最好切分点。4.应用领域模式识别、计算机视觉领域,用于二分类和多分类场景