目录
一、最近邻算法(KNN算法)
算法原理
算法的优缺点
关于K的选择
二、决策树
算法原理
算法的优缺点
关于剪枝
扩展内容
三、朴素贝叶斯
算法原理
算法的优缺点
扩展内容
四、支持向量机
算法原理
算法的优缺点
五、神经网络分类
算法步骤
算法优缺点
用一句话来解释 KNN 算法原理,那就是找到 K 个与新数据最近的样本,取样本中最多的一个类别作为新数据的类别。
这里面我们提到了一个距离最近,关于距离该怎么计算呢?最常见的一个计算方法就是欧式距离,即两点之间的连线,如果放在地图上就是两个房子的直线距离。当然除了欧式距离,还有很多距离计算的方 式,比如曼哈顿距离、切比雪夫距离等。
优点:简单易实现、对于边界不规则的数据效果好
缺点:只适合小数据集、数据不平衡效果不好、必须要做数据标准化、不适合特征维度太多的数据
当 K 越小的时候容易过拟合,因为结果的判断与某一个点强相关。而 K越大的时候容易欠拟合
在已知的条件中,选取一个条件作为树根,也就是作为第一个决策条件,,然后再看是否还需要其他判断条件。如果需要的话,继续构建一个分支来判断第二个条件,以此 类推,直到能够推出一个结果,这个分支就结束了。
这就是决策树最初的一个思路。但是这里有一个问题,我想你可能也会想到,那就是该如何选择一个特征作为根节点?下一次决策又该选取哪个特征作为节点?决策树算法使用了一种称作信息增益的方法来衡量一个特征和特征之间的重要性,信息增益越大表明这个特征越重要,那么就优先对这个特征进行决策。
在一种理想的情况下,我们构建的决策树上的每一个叶子节点都是一个纯粹的分类,也就是通过这条路 径进入到这个叶子节点的所有数据都是同一种类别,但是这需要反复回溯修改非叶子节点的判定条件, 而且要划分更多的分支来进行处理,所以实际上决策树实现的时候都采用了贪心算法,来寻找一个最近的最优解,而不是全局的最优解。
优点
缺点
上面提到的一个问题就是决策树容易过拟合,那么我们需要使用剪枝的方式来使得模型的泛化能力更 好,所以剪枝可以理解为简化我们的决策树,去掉不必要的节点路径以提高泛化能力。剪枝的方法主要 有预剪枝和后剪枝两种方式。
考虑我们分类所用到的特征和分类结果,朴素贝叶斯有一个假设前提,那就是所有的条件对结果都是独立发生作用的。
所以根据这个思想,出现了朴素贝叶斯概率公式:
优点
缺点
由于做了 “各个属性之间是独立的” 这个假设,同样该算法也暴露了缺点。因为在实际应用中,属性之间 完全独立的情况是很少出现的,如果属性相关度较大,那么分类的效果就会变差。所以在具体应用的时 候要好好考虑特征之间的相互独立性,再决定是否要使用该算法,比如,维度太多的数据可能就不太适 合,因为在维度很多的情况下,不同的维度之间越有可能存在联合的情况,而不是相互独立的,那么模 型的效果就会变差。
前面我们讲到,朴素贝叶斯是基于属性之间的独立性假设而进行构建的,但是实际上很多时候这种假设 存在一定的局限,为了打破这些局限,于是衍生出了一些方法,下面我列举两个:
什么是支持向量?
假设我们已经找到了一条线(不一定是最优的那条)可以分割红豆和绿豆,红豆和绿豆中距离这条线最 近的几个样本点就被称为支持向量(Support Vector),这些点到这条线的距离称为间隔,SVM 的思路就是要找到有最大间隔的那条线(超平面)。在决定最佳超平面时只有支持向量起作用,而其他数据 点并不起作用,如果移动非支持向量,甚至删除非支持向量都不会对最优超平面产生任何影响。即支持向量对模型起着决定性的作用,这也是 “支持向量机” 名称的由来。
处理不清晰的边界 我们通过划分软间隔和硬间隔。
处理非线性可分 我们将不可划分的样本映射到高维空间中。SVM中借助“核函数”来实现映射到高维的操作。
优点
缺点
第一步,我们要预先设定一种网络结构和激活函数,这一步其实很困难,因为网络结构可以无限拓展, 要知道什么样的结构才符合我们的问题需要做大量的试验。
第二步,初始化模型中的权重。模型中的每一个连接都会有一个权重,在初始化的时候可以都随机给予 一个值。
第三步,就是根据输入数据和权重来预测结果。由于最开始的参数都是随机设置的,所以获得的结果肯 定与真实的结果差距比较大,所以在这里要计算一个误差,误差反映了预测结果和真实结果的差距有多 大。
最后一步,模型要调节权重。这里我们可以参与的就是需要设置一个 “学习率”,这个学习率是针对误差 的,每次获得误差后,连接上的权重都会按照误差的这个比率来进行调整,从而期望在下次计算时获得 一个较小的误差。经过若干次循环这个过程,我们可以选择达到一个比较低的损失值的时候停止并输出 模型,也可以选择一个确定的循环轮次来结束。
优点
经过上面的介绍,我不知道你是否了解到了关于神经网络的一个巨大的优点,那就是可以像搭积木一样不断地扩展模型的边界,而对于内部具体的运行不需要加以太多的干涉。通过不同的搭建手段,神经网络几乎可以去模拟任何算法的结果,只要数据量够多,构建的模型够完善,最终都会有一个很好的结果。
缺点
然而神经网络的优点反过来想,也变成了它的缺点。 首先神经网络缺乏可解释性,它的内部纷繁复杂, 就像一个神奇的黑匣子,你告诉它数据,然后它告诉你结果,至于为什么会这样,它不做任何解释。所 以在很多对解释性要求比较高的场景,比如信用评级、金融风控等情况下没办法使用。 其次,神经网络非常消耗资源,不管是数据、网络节点,还是硬件设备,要构建一套完美的神经网络模 型开销是非常大的,不光训练时间长,还需要耗费很大的人力物力。