diff --git a/MarkDown/第二章_机器学习基础.md b/MarkDown/第二章_机器学习基础.md index 296671f..68b5b9a 100644 --- a/MarkDown/第二章_机器学习基础.md +++ b/MarkDown/第二章_机器学习基础.md @@ -8,9 +8,9 @@ |:-:|:-:|:-:| |![](../img/ch2/2.1/4.png)|![](../img/ch2/2.1/5.jpg)|![](../img/ch2/2.1/6.jpg)| -|聚类算法|关联规则学习|人工神经网络 +|聚类算法|关联规则学习|人工神经网络| |:-:|:-:|:-:| -|![](../img/ch2/2.1/7.png)|![](../img/ch2/2.1/8.jpg)|![](../img/ch2/2.1/9.jpg)| +|![](../img/ch2/2.1/7.png)|![](../img/ch2/2.1/8.jpg)|![](../img/ch2/2.1/9.png)| |深度学习|降低维度算法|集成算法| |:-:|:-:|:-:| @@ -95,7 +95,7 @@ ## 2.9 分类算法的评估方法? 1. **几个常用的术语** -这里首先介绍几个*常见*的 模型评价术语,现在假设我们的分类目标只有两类,计为正例(positive)和负例(negtive)分别是: +这里首先介绍几个*常见*的 模型评价术语,现在假设我们的分类目标只有两类,计为正例(positive)和负例(negative)分别是: 1) True positives(TP): 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数(样本数); 2) False positives(FP): 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数; 3) False negatives(FN):被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数; @@ -106,29 +106,29 @@ 上图是这四个术语的混淆矩阵。 1)P=TP+FN表示实际为正例的样本个数。 2)True、False描述的是分类器是否判断正确。 -3)Positive、Negative是分类器的分类结果,如果正例计为1、负例计为-1,即positive=1、negtive=-1。用1表示True,-1表示False,那么实际的类标=TF*PN,TF为true或false,PN为positive或negtive。 -4)例如True positives(TP)的实际类标=1*1=1为正例,False positives(FP)的实际类标=(-1)*1=-1为负例,False negatives(FN)的实际类标=(-1)*(-1)=1为正例,True negatives(TN)的实际类标=1*(-1)=-1为负例。 +3)Positive、Negative是分类器的分类结果,如果正例计为1、负例计为-1,即positive=1、negative=-1。用1表示True,-1表示False,那么实际的类标=TF\*PN,TF为true或false,PN为positive或negative。 +4)例如True positives(TP)的实际类标=1\*1=1为正例,False positives(FP)的实际类标=(-1)\*1=-1为负例,False negatives(FN)的实际类标=(-1)\*(-1)=1为正例,True negatives(TN)的实际类标=1\*(-1)=-1为负例。 2. **评价指标** - 1) 正确率(accuracy) -正确率是我们最常见的评价指标,accuracy = (TP+TN)/(P+N),正确率是被分对的样本数在所有样本数中的占比,通常来说,正确率越高,分类器越好。 - 2) 错误率(error rate) + 1) 正确率(accuracy) +正确率是我们最常见的评价指标,accuracy = (TP+TN)/(P+N),正确率是被分对的样本数在所有样本数中的占比,通常来说,正确率越高,分类器越好。 + 2) 错误率(error rate) 错误率则与正确率相反,描述被分类器错分的比例,error rate = (FP+FN)/(P+N),对某一个实例来说,分对与分错是互斥事件,所以accuracy =1 - error rate。 - 3) 灵敏度(sensitive) + 3) 灵敏度(sensitive) sensitive = TP/P,表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力。 - 4) 特效度(specificity) + 4) 特效度(specificity) specificity = TN/N,表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力。 - 5) 精度(precision) -精度是精确性的度量,表示被分为正例的示例中实际为正例的比例,precision=TP/(TP+FP)。 - 6) 召回率(recall) + 5) 精度(precision) +精度是精确性的度量,表示被分为正例的示例中实际为正例的比例,precision=TP/(TP+FP)。 + 6) 召回率(recall) 召回率是覆盖面的度量,度量有多个正例被分为正例,recall=TP/(TP+FN)=TP/P=sensitive,可以看到召回率与灵敏度是一样的。 - 7) 其他评价指标 - 计算速度:分类器训练和预测需要的时间; - 鲁棒性:处理缺失值和异常值的能力; - 可扩展性:处理大数据集的能力; - 可解释性:分类器的预测标准的可理解性,像决策树产生的规则就是很容易理解的,而神经网络的一堆参数就不好理解,我们只好把它看成一个黑盒子。 - 8) 查准率和查全率反映了分类器分类性能的两个方面。如果综合考虑查准率与查全率,可以得到新的评价指标F1测试值,也称为综合分类率: - ![](../img/ch2/2.9/2.jpg) + 7) 其他评价指标 + 计算速度:分类器训练和预测需要的时间; + 鲁棒性:处理缺失值和异常值的能力; + 可扩展性:处理大数据集的能力; + 可解释性:分类器的预测标准的可理解性,像决策树产生的规则就是很容易理解的,而神经网络的一堆参数就不好理解,我们只好把它看成一个黑盒子。 + 8) 查准率和查全率反映了分类器分类性能的两个方面。如果综合考虑查准率与查全率,可以得到新的评价指标F1测试值,也称为综合分类率: + ![](../img/ch2/2.9/2.jpg) 为了综合多个类别的分类情况,评测系统整体性能,经常采用的还有微平均F1(micro-averaging)和宏平均F1(macro-averaging )两种指标。宏平均F1与微平均F1是以两种不同的平均方式求的全局的F1指标。其中宏平均F1的计算方法先对每个类别单独计算F1值,再取这些F1值的算术平均值作为全局指标。而微平均F1的计算方法是先累加计算各个类别的a、b、c、d的值,再由这些值求出F1值。由两种平均F1的计算方式不难看出,宏平均F1平等对待每一个类别,所以它的值主要受到稀有类别的影响,而微平均F1平等考虑文档集中的每一个文档,所以它的值受到常见类别的影响比较大。 **ROC曲线和PR曲线** @@ -249,7 +249,7 @@ $$ 当参数为2个时,代价函数是三维图像。 ![](../img/ch2/2.16/2.png) - + ## 2.18 为什么代价函数要非负? 目标函数存在一个下界,在优化过程当中,如果优化算法能够使目标函数不断减小,根据单调有界准则,这个优化算法就能证明是收敛有效的。 只要设计的目标函数有下界,基本上都可以,代价函数非负更为方便。 @@ -665,7 +665,7 @@ PCA可解决训练数据中存在数据特征过多或特征累赘的问题。 假设数据集是m个n维,$(x^{(1)}, x^{(2)}, \cdots, x^{(m)})$。如果n=2,需要降维到$n'=1$,现在想找到某一维度方向代表这两个维度的数据。下图有$u_1, u_2$两个向量方向,但是哪个向量才是我们所想要的,可以更好代表原始数据集的呢? ![](../img/ch2/2.34/1.png) - + 从图可看出,$u_1$比$u_2$好,为什么呢?有以下两个主要评价指标: 1. 样本点到这个直线的距离足够近。 2. 样本点在这个直线上的投影能尽可能的分开。 @@ -681,7 +681,7 @@ PCA可解决训练数据中存在数据特征过多或特征累赘的问题。 考虑到整个样本集,样本点到这个超平面的距离足够近,目标变为最小化TODO。对此式进行推理,可得: TODO - + 在推导过程中,分别用到了TODO,矩阵转置公式TODO,TODO,TODO以及矩阵的迹,最后两步是将代数和转为矩阵形式。 由于TODO的每一个向量TODO是标准正交基,TODO是数据集的协方差矩阵,TODO是一个常量。最小化TODO又可等价于 @@ -806,7 +806,7 @@ TODO其映射为TODO 模型过拟合:在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大。 模型正常:在训练集以及测试集上,同时具有相对较低的偏差以及方差。 - + 2. **横轴为模型复杂程度,纵轴为误差** ![](../img/ch2/2.40.3/2.png) @@ -925,13 +925,13 @@ ROC曲线所覆盖的面积称为AUC(Area Under Curve),可以更直观的 ### 2.47.10 如何画ROC曲线? http://blog.csdn.net/zdy0_2004/article/details/44948511 下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。 - + 步骤: 1、假设已经得出一系列样本被划分为正类的概率,按照大小排序。 2、从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。 举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。 3、每次选取一个不同的threshold,得到一组FPR和TPR,即ROC曲线上的一点。以此共得到20组FPR和TPR的值。其中FPR和TPR简单理解如下: 4、根据3)中的每个坐标点点,画图。 - + ![](../img/ch2/2.40.11/1.jpg) ### 2.47.11 如何计算TPR,FPR? @@ -952,7 +952,7 @@ y_true = [0, 0, 1, 1]; y_pred = [1, 1, 1, 1]; 正例与反例信息如下: 真实值 预测值 - 正例 反例 +​ 正例 反例 正例 TP=2 FN=0 反例 FP=2 TN=0 由此可得: @@ -965,7 +965,7 @@ y_true = [0, 0, 1, 1] y_pred = [0, 1, 1, 1] 正例与反例信息如下: 真实值 预测值 - 正例 反例 +​ 正例 反例 正例 TP=2 FN=0 反例 FP=1 TN=1 由此可得: @@ -978,7 +978,7 @@ y_true = [0, 0, 1, 1]; y_pred = [0, 1, 0, 1]; 正例与反例信息如下: 真实值 预测值 - 正例 反例 +​ 正例 反例 正例 TP=1 FN=1 反例 FP=1 TN=1 由此可得: @@ -991,7 +991,7 @@ y_true = [0, 0, 1, 1]; y_pred = [0, 0, 0, 1]; 正例与反例信息如下: 真实值 预测值 - 正例 反例 +​ 正例 反例 正例 TP=1 FN=1 反例 FP=0 TN=2 由此可得: @@ -1013,7 +1013,7 @@ e.对面积微元进行累加,得到AUC。 ### 2.47.14 直观理解AUC http://blog.csdn.net/cherrylvlei/article/details/52958720 AUC是ROC右下方的曲线面积。下图展现了三种AUC的值: - + ![](../img/ch2/2.40.15/1.png) AUC是衡量二分类模型优劣的一种评价指标,表示正例排在负例前面的概率。其他评价指标有精确度、准确率、召回率,而AUC比这三者更为常用。 @@ -1376,14 +1376,14 @@ http://blog.csdn.net/Love_wanling/article/details/69390047 本文将遇到的核函数进行收集整理,分享给大家。 http://blog.csdn.net/wsj998689aa/article/details/47027365 - + 1.Linear Kernel 线性核是最简单的核函数,核函数的数学公式如下: $k(x,y)=xy$ 如果我们将线性核函数应用在KPCA中,我们会发现,推导之后和原始PCA算法一模一样,很多童鞋借此说“kernel is shit!!!”,这是不对的,这只是线性核函数偶尔会出现等价的形式罢了。 - + 2.Polynomial Kernel 多项式核实一种非标准核函数,它非常适合于正交归一化后的数据,其具体形式如下: @@ -1391,7 +1391,7 @@ $k(x,y)=xy$ $k(x,y)=(ax^{t}y+c)^{d}$ 这个核函数是比较好用的,就是参数比较多,但是还算稳定。 - + 3.Gaussian Kernel 这里说一种经典的鲁棒径向基核,即高斯核函数,鲁棒径向基核对于数据中的噪音有着较好的抗干扰能力,其参数决定了函数作用范围,超过了这个范围,数据的作用就“基本消失”。高斯核函数是这一族核函数的优秀代表,也是必须尝试的核函数,其数学形式如下: @@ -1578,7 +1578,7 @@ $V(d)=\frac{\pi ^{\frac{d}{2}}}{\Gamma (\frac{d}{2}+1)}0.5^{d}$ 所以,我们如何避免“维数灾难”?图1显示了分类器的性能随着特征个数的变化不断增加,过了某一个值后,性能不升反降。这里的某一个值到底是多少呢?目前,还没有方法来确定分类问题中的这个阈值是多少,这依赖于训练样本的数量,决策边界的复杂性以及分类器的类型。理论上,如果训练样本的数量无限大,那么就不会存在“维数灾难”,我们可以采用任意多的特征来训练分类器。事实上,训练样本的数量是有限的,所以不应该采用过多的特征。此外,那些需要精确的非线性决策边界的分类器,比如neural network,knn,decision trees等的泛化能力往往并不是很好,更容易发生过拟合问题。因此,在设计这些分类器时应当慎重考虑特征的数量。相反,那些泛化能力较好的分类器,比如naive Bayesian,linear classifier等,可以适当增加特征的数量。 如果给定了N个特征,我们该如何从中选出M个最优的特征?最简单粗暴的方法是尝试所有特征的组合,从中挑出M个最优的特征。事实上,这是非常花时间的,或者说不可行的。其实,已经有许多特征选择算法(feature selection algorithms)来帮助我们确定特征的数量以及选择特征。此外,还有许多特征抽取方法(feature extraction methods),比如PCA等。交叉验证(cross-validation)也常常被用于检测与避免过拟合问题。 - + 参考资料: [1] Vincent Spruyt. The Curse of Dimensionality in classification. Computer vision for dummies. 2014. [Link] @@ -1635,12 +1635,12 @@ http://www.cnblogs.com/William_Fire/archive/2013/02/09/2909499.html 1 聚类算法的分类 目前,有大量的聚类算法[3]。而对于具体应用,聚类算法的选择取决于数据的类型、聚类的目的。如果聚类分析被用作描述或探查的工具,可以对同样的数据尝试多种算法,以发现数据可能揭示的结果。 - +​ 主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法[4-6]。 每一类中都存在着得到广泛应用的算法,例如:划分方法中的k-means[7]聚类算法、层次方法中的凝聚型层次聚类算法[8]、基于模型方法中的神经网络[9]聚类算法等。 - 目前,聚类问题的研究不仅仅局限于上述的硬聚类,即每一个数据只能被归为一类,模糊聚类[10]也是聚类分析中研究较为广泛的一个分支。模糊聚类通过隶 属函数来确定每个数据隶属于各个簇的程度,而不是将一个数据对象硬性地归类到某一簇中。目前已有很多关于模糊聚类的算法被提出,如著名的FCM算法等。 - 本文主要对k-means聚类算法、凝聚型层次聚类算法、神经网络聚类算法之SOM,以及模糊聚类的FCM算法通过通用测试数据集进行聚类效果的比较和分析。 +​ 目前,聚类问题的研究不仅仅局限于上述的硬聚类,即每一个数据只能被归为一类,模糊聚类[10]也是聚类分析中研究较为广泛的一个分支。模糊聚类通过隶 属函数来确定每个数据隶属于各个簇的程度,而不是将一个数据对象硬性地归类到某一簇中。目前已有很多关于模糊聚类的算法被提出,如著名的FCM算法等。 +​ 本文主要对k-means聚类算法、凝聚型层次聚类算法、神经网络聚类算法之SOM,以及模糊聚类的FCM算法通过通用测试数据集进行聚类效果的比较和分析。 2 四种常用聚类算法研究 @@ -1652,9 +1652,9 @@ http://www.cnblogs.com/William_Fire/archive/2013/02/09/2909499.html   $E=\sum_{i=1}^{k}\sum_{p\subset C}|p-m_{i}|^{2}$  这里E是数据库中所有对象的平方误差的总和,p是空间中的点,mi是簇Ci的平均值[9]。该目标函数使生成的簇尽可能紧凑独立,使用的距离度量是欧几里得距离,当然也可以用其他距离度量。k-means聚类算法的算法流程如下: - 输入:包含n个对象的数据库和簇的数目k; - 输出:k个簇,使平方误差准则最小。 - 步骤: +​ 输入:包含n个对象的数据库和簇的数目k; +​ 输出:k个簇,使平方误差准则最小。 +​ 步骤:   (1) 任意选择k个对象作为初始的簇中心;   (2) repeat;   (3) 根据簇中对象的平均值,将每个对象(重新)赋予最类似的簇; @@ -1662,7 +1662,7 @@ http://www.cnblogs.com/William_Fire/archive/2013/02/09/2909499.html   (5) until不再发生变化。 2.2 层次聚类算法 - 根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。 +​ 根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。  凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。四种广泛采用的簇间距离度量方法如下: ![](../img/ch2/2-20.gif) @@ -1703,7 +1703,7 @@ FCM算法是一种以隶属度来确定每个数据点属于某个聚类程度  (4) 根据迭代结果,由最后的隶属矩阵确定数据所属的类,显示最后的聚类结果。 3 四种聚类算法试验 - + 3.1 试验数据 @@ -1764,7 +1764,7 @@ $avg=\frac{1}{k}\sum_{i=1}^{k}\frac{m_{i}}{n_{i}}$ - +