分类问题的算法总结

目录

一、最近邻算法(KNN算法)

算法原理

算法的优缺点

关于K的选择

二、决策树

算法原理

算法的优缺点

关于剪枝

扩展内容

三、朴素贝叶斯

算法原理

算法的优缺点

扩展内容

四、支持向量机

算法原理

算法的优缺点

五、神经网络分类

算法步骤

算法优缺点


一、最近邻算法(KNN算法)

算法原理

用一句话来解释 KNN 算法原理,那就是找到 K 个与新数据最近的样本,取样本中最多的一个类别作为新数据的类别。

这里面我们提到了一个距离最近,关于距离该怎么计算呢?最常见的一个计算方法就是欧式距离,即两点之间的连线,如果放在地图上就是两个房子的直线距离。当然除了欧式距离,还有很多距离计算的方 式,比如曼哈顿距离、切比雪夫距离等。

算法的优缺点

优点:简单易实现、对于边界不规则的数据效果好

缺点:只适合小数据集、数据不平衡效果不好、必须要做数据标准化、不适合特征维度太多的数据

关于K的选择

当 K 越小的时候容易过拟合,因为结果的判断与某一个点强相关。而 K越大的时候容易欠拟合

二、决策树

算法原理

在已知的条件中,选取一个条件作为树根,也就是作为第一个决策条件,,然后再看是否还需要其他判断条件。如果需要的话,继续构建一个分支来判断第二个条件,以此 类推,直到能够推出一个结果,这个分支就结束了。

这就是决策树最初的一个思路。但是这里有一个问题,我想你可能也会想到,那就是该如何选择一个特征作为根节点?下一次决策又该选取哪个特征作为节点?决策树算法使用了一种称作信息增益的方法来衡量一个特征和特征之间的重要性,信息增益越大表明这个特征越重要,那么就优先对这个特征进行决策。

在一种理想的情况下,我们构建的决策树上的每一个叶子节点都是一个纯粹的分类,也就是通过这条路 径进入到这个叶子节点的所有数据都是同一种类别,但是这需要反复回溯修改非叶子节点的判定条件, 而且要划分更多的分支来进行处理,所以实际上决策树实现的时候都采用了贪心算法,来寻找一个最近的最优解,而不是全局的最优解。

算法的优缺点

分类问题的算法总结_第1张图片

优点

  • 非常直观,可解释极强。 在生成的决策树上,每个节点都有明确的判断分支条件,所以非常容易 看到为什么要这样处理,比起神经网络模型的黑盒处理,高解释性的模型非常受金融保险行业的欢 迎。在后面的动手环节,我们能看到训练完成的决策树可以直接输出出来,以图形化的方式展示给 我们生成的决策树每一个节点的判断条件是什么样子的。
  • 预测速度比较快。 由于最终生成的模型是一个树形结构,对于一条新数据的预测,只需要按照条 件在每一个节点进行判定就可以。通常来说,树形结构都有助于提升运算速度。
  • 既可以处理离散值也可以处理连续值,还可以处理缺失值

缺点

  • 容易过拟合。 试想在极端的情况下,我们根据样本生成了一个最完美的树,那么样本中出现的每 一个值都会有一条路径来拟合,所以如果样本中存在一些问题数据,或者样本与测试数据存在一定 的差距时,就会看出泛化性能不好,出现了过拟合的现象。
  • 需要处理样本不均衡的问题。 如果样本不均衡,某些特征的样本比例过大,最终的模型结果将会 更偏向这些特征。
  • 样本的变化会引发树结构巨变

关于剪枝

上面提到的一个问题就是决策树容易过拟合,那么我们需要使用剪枝的方式来使得模型的泛化能力更 好,所以剪枝可以理解为简化我们的决策树,去掉不必要的节点路径以提高泛化能力。剪枝的方法主要 有预剪枝和后剪枝两种方式。

  • 预剪枝: 在决策树构建之初就设定一个阈值,当分裂节点的熵阈值小于设定值的时候就不再进行 分裂了;然而这种方法的实际效果并不是很好,因为谁也没办法预料到我们设定的恰好是我们想要 的。
  • 后剪枝: 后剪枝方法就是在我们的决策树已经构建完成以后,再根据设定的条件来判断是否要合 并一些中间节点,使用叶子节点来代替。在实际的情况下,通常都是采用后剪枝的方案。

