学习了一个学期机器学习算法,从什么都不懂到对十个机器学习算法有一定的了解,下面总结一下十大机器学习算法,从算法的概念、原理、优点、缺点、应用等方面来总结,如果有错误的地方,欢迎指出。
这里续之前没写完的:
6、K近邻算法
给一个新的数据时,离它最近的 k 个点中,哪个类别多,这个数据就属于哪一类。
例子:要区分“猫”和“狗”,通过“claws”和“sound”两个feature来判断的话,圆形和三角形是已知分类的了,那么这个“star”代表的是哪一类呢?
k=3时,这三条线链接的点就是最近的三个点,那么圆形多一些,所以这个star就是属于猫:
K均值算法
先要将一组数据,分为三类,粉色数值大,黄色数值小 。最开始先初始化,这里面选了最简单的 3,2,1 作为各类的初始值 。剩下的数据里,每个都与三个初始值计算距离,然后归类到离它最近的初始值所在类别。
KNN算法的优点
理论成熟,思想简单,既可以用来做分类也可以用来做回归;
可用于非线性分类;
训练时间复杂度为O(n);
对数据没有假设,准确度高,对outlier不敏感;
缺点
计算量大;需要大量的内存;
样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
7、集成学习--Boosting算法
集成学习的主要是利用一定的手段学习出多个分类器,而且这多个分类器要求是弱分类器,然后将多个分类器进行组合公共预测。核心就是如何训练处多个弱分类器以及如何将这些弱分类器进行组合。
集成学习中弱分类器选择
一般采用弱分类器的原因在于将误差进行均衡,因为一旦某个分类器太强了就会造成后面的结果受其影响太大,严重的会导致后面的分类器无法进行分类。常用的弱分类器可以采用误差率小于0.5的,比如说逻辑回归、SVM、神经网络。
多个分类器的生成
可以采用随机选取数据进行分类器的训练,也可以采用不断的调整错误分类的训练数据的权重生成新的分类器。
多个弱分类区如何组合
基本分类器之间的整合方式,一般有简单多数投票、权重投票,贝叶斯投票,基于D-S证据理论的整合,基于不同的特征子集的整合。
Boosting算法
Boosting根据错误率来取样,用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数。
它是一种框架算法,主要是通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器。
可以用来提高其他弱分类算法的识别率,也就是将其他的弱分类算法作为基分类算法放于Boosting 框架中,通过Boosting框架对训练样本集的操作,得到不同的训练样本子集,用该样本子集去训练生成基分类器;
特点:每一次迭代时训练集的选择与前面各轮的学习结果有关,而且每次是通过更新各个样本权重的方式来改变数据分布。总结起来如下:
1.分步学习每个弱分类器,最终的强分类器由分步产生的分类器组合而成
2.根据每步学习到的分类器去改变各个样本的权重(被错分的样本权重加大,反之减小)
系数计算公式为:
Adaboost的算法流程:
假设训练数据集为T={(X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4),(X5,Y5)} 其中Yi={-1,1}
1、初始化训练数据的分布
训练数据的权重分布为D={W11,W12,W13,W14,W15},其中W1i=1/N。即平均分配。
2、选择基本分类器
这里选择最简单的线性分类器y=aX+b ,分类器选定之后,最小化分类误差可以求得参数。
3、计算分类器的系数和更新数据权重
8、随机森林(Random Forest)算法
随机森林是一种基于Bagging的集成学习方法,可以用来做分类、回归等问题。在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。
bagging的算法过程如下:
从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)
对于分类问题:由投票表决产生分类结果;对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)
* Bagging + 决策树 = 随机森林 (个人认为可以这样理解)
通常将随机森林作为一个黑盒子,输入数据然后给出了预测结果,无需担心模型是如何计算的。这个黑盒子本身有几个我们可以摆弄的杠杆。 每个杠杆都能在一定程度上影响模型的性能或资源 -- 时间平衡。通过调整的杠杆,同时建立一个随机林模型。
随机森林的构建过程
1)从原始训练集中使用Bootstraping方法随机有放回采样选出m个样本,共进行n_tree次采样,生成n_tree个训练集
2)对于n_tree个训练集,我们分别训练n_tree个决策树模型
3)对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂
4)每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
5)将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果。
随机森林有许多优点:
具有极高的准确率
随机性的引入,使得随机森林不容易过拟合
随机性的引入,使得随机森林有很好的抗噪声能力
能处理很高维度的数据,并且不用做特征选择
既能处理离散型数据,也能处理连续型数据,数据集无需规范化
训练速度快,可以得到变量重要性排序
容易实现并行化
随机森林的缺点:
当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大
随机森林模型还有许多不好解释的地方,有点算个黑盒模型
9、K-Means算法
K-Means算法是无监督的聚类算法,聚类效果不错。K-Means算法对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。
K-Means算法的一些要点:
1)对于K-Means算法,首先要注意的是k值的选择,一般来说,我们会根据对数据的先验经验选择一个合适的k值,如果没有什么先验知识,则可以通过交叉验证选择一个合适的k值。
2)在确定了k的个数后,我们需要选择k个初始化的质心,就像上图b中的随机质心。由于我们是启发式方法,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心,最好这些质心不能太近。
传统的K-Means算法流程:
输入是样本集,聚类的簇树k,最大迭代次数N
输出是簇划分
1) 从数据集D中随机选择k个样本作为初始的k个质心向量:
2)对于n=1,2,...,N
a) 将簇划分C初始化为
b) 对于i=1,2...m,计算样本和各个质心向量的距离:,将标记最小的为所对应的类别。此时更新
c) 对于j=1,2,...,k,对中所有的样本点重新计算新的质心
e) 如果所有的k个质心向量都没有发生变化,则转到步骤3)
3) 输出簇划分
K-means算法优点:
(1)、是解决聚类问题的一种经典算法,简单、快速
(2)、对处理大数据集,该算法保持可伸缩性和高效性
(3)、当簇接近高斯分布时,它的效果较好。
K-means算法缺点:
(1)、在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用;
(2)、在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适;
(3)、在 K-means 算法中,首先需要根据初始聚类中心来确定一个初始划分,然后对初始划分进行优化。这个初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果;
(4)、若簇中含有异常点,将导致均值偏离严重(即:对噪声和孤立点数据敏感);
(5)、不适用于发现非凸形状的簇或者大小差别很大的簇。
10、降维算法
降维是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。大部分降维算法处理向量表达的数据,也有一些降维算法处理高阶张量表达的数据。
降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。f可能是显式的或隐式的、线性的或非线性的。
降维方法有很多,而且分为线性降维和非线性降维。
线性降维--奇异值分解(SVD)
SVD算法用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。
在线性代数中我们学过矩阵(在这里的矩阵必须是n×n的方阵)的特征分解,矩阵A和特征值、特征向量之间的关系如下
将A矩阵做特征分解,特征向量Q 是一组正交向量,具体表达式如下(由于公式格式,导致要截图了)
在并行化计算下,奇异值分解是非常快的。但是奇异值分解出的矩阵解释性不强,有点黑盒子的感觉,不过还是在很多领域有着使用。
算法应用:将SVD用于推荐系统,推荐结果比较准确,模型的拓展性也很强,能够应用于各种场景。但是SVD模型的可解释性很差,其中的隐性因子无法对应与现实生活中的具体概念,模型的训练速度仍然有待提高。
希望对你有帮助。
文章来源: guo-pu.blog.csdn.net,作者:一颗小树x,版权归原作者所有,如需转载,请联系作者。
原文链接:guo-pu.blog.csdn.net/article/details/102919743