第一部分 分类
kNN算法:采用测量不同特征值之间的距离方法进行分类,距离未知数据最近的K个样本中类型最多的样本类型即为未知数据的类型。
优点:精度高,对异常值不敏感,且原理和实现都比较简单。
缺点:计算复杂度高,空间复杂度高,且对K值的选取有依赖。
决策树:它的一个重要任务是为了理解数据中所蕴含的知识信息,因此可以使用不熟悉的数据集合,并从中提出一系列规则,再用这一系列规则对未知数据进行分类。在本书中提到了构建决策树的关键在于通过计算香农熵来得到通过每个特征划分数据集的信息增益,以此使得无序的数据变有序,然后再通过递归来构建决策树。
优点:计算复杂度不高,输出结果易于理解。
缺点:可能会出现过度匹配问题。且算法构建过程较麻烦。
朴素贝叶斯:一种通过已知值来估计未知概率的有效方法,之所以称为朴素,是因为假定特征之间具有条件独立性(实际上不是这样,但仍可以得到一个有效的分类器)。其关键是计算条件概率来分类,通过计算未知数据属于某个类型的概率,最后属于概率最高的那一类。
优点:在数据较少的情况下任然有效。
缺点:对于输入数据的准备方式较为敏感。
Logistic回归:由于逻辑回归是一个我十分熟悉的概念,所以这一章我看的很快,简单来说逻辑回归就是通过梯度下降(书中成为梯度上升)之类的优化算法来找到一条最佳的决策边界,而再通过sigmoid函数一类的激活函数来进行分类。书中详细介绍了sigmoid函数和梯度上升算法以及随机梯度上升算法,并且进行了比较。
优点:计算代价不高,易于理解和实现。
缺点:容易欠拟合,分类精度可能不高。
SVM:支持向量机算法是我一直没有学明白的算法,在看了这本书之后,终于稍稍理解一点了。简单说,我们最后需要得到一个超平面(在二维空间就是一条线)来对数据进行分类,而数据中离超平面最近的那些点就是支持向量,SVM就是要找到一条这样的超平面,使得所有的支持向量到超平面的间隔最大,即求解最大间隔。这就是SVM的基本原理,当然书中提到了一系列具体的求解过程,由于提到了拉格朗日这个让我痛彻心扉的名字,我也就没仔细看明白了,但是需要注意的是一个叫作松弛变量的参数,因为几乎所有数据都不那么“干净”,也就是不是百分之百可以通过一个超平面分开,所以我们需要通过松弛变量来允许有些数据点可以处于分割面错误的一侧。本书中用来进行优化的是SMO算法,并给出了它的简化版和完整版实现。另外需要注意的是“核函数”这一概念,因为不是所有的数据都是线性可分的,所以我们需要通过核函数将数据从一个低维空间映射到一个高位空间,将一个在低维空间中的非线性问题转换成高维空间下的线性问题来求解。
优点:泛化错误率低,计算开销不大,结果容易解释。
缺点:对参数调节和核函数的选择敏感,原始分类器不加修饰仅适用于二分类问题。
AdaBoost元算法:这章首先介绍了bagging和boosting两种分类器构建方法,bagging是通过原始数据集抽取S次得到S个新的数据集,再用这些新的数据集对分类器进行训练,之后同时应用这S个分类器进行分类,取投票数最多的结果。而boosting是通过集中关注被已有分类器错分的数据来得到新的分类器。本章主要介绍了AdaBoost,它的运作过程是,给训练数据中的每个样本一个权重,一开始都是一样的,然后在训练数据集上训练一个弱分类器(本书训练的是单层决策树),并计算其错误率,然后在同一训练集上再次训练弱分类器,但是在这次训练中,上次分队的样本权重会降低,分错的样本权重会升高,简单来说,就是针对那些没有分队的样本进行训练。同时,为了从这些弱分类器中得到最终的分类结果,AdaBoost为每个弱分类器分配了一个权重alpha,它的值是基于分类器的错误率计算的。
优点:泛化错误率低,易编码,可以用在大多数分类器上且无参数调整。
缺点:对离群点敏感【易过拟合
非均衡类分类问题:在上一章内容之中,还介绍了非均衡类分类问题。很多时候,数据并不是根据标签对称的,比如我做的肺结节分类,无病灶区域就远远大于有病灶区域,还有的时候,不同类别的分类代价不相等,漏检一个肺结节的后果比错检一个要严重的多。所以书中提出了新的分类器性能度量方法,并进行了可视化。首先是正确率,召回率和ROC曲线的介绍,描述起来比较繁琐,我直接给一个我看过的链接吧。然后在第二节中介绍了基于代价函数的分类器控制,因为不同类别的代价不同,所以可以给予不同的权重,比如给予肺结节分类中的假阴性更大的惩罚项。