分类问题的算法总结_第2张图片

 

扩展内容

  • 随机森林:为了更好地解决泛化及树结构变动~等~问题,从决策树演进出来随机森林算法。根据 我们前面讲的模型集成方法,随机森林就是使用了 bagging 方案构建了多棵决策树,然后对所有树的结果来进行平均计算以获得最终的结果。
  • GBDT:在随机森林的基础上,研究者又提出了梯度提升决策树算法(Gradient Boosting Decision Tree,GBDT),GBDT 是基于 boosting 的策略。与随机森林一样的是,GBDT 也会构 建多棵决策树;但不同的是,GBDT 构建的多棵树之间是有联系的,每个分类器在上一轮分类器的残差基础上进行训练。
  • XGBoost:一个非常火热的模型,有 “机器学习大杀器” 之称,在很多比赛中都获得了非常好的结 果。但实际上 XGBoost 不算是一个算法,而是对 GBDT 的一种工程实现,它优化了 GBDT 里面的 求解过程,并加入了很多工程上的优化项目,使得数据处理、运算速度等环节都有了很大的提升。

三、朴素贝叶斯

算法原理

考虑我们分类所用到的特征和分类结果,朴素贝叶斯有一个假设前提,那就是所有的条件对结果都是独立发生作用的。

所以根据这个思想,出现了朴素贝叶斯概率公式:

分类问题的算法总结_第3张图片

 

算法的优缺点

优点

  • 逻辑清晰简单、易于实现,适合大规模数据。 根据算法的原理,只要我们把样本中所有属性相关 的概率值都计算出来,然后分门别类地存储好,就获得了我们的朴素贝叶斯模型。
  • 运算开销小。 根据上一条我们可以得知,所有预测需要用到的概率都已经准备好,当新数据来了 之后,只需要获取对应的概率值,并进行简单的运算就能获得结果。
  • 对于噪声点和无关属性比较健壮。 噪声点和无关属性对算法影响较小,在很多邮件服务中仍然一 直沿用这个方法进行垃圾邮件过滤。
  • 预测过程快。 由于所有需要用到的属性相关概率都已经计算出来了,在新数据到来需要预测的时 候,只需要把对应的一些概率值取出来进行计算就可以获得结果,所用到的时间和空间都很小。

缺点

由于做了 “各个属性之间是独立的” 这个假设,同样该算法也暴露了缺点。因为在实际应用中,属性之间 完全独立的情况是很少出现的,如果属性相关度较大,那么分类的效果就会变差。所以在具体应用的时 候要好好考虑特征之间的相互独立性,再决定是否要使用该算法,比如,维度太多的数据可能就不太适 合,因为在维度很多的情况下,不同的维度之间越有可能存在联合的情况,而不是相互独立的,那么模 型的效果就会变差。

扩展内容

前面我们讲到,朴素贝叶斯是基于属性之间的独立性假设而进行构建的,但是实际上很多时候这种假设 存在一定的局限,为了打破这些局限,于是衍生出了一些方法,下面我列举两个:

  • 半朴素贝叶斯 ODE(One Dependent Estimator):为了解决朴素贝叶斯中属性独立性假设在实 际生活中不太适用的问题,新的研究方案尝试建立一些属性间的联系,假定属性有一定的相关性, 从而产生的算法被称为半朴素贝叶斯方法。这里说的 ODE 就是其中的一种,在 ODE 中,假设每 个属性最多依赖于一个其他的属性,这样修正了一些有依赖的情况,同时又没有增加太多的计算复 杂性。
  • AODE(Averaged One Dependent Estimator):AODE 其实是一种集成学习的方法。在 ODE 的 基础上,使用 bagging 集成学习的思路,训练多个模型,其中每个模型都设置一种属性作为其他 所有属性的关联属性,最后使用这多个模型的结果平均数值作为最终结果。

四、支持向量机

算法原理

什么是支持向量?

假设我们已经找到了一条线(不一定是最优的那条)可以分割红豆和绿豆,红豆和绿豆中距离这条线最 近的几个样本点就被称为支持向量(Support Vector),这些点到这条线的距离称为间隔,SVM 的思路就是要找到有最大间隔的那条线(超平面)。在决定最佳超平面时只有支持向量起作用,而其他数据 点并不起作用,如果移动非支持向量,甚至删除非支持向量都不会对最优超平面产生任何影响。即支持向量对模型起着决定性的作用,这也是 “支持向量机” 名称的由来。

处理不清晰的边界 我们通过划分软间隔和硬间隔。

处理非线性可分 我们将不可划分的样本映射到高维空间中。SVM中借助“核函数”来实现映射到高维的操作。

算法的优缺点

优点

  • 有严格的数学理论支持,可解释性强。 SVM 所获得的结果是全局最优解而不是局部最优解,很多 算法为了降低复杂性只给出了一个局部最优解,比如我们前面提到的 “决策树算法”,而 SVM 的最 优化求解所获得的一定是全局最优解。
  • 算法的鲁棒性很好。 由于计算主要依赖于关键的支持向量,所以只要支持向量没有变化,样本发 生一些变化对算法没有什么影响。

缺点

  • 训练所需要的资源很大。 由于运算量与存储量都很高,SVM 训练的开销也是巨大的,因此支持向 量机只适合比较小的样本量,比如几千条数据,当样本量太大时训练资源开销过大。
  • 只能处理二分类问题。 经典的 SVM 算法十分简洁,正如上面的例子一样,画一条线分割两个类 别,如果需要处理多类别的分类问题,需要使用一些组合手段。
  • 模型预测时,预测时间与支持向量的个数成正比。 当支持向量的数量较大时,预测计算复杂度较 高。因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。

五、神经网络分类

分类问题的算法总结_第4张图片

分类问题的算法总结_第5张图片

 

算法步骤

第一步,我们要预先设定一种网络结构和激活函数,这一步其实很困难,因为网络结构可以无限拓展, 要知道什么样的结构才符合我们的问题需要做大量的试验。

第二步,初始化模型中的权重。模型中的每一个连接都会有一个权重,在初始化的时候可以都随机给予 一个值。

第三步,就是根据输入数据和权重来预测结果。由于最开始的参数都是随机设置的,所以获得的结果肯 定与真实的结果差距比较大,所以在这里要计算一个误差,误差反映了预测结果和真实结果的差距有多 大。

最后一步,模型要调节权重。这里我们可以参与的就是需要设置一个 “学习率”,这个学习率是针对误差 的,每次获得误差后,连接上的权重都会按照误差的这个比率来进行调整,从而期望在下次计算时获得 一个较小的误差。经过若干次循环这个过程,我们可以选择达到一个比较低的损失值的时候停止并输出 模型,也可以选择一个确定的循环轮次来结束。

算法优缺点

优点

经过上面的介绍,我不知道你是否了解到了关于神经网络的一个巨大的优点,那就是可以像搭积木一样不断地扩展模型的边界,而对于内部具体的运行不需要加以太多的干涉。通过不同的搭建手段,神经网络几乎可以去模拟任何算法的结果,只要数据量够多,构建的模型够完善,最终都会有一个很好的结果。

缺点

然而神经网络的优点反过来想,也变成了它的缺点。 首先神经网络缺乏可解释性,它的内部纷繁复杂, 就像一个神奇的黑匣子,你告诉它数据,然后它告诉你结果,至于为什么会这样,它不做任何解释。所 以在很多对解释性要求比较高的场景,比如信用评级、金融风控等情况下没办法使用。 其次,神经网络非常消耗资源,不管是数据、网络节点,还是硬件设备,要构建一套完美的神经网络模 型开销是非常大的,不光训练时间长,还需要耗费很大的人力物力。

你可能感兴趣的:(数学建模,算法,分类,机器学习,决策树,深度学习)