Yu-shui


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 日程表

  • 搜索

机器学习算法图示

发表于 2019-08-22
字数统计: | 阅读时长 ≈

汇总:常见算法图示(转自网络)

​ 日常使用机器学习的任务中,我们经常会遇见各种算法,下图是各种常见算法的图示。

回归算法 聚类算法 正则化方法
决策树学习 贝叶斯方法 基于核的算法
聚类算法 关联规则学习 人工神经网络
深度学习 降低维度算法 集成算法

​ 图 1各种常见算法图示

聚类

发表于 2019-08-21
字数统计: | 阅读时长 ≈

1. 聚类和降维有什么区别与联系

​ 聚类用于找寻数据内在的分布结构,既可以作为一个单独的过程,比如异常检测等等。也可作为分类等其他学习任务的前驱过程。聚类是标准的无监督学习。

​ 1)在一些推荐系统中需确定新用户的类型,但定义“用户类型”却可能不太容易,此时往往可先对原有的用户数据进行聚类,根据聚类结果将每个簇定义为一个类,然后再基于这些类训练分类模型,用于判别新用户的类型。

​ 2)而降维则是为了缓解维数灾难的一个重要方法,就是通过某种数学变换将原始高维属性空间转变为一个低维“子空间”。其基于的假设就是,虽然人们平时观测到的数据样本虽然是高维的,但是实际上真正与学习任务相关的是个低维度的分布。从而通过最主要的几个特征维度就可以实现对数据的描述,对于后续的分类很有帮助。比如对于Kaggle上的泰坦尼克号生还预测问题。通过给定一个乘客的许多特征如年龄、姓名、性别、票价等,来判断其是否能在海难中生还。这就需要首先进行特征筛选,从而能够找出主要的特征,让学习到的模型有更好的泛化性。

​ 聚类和降维都可以作为分类等问题的预处理步骤。

​ 但是他们虽然都能实现对数据的约减。但是二者适用的对象不同,聚类针对的是数据点,而降维则是对于数据的特征。另外它们有着很多种实现方法。聚类中常用的有K-means、层次聚类、基于密度的聚类等;降维中常用的则PCA、Isomap、LLE等。

2. 聚类算法衡量标准

不同聚类算法有不同的优劣和不同的适用条件。可从以下方面进行衡量判断:
1、算法的处理能力:处理大的数据集的能力,即算法复杂度;处理数据噪声的能力;处理任意形状,包括有间隙的嵌套的数据的能力;

​ 2、算法是否需要预设条件:是否需要预先知道聚类个数,是否需要用户给出领域知识;

​ 3、算法的数据输入属性:算法处理的结果与数据输入的顺序是否相关,也就是说算法是否独立于数据输入顺序;算法处理有很多属性数据的能力,也就是对数据维数是否敏感,对数据的类型有无要求。

3. 聚类和分类的区别

聚类(Clustering)
聚类,简单地说就是把相似的东西分到一组,聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起。一个聚类算法通常只需要知道如何计算相似度就可以开始工作了,因此聚类通常并不需要使用训练数据进行学习,在机器学习中属于无监督学习。

分类(Classification)

​ 分类,对于一个分类器,通常需要标注号的数据集。一般情况下,一个分类器会从它得到的训练集中进行学习,从而具备对未知数据进行分类的能力,在机器学习中属于监督学习。

4. 四种常用聚类方法

​ 聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。
​ 主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法。

(1)k-means聚类算法

​ k-means是划分方法中较经典的聚类算法之一。由于该算法的效率高,所以在对大规模数据进行聚类时被广泛应用。k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。k-means算法的处理过程如下:首先,随机地 选择k个对象,每个对象初始地代表了一个簇的平均值或中心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。 这个过程不断重复,直到准则函数收敛。通常,采用平方误差准则,其定义如下:

 这里E是数据中所有对象的平方误差的总和,p是空间中的点,$m_i$是簇$C_i$的平均值[9]。该目标函数使生成的簇尽可能紧凑独立,使用的距离度量是欧几里得距离,当然也可以用其他距离度量。

算法流程:
  (1) 任意选择k个对象作为初始的簇中心;
  (2) 根据簇中对象的平均值,将每个对象(重新)赋予最类似的簇;
  (3) 更新簇的平均值,即计算每个簇中对象的平均值;
  (4) 重复步骤(2)、(3)直到簇中心不再变化;

(3) 层次聚类算法

​ 根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。
 凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。

算法流程:

注:以采用最小距离的凝聚层次聚类算法为例:

 (1) 将每个对象看作一类,计算两两之间的最小距离;
 (2) 将距离最小的两个类合并成一个新类;
 (3) 重新计算新类与所有类之间的距离;
 (4) 重复(2)、(3),直到所有类最后合并成一类。

(3) SOM聚类算法

​ 该算法假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。

​ SOM网络包含输入层和输出层。输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。 学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。

算法流程:

​ (1) 网络初始化,对输出层每个节点权重赋初值;
​ (2) 从输入样本中随机选取输入向量并且归一化,找到与输入向量距离最小的权重向量;
​ (3) 定义获胜单元,在获胜单元的邻近区域调整权重使其向输入向量靠拢;
​ (4) 提供新样本、进行训练;
​ (5) 收缩邻域半径、减小学习率、重复,直到小于允许值,输出聚类结果。

(4) FCM聚类算法

​ FCM算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法。
​ 设数据集X={x_1,x_2,…,x_n},它的模糊c划分可用模糊矩阵U=[u_(ij) ]表示,矩阵U​的元素u_(ij)表示第j(j=1,2,…,n)​个数据点属于第i(i=1,2,…,c)类的隶属度,​u_(ij)​满足如下条件:

目前被广泛使用的聚类准则是取类内加权误差平方和的极小值。即:

其中V为聚类中心,m为加权指数,d_{ij}(x_j,v_i)=||v_i - x_j||​。

算法流程:

 (1) 标准化数据矩阵;
 (2) 建立模糊相似矩阵,初始化隶属矩阵;
 (3) 算法开始迭代,直到目标函数收敛到极小值;
 (4) 根据迭代结果,由最后的隶属矩阵确定数据所属的类,显示最后的聚类结果。

维数灾难

发表于 2019-08-20
字数统计: | 阅读时长 ≈

图解为什么会产生维数灾难

​ 假如数据集包含10张照片,照片中包含三角形和圆两种形状。现在来设计一个分类器进行训练,让这个分类器对其他的照片进行正确分类(假设三角形和圆的总数是无限大),简单的,我们用一个特征进行分类:

​ 图a

​ 从上图可看到,如果仅仅只有一个特征进行分类,三角形和圆几乎是均匀分布在这条线段上,很难将10张照片线性分类。那么,增加一个特征后的情况会怎么样:

​ 图b

增加一个特征后,我们发现仍然无法找到一条直线将三角形和圆形分开。所以,考虑需要再增加一个特征:

​ 图c

​ 图d

​ 此时,可以找到一个平面将三角形和圆分开。

​ 计算不同特征数是样本的密度:

​ (1)一个特征时,假设特征空间时长度为5的线段,则样本密度为10/5 = 2。

​ (2)两个特征时,特征空间大小为5 * 5 = 25,样本密度为10/25 = 0.4。

​ (3)三个特征时,特征空间大小是5 5 5 = 125,样本密度为10 / 125 = 0.08​。

​ 以此类推,如果继续增加特征数量,样本密度会越来越稀疏,此时,更容易找到一个超平面将训练样本分开。当特征数量增长至无限大时,样本密度就变得非常稀疏。

将高维空间的分类结果映射到低维空间时:

​ 图e

​ 上图是将三维特征空间映射到二维特征空间后的结果。尽管在高维特征空间时训练样本线性可分,但是映射到低维空间后,结果正好相反。事实上,增加特征数量使得高维空间线性可分,相当于在低维空间内训练一个复杂的非线性分类器。不过,这个非线性分类器太过“聪明”,仅仅学到了一些特例。如果将其用来辨别那些未曾出现在训练样本中的测试样本时,通常结果不太理想,会造成过拟合问题。

​ 图f

​ 上图所示的只采用2个特征的线性分类器分错了一些训练样本,准确率似乎没有图e的高,但是,采用2个特征的线性分类器的泛化能力比采用3个特征的线性分类器要强。因为,采用2个特征的线性分类器学习到的不只是特例,而是一个整体趋势,对于那些未曾出现过的样本也可以比较好地辨别开来。换句话说,通过减少特征数量,可以避免出现过拟合问题,从而避免“维数灾难”。

从另一个角度看维数灾难

假设只有一个特征时,特征的值域是0到1,每一个三角形和圆的特征值都是唯一的。如果我们希望训练样本覆盖特征值值域的20%,那么就需要三角形和圆总数的20%。我们增加一个特征后,为了继续覆盖特征值值域的20%就需要三角形和圆总数的45%(0.452的平方约等于0.2)。继续增加一个特征后,需要三角形和圆总数的58%(0.583的三次方约等于0.2)。随着特征数量的增加,为了覆盖特征值值域的20%,就需要更多的训练样本。如果没有足够的训练样本,就可能会出现过拟合问题。

​ 通过上述例子,我们可以看到特征数量越多,训练样本就会越稀疏,分类器的参数估计就会越不准确,更加容易出现过拟合问题。“维数灾难”的另一个影响是训练样本的稀疏性并不是均匀分布的。处于中心位置的训练样本比四周的训练样本更加稀疏。

​ 假设有一个二维特征空间,如上图所示的矩形,在矩形内部有一个内切的圆形。由于越接近圆心的样本越稀疏,因此,相比于圆形内的样本,那些位于矩形四角的样本更加难以分类。当维数变大时,特征超空间的容量不变,但单位圆的容量会趋于0,在高维空间中,大多数训练数据驻留在特征超空间的角落。散落在角落的数据要比处于中心的数据难于分类。

怎样避免维数灾难

解决维度灾难问题:

主成分分析法PCA,线性判别法LDA

奇异值分解简化数据、拉普拉斯特征映射

Lassio缩减系数法、小波分析法等。

PCA主成分分析

发表于 2019-08-15
字数统计: | 阅读时长 ≈

主成分分析(PCA)

1. PCA思想总结

  1. PCA就是将高维的数据通过线性变换投影到低维空间上去。
  2. 投影思想:找出最能够代表原始数据的投影方法。被PCA降掉的那些维度只能是那些噪声或是冗余的数据。
  3. 去冗余:去除可以被其他向量代表的线性相关向量,这部分信息量是多余的。
  4. 去噪声,去除较小特征值对应的特征向量,特征值的大小反映了变换后在特征向量方向上变换的幅度,幅度越大,说明这个方向上的元素差异也越大,要保留。
  5. 对角化矩阵,寻找极大线性无关组,保留较大的特征值,去除较小特征值,组成一个投影矩阵,对原始样本矩阵进行投影,得到降维后的新样本矩阵。
  6. 完成PCA的关键是——协方差矩阵。协方差矩阵,能同时表现不同维度间的相关性以及各个维度上的方差。协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。
  7. 之所以对角化,因为对角化之后非对角上的元素都是0,达到去噪声的目的。对角化后的协方差矩阵,对角线上较小的新方差对应的就是那些该去掉的维度。所以我们只取那些含有较大能量(特征值)的维度,其余的就舍掉,即去冗余。

2. 图解PCA

​ PCA可解决训练数据中存在数据特征过多或特征累赘的问题。核心思想是将m维特征映射到n维(n < m),这n维形成主元,是重构出来最能代表原始数据的正交特征。

​ 假设数据集是m个n维,(X(1),X(2)……..X(n)), 如果n=2​,需要降维到n’=1,现在想找到某一维度方向代表这两个维度的数据。下图有u1, u2​两个向量方向,但是哪个向量才是我们所想要的,可以更好代表原始数据集的呢?

从图可看出,u1,u2好,为什么呢?有以下两个主要评价指标:

  1. 样本点到这个直线的距离足够近。
  2. 样本点在这个直线上的投影能尽可能的分开。

如果我们需要降维的目标维数是其他任意维,则:

  1. 样本点到这个超平面的距离足够近。
  2. 样本点在这个超平面上的投影能尽可能的分开。

3. PCA算法推理

下面以基于最小投影距离为评价指标推理:

​ 假设数据集是m个n维, (X(1),X(2)……..X(n)),且数据进行了中心化。经过投影变换得到新坐标为 {w_1,w_2,…,w_n},其中 w 是标准正交基,即 || w ||^2 = 1,w^T(i) w(j) = 0。

​ 经过降维后,新坐标为 { w_1,w_2,…,w_n },其中 n’ 是降维后的目标维数。样本点 x^(i)在新坐标系下的投影为 z^(i) = (z^(i)1, z^(i)2, …, z^(i)n’ ),其中 z^(i)j = w^Tj x^(i)x^(i)$在低维坐标系里第 j 维的坐标。

​ 如果用 $z^{(i)} $ 去恢复 $x^{(i)} $ ,则得到的恢复数据为

其中 W​为标准正交基组成的矩阵。

​ 考虑到整个样本集,样本点到这个超平面的距离足够近,目标变为最小化

对此式进行推理,可得:

​ 在推导过程中,分别用x^(i) = Wz^(i), 矩阵转置公式 (AB)^T = B^T A^T,W^T W = I,z^(i) = W^T x^(i), 以及矩阵的迹,最后两步是将代数和转为矩阵形式。
​ 由于W 的每一个向量 wj是标准正交基,

是数据集的协方差矩阵, 是一个常量。最小化 又可等价于

利用拉格朗日函数可得到:

​ 对 W 求导,可得 , X X^T 是 n’ 个特征向量组成的矩阵,lambda为XX^T 的特征值。W 即为我们想要的矩阵。
​ 对于原始数据,只需要 z^(i) = W^T X^(i) ,就可把原始数据集降维到最小投影距离的 n’$维数据集。

4. PCA算法主要优缺点

优缺点 简要说明
优点 1. 仅仅需要以方差衡量信息量,不受数据集以外的因素影响。 2.各主成分之间正交,可消除原始数据成分间的相互影响的因素。3. 计算方法简单,主要运算是特征值分解,易于实现。
缺点 1.主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。2. 方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。

5. 降维的必要性及目的

降维的必要性:

  1. 多重共线性和预测变量之间相互关联。多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯。
  2. 高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间,而在十维空间上只有2%。
  3. 过多的变量,对查找规律造成冗余麻烦。
  4. 仅在变量层面上分析可能会忽略变量之间的潜在联系。例如几个预测变量可能落入仅反映数据某一方面特征的一个组内。

降维的目的:

  1. 减少预测变量的个数。
  2. 确保这些变量是相互独立的。
  3. 提供一个框架来解释结果。相关特征,特别是重要特征更能在数据中明确的显示出来;如果只有两维或者三维的话,更便于可视化展示。
  4. 数据在低维下更容易处理、更容易使用。
  5. 去除数据噪声。
  6. 降低算法运算开销。

6. KPCA( 核主成分分析 )与PCA的区别

​ 应用PCA算法前提是假设存在一个线性超平面,进而投影。那如果数据不是线性的, 就需要KPCA,数据集从 $n$ 维映射到线性可分的高维 N >n​,然后再从 ​N​维降维到一个低维度 n’(n’<n<N)$。

​ KPCA用到了核函数思想,使用了核函数的主成分分析一般称为核主成分分析(简称KPCA)。

假设高维空间数据由 n 维空间的数据通过映射产生。

​ $n$ 维空间的特征分解为:

​ 其映射为:

​ 通过在高维空间进行协方差矩阵的特征值分解,然后用和PCA一样的方法进行降维。由于KPCA需要核函数的运算,因此它的计算量要比PCA大很多。

7. LDA和PCA区别

异同点 LDA PCA
相同点 1. 两者均可以对数据进行降维;
2. 两者在降维时均使用了矩阵特征分解的思想;
3. 两者都假设数据符合高斯分布;
不同点 有监督的降维方法; 无监督的降维方法;
降维最多降到k-1维; 降维多少没有限制;
可以用于降维,还可以用于分类; 只用于降维;
选择分类性能最好的投影方向; 选择样本点投影具有最大方差的方向;
更明确,更能反映样本间差异; 目的较为模糊;

LDA线性判别分析

发表于 2019-08-13
字数统计: | 阅读时长 ≈

线性判别分析(LDA)

1. LDA思想总结

​ 线性判别分析LDA, 是一种经典的降维方法。和主成分分析PCA不考虑样本类别输出的无监督降维技术不同,LDA是一种监督学习的降维技术,数据集的每个样本有类别输出。

LDA分类思想简单总结如下:

  1. 多维空间中,数据处理分类问题较为复杂,LDA算法将多维空间中的数据投影到一条直线上,将d维数据转化成1维数据进行处理。
  2. 对于训练数据,设法将多维数据投影到一条直线上,同类数据的投影点尽可能接近,异类数据点尽可能远离。
  3. 对数据进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定样本的类别。 即“投影后类内方差最小,类间方差最大”。

​ 左图思路:让不同类别的平均点距离最远的投影方式。

​ 右图思路:让同类别的数据挨得最近的投影方式。

​ 从上图直观看出,右图红色数据和蓝色数据在各自的区域来说相对集中,根据数据分布直方图也可看出,所以右图的投影效果好于左图,左图中间直方图部分有明显交集。

​ 以上例子是基于数据是二维的,分类后的投影是一条直线。如果原始数据是多维的,则投影后的分类面是一低维的超平面。

2. LDA算法数学推导

​ 输入:数据集 D={(x1,y1),(x2,y2)……..(xm,ym)},其中样本xi 是n维向量,yi属于{0,1},降维后的目标维度 d。定义:

Uj为一类数据的中心点,假设投影直线是向量 w,对任意样本xi,它在直线 w上的投影为 w^t xi,两个类别的中心点 u0 , u1在直线 w 的投影分别为 w^tu0 、w^t u1。

定义内散度矩阵:

定义类间散度矩阵:

所以设定优化的目标为:

根据广义瑞利商的性质,矩阵Sw^-1Sb 的最大特征值为 J(w) 的最大值,矩阵Sw^-1Sb 的最大特征值对应的特征向量即为 w。

3. LDA算法流程

LDA算法降维流程如下:

步骤:

  1. 计算类内散度矩阵 Sw​。
  2. 计算类间散度矩阵 Sb 。
  3. 计算矩阵 Sw^-1 Sb 。
  4. 计算矩阵 Sw^-1 Sb 的最大的 d 个特征值。
  5. 计算 d 个特征值对应的 d 个特征向量,记投影矩阵为 W 。
  6. 转化样本集的每个样本,得到新样本 pi=W^T*xi。
  7. 输出新样本集

###

逻辑回归总结

发表于 2019-08-05
字数统计: | 阅读时长 ≈

1. 逻辑回归适用性

逻辑回归可用于以下几个方面:

(1)用于概率预测。用于可能性预测时,得到的结果有可比性。比如根据模型进而预测在不同的自变量情况下,发生某病或某种情况的概率有多大。

(2)用于分类。实际上跟预测有些类似,也是根据模型,判断某人属于某病或属于某种情况的概率有多大,也就是看一下这个人有多大的可能性是属于某病。进行分类时,仅需要设定一个阈值即可,可能性高于阈值是一类,低于阈值是另一类。

(3)寻找危险因素。寻找某一疾病的危险因素等。

(4)仅能用于线性问题。只有当目标和特征是线性关系时,才能用逻辑回归。在应用逻辑回归时注意两点:一是当知道模型是非线性时,不适用逻辑回归;二是当使用逻辑回归时,应注意选择和目标为线性关系的特征。

(5)各特征之间不需要满足条件独立假设,但各个特征的贡献独立计算。

2. 逻辑回归与朴素贝叶斯有什么区别

逻辑回归与朴素贝叶斯区别有以下几个方面:

(1)逻辑回归是判别模型, 朴素贝叶斯是生成模型,所以生成和判别的所有区别它们都有。

(2)朴素贝叶斯属于贝叶斯,逻辑回归是最大似然,两种概率哲学间的区别。

(3)朴素贝叶斯需要条件独立假设。

(4)逻辑回归需要求特征参数间是线性的。

3. 线性回归与逻辑回归的区别

线性回归与逻辑回归的区别如下描述:

(1)线性回归的样本的输出,都是连续值,而逻辑回归中只能取0和1。

(2)对于拟合函数也有本质上的差别:

​ 线性回归:

​ 逻辑回归:

​ 其中,

​ 可以看出,线性回归的拟合函数,是对f(x)的输出变量y的拟合,而逻辑回归的拟合函数是对为1类样本的概率的拟合。
​ 那么,为什么要以1类样本的概率进行拟合呢,为什么可以这样拟合呢?

这个时候就能看出区别,在线性回归中:$\theta ^{T}x$为预测值的拟合函数;而在逻辑回归中为决策边界。下表2-3为线性回归和逻辑回归的区别。

​ 表2-3 线性回归和逻辑回归的区别

线性回归 逻辑回归
目的 预测 分类
y^(i) 未知 (0,1)
函数 拟合函数 预测函数
参数计算方式 最小二乘法 极大似然估计

下面具体解释一下:

  1. 拟合函数和预测函数什么关系呢?简单来说就是将拟合函数做了一个逻辑函数的转换,转换后使得

  1. 最小二乘和最大似然估计可以相互替代吗?回答当然是不行了。我们来看看两者依仗的原理:最大似然估计是计算使得数据出现的可能性最大的参数,依仗的自然是Probability。而最小二乘是计算误差损失。

分类算法总结

发表于 2019-08-04
字数统计: | 阅读时长 ≈

分类算法总结

​ 分类算法和回归算法是对真实世界不同建模的方法。分类模型是认为模型的输出是离散的,例如大自然的生物被划分为不同的种类,是离散的。回归模型的输出是连续的,例如人的身高变化过程是一个连续过程,而不是离散的。

​ 因此,在实际建模过程时,采用分类模型还是回归模型,取决于你对任务(真实世界)的分析和理解。

1. 常用分类算法的优缺点?

​ 接下来我们介绍常用分类算法的优缺点,如表2-1所示。

​ 表2-1 常用分类算法的优缺点

算法 优点 缺点
Bayes 贝叶斯分类法 1)所需估计的参数少,对于缺失数据不敏感。
2)有着坚实的数学基础,以及稳定的分类效率。
1)需要假设属性之间相互独立,这往往并不成立。(喜欢吃番茄、鸡蛋,却不喜欢吃番茄炒蛋)。
2)需要知道先验概率。
3)分类决策存在错误率。
Decision Tree决策树 1)不需要任何领域知识或参数假设。
2)适合高维数据。
3)简单易于理解。
4)短时间内处理大量数据,得到可行且效果较好的结果。
5)能够同时处理数据型和常规性属性。
1)对于各类别样本数量不一致数据,信息增益偏向于那些具有更多数值的特征。
2)易于过拟合。
3)忽略属性之间的相关性。
4)不支持在线学习。
SVM支持向量机 1)可以解决小样本下机器学习的问题。
2)提高泛化性能。
3)可以解决高维、非线性问题。超高维文本分类仍受欢迎。
4)避免神经网络结构选择和局部极小的问题。
1)对缺失数据敏感。
2)内存消耗大,难以解释。
3)运行和调参略烦人。
KNN K近邻 1)思想简单,理论成熟,既可以用来做分类也可以用来做回归;
2)可用于非线性分类;
3)训练时间复杂度为O(n);
4)准确度高,对数据没有假设,对outlier不敏感;
1)计算量太大。
2)对于样本分类不均衡的问题,会产生误判。
3)需要大量的内存。
4)输出的可解释性不强。
Logistic Regression逻辑回归 1)速度快。
2)简单易于理解,直接看到各个特征的权重。
3)能容易地更新模型吸收新的数据。
4)如果想要一个概率框架,动态调整分类阀值。
特征处理复杂。需要归一化和较多的特征工程。
Neural Network 神经网络 1)分类准确率高。
2)并行处理能力强。
3)分布式存储和学习能力强。
4)鲁棒性较强,不易受噪声影响。
1)需要大量参数(网络拓扑、阀值、阈值)。
2)结果难以解释。
3)训练时间过长。
Adaboosting 1)adaboost是一种有很高精度的分类器。
2)可以使用各种方法构建子分类器,Adaboost算法提供的是框架。
3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单。
4)简单,不用做特征筛选。
5)不用担心overfitting。
对outlier比较敏感

2. 分类算法的评估方法

​ 分类评估方法主要功能是用来评估分类算法的好坏,而评估一个分类器算法的好坏又包括许多项指标。了解各种评估方法,在实际应用中选择正确的评估方法是十分重要的。

  • 几个常用术语
    1) True positives(TP): 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数;
    2) False positives(FP): 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数;
    3) False negatives(FN):被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数;
    4) True negatives(TN): 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实数。 

    ​ 表2-2 四个术语的混淆矩阵

​
​ 1)P=TP+FN表示实际为正例的样本个数。
​ 2)True、False描述的是分类器是否判断正确。
​ 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为负例。

  • 评价指标
    1) 正确率(accuracy)

    正确率是我们最常见的评价指标,accuracy = (TP+TN)/(P+N),正确率是被分对的样本数在所有样本数中的占比,通常来说,正确率越高,分类器越好。
    

    2) 错误率(error rate)

    错误率则与正确率相反,描述被分类器错分的比例,error rate = (FP+FN)/(P+N),对某一个实例来说,分对与分错是互斥事件,所以accuracy =1 -  error rate。
    

    3) 灵敏度(sensitivity)

    sensitivity = TP/P,表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力。
    

    4) 特异性(specificity)

    specificity = TN/N,表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力。
    

    5) 精度(precision)

    precision=TP/(TP+FP),精度是精确性的度量,表示被分为正例的示例中实际为正例的比例。
    

    6) 召回率(recall)

    召回率是覆盖面的度量,度量有多个正例被分为正例,recall=TP/(TP+FN)=TP/P=sensitivity,可以看到召回率与灵敏度是一样的。
    

    7) 其他评价指标

    计算速度:分类器训练和预测需要的时间;
    鲁棒性:处理缺失值和异常值的能力;
    可扩展性:处理大数据集的能力;
    可解释性:分类器的预测标准的可理解性,像决策树产生的规则就是很容易理解的,而神经网络的一堆参数就不好理解,我们只好把它看成一个黑盒子。
    

    8) 精度和召回率反映了分类器分类性能的两个方面。如果综合考虑查准率与查全率,可以得到新的评价指标F1-score,也称为综合分类率:$F1=\frac{2 \times precision \times recall}{precision + recall}​$。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    为了综合多个类别的分类情况,评测系统整体性能,经常采用的还有微平均F1(micro-averaging)和宏平均F1(macro-averaging )两种指标。

    (1)宏平均F1与微平均F1是以两种不同的平均方式求的全局F1指标。

    (2)宏平均F1的计算方法先对每个类别单独计算F1值,再取这些F1值的算术平均值作为全局指标。

    (3)微平均F1的计算方法是先累加计算各个类别的a、b、c、d的值,再由这些值求出F1值。

    (4)由两种平均F1的计算方式不难看出,宏平均F1平等对待每一个类别,所以它的值主要受到稀有类别的影响,而微平均F1平等考虑文档集中的每一个文档,所以它的值受到常见类别的影响比较大。
  • ROC曲线和PR曲线

    如图2-3,ROC曲线是(Receiver Operating Characteristic Curve,受试者工作特征曲线)的简称,是以灵敏度(真阳性率)为纵坐标,以1减去特异性(假阳性率)为横坐标绘制的性能评价曲线。可以将不同模型对同一数据集的ROC曲线绘制在同一笛卡尔坐标系中,ROC曲线越靠近左上角,说明其对应模型越可靠。也可以通过ROC曲线下面的面积(Area Under Curve, AUC)来评价模型,AUC越大,模型越可靠。

​ 图2-3 ROC曲线

​ PR曲线是Precision Recall Curve的简称,描述的是precision和recall之间的关系,以recall为横坐标,precision为纵坐标绘制的曲线。该曲线的所对应的面积AUC实际上是目标检测中常用的评价指标平均精度(Average Precision, AP)。AP越高,说明模型性能越好。

机器学习学习方式

发表于 2019-08-01
字数统计: | 阅读时长 ≈

机器学习学习方式

​ 根据数据类型的不同,对一个问题的建模有不同的方式。依据不同的学习方式和输入数据,机器学习主要分为以下四种学习方式。

1. 监督学习

​ 特点:监督学习是使用已知正确答案的示例来训练网络。已知数据和其一一对应的标签,训练一个预测模型,将输入数据映射到标签的过程。

​ 常见应用场景:监督式学习的常见应用场景如分类问题和回归问题。

​ 算法举例:常见的有监督机器学习算法包括支持向量机(Support Vector Machine, SVM),朴素贝叶斯(Naive Bayes),逻辑回归(Logistic Regression),K近邻(K-Nearest Neighborhood, KNN),决策树(Decision Tree),随机森林(Random Forest),AdaBoost以及线性判别分析(Linear Discriminant Analysis, LDA)等。深度学习(Deep Learning)也是大多数以监督学习的方式呈现。

2. 非监督式学习

​ 定义:在非监督式学习中,数据并不被特别标识,适用于你具有数据集但无标签的情况。学习模型是为了推断出数据的一些内在结构。

​ 常见应用场景:常见的应用场景包括关联规则的学习以及聚类等。

​ 算法举例:常见算法包括Apriori算法以及k-Means算法。

3. 半监督式学习

​ 特点:在此学习方式下,输入数据部分被标记,部分没有被标记,这种学习模型可以用来进行预测。

​ 常见应用场景:应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,通过对已标记数据建模,在此基础上,对未标记数据进行预测。

​ 算法举例:常见算法如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM)等。

4. 弱监督学习

​ 特点:弱监督学习可以看做是有多个标记的数据集合,次集合可以是空集,单个元素,或包含多种情况(没有标记,有一个标记,和有多个标记)的多个元素。 数据集的标签是不可靠的,这里的不可靠可以是标记不正确,多种标记,标记不充分,局部标记等。已知数据和其一一对应的弱标签,训练一个智能算法,将输入数据映射到一组更强的标签的过程。标签的强弱指的是标签蕴含的信息量的多少,比如相对于分割的标签来说,分类的标签就是弱标签。

​ 算法举例:举例,给出一张包含气球的图片,需要得出气球在图片中的位置及气球和背景的分割线,这就是已知弱标签学习强标签的问题。

​ 在企业数据应用的场景下, 人们最常用的可能就是监督式学习和非监督式学习的模型。 在图像识别等领域,由于存在大量的非标识的数据和少量的可标识数据, 目前半监督式学习是一个很热的话题。

5. 监督学习有哪些步骤

​ 监督学习是使用已知正确答案的示例来训练网络,每组训练数据有一个明确的标识或结果。想象一下,我们可以训练一个网络,让其从照片库中(其中包含气球的照片)识别出气球的照片。以下就是我们在这个假设场景中所要采取的步骤。

步骤1:数据集的创建和分类
​ 首先,浏览你的照片(数据集),确定所有包含气球的照片,并对其进行标注。然后,将所有照片分为训练集和验证集。目标就是在深度网络中找一函数,这个函数输入是任意一张照片,当照片中包含气球时,输出1,否则输出0。

步骤2:数据增强(Data Augmentation)
​ 当原始数据搜集和标注完毕,一般搜集的数据并不一定包含目标在各种扰动下的信息。数据的好坏对于机器学习模型的预测能力至关重要,因此一般会进行数据增强。对于图像数据来说,数据增强一般包括,图像旋转,平移,颜色变换,裁剪,仿射变换等。

步骤3:特征工程(Feature Engineering)
​ 一般来讲,特征工程包含特征提取和特征选择。常见的手工特征(Hand-Crafted Feature)有尺度不变特征变换(Scale-Invariant Feature Transform, SIFT),方向梯度直方图(Histogram of Oriented Gradient, HOG)等。由于手工特征是启发式的,其算法设计背后的出发点不同,将这些特征组合在一起的时候有可能会产生冲突,如何将组合特征的效能发挥出来,使原始数据在特征空间中的判别性最大化,就需要用到特征选择的方法。在深度学习方法大获成功之后,人们很大一部分不再关注特征工程本身。因为,最常用到的卷积神经网络(Convolutional Neural Networks, CNNs)本身就是一种特征提取和选择的引擎。研究者提出的不同的网络结构、正则化、归一化方法实际上就是深度学习背景下的特征工程。

步骤4:构建预测模型和损失
​ 将原始数据映射到特征空间之后,也就意味着我们得到了比较合理的输入。下一步就是构建合适的预测模型得到对应输入的输出。而如何保证模型的输出和输入标签的一致性,就需要构建模型预测和标签之间的损失函数,常见的损失函数(Loss Function)有交叉熵、均方差等。通过优化方法不断迭代,使模型从最初的初始化状态一步步变化为有预测能力的模型的过程,实际上就是学习的过程。

步骤5:训练
​ 选择合适的模型和超参数进行初始化,其中超参数比如支持向量机中核函数、误差项惩罚权重等。当模型初始化参数设定好后,将制作好的特征数据输入到模型,通过合适的优化方法不断缩小输出与标签之间的差距,当迭代过程到了截止条件,就可以得到训练好的模型。优化方法最常见的就是梯度下降法及其变种,使用梯度下降法的前提是优化目标函数对于模型是可导的。

步骤6:验证和模型选择
​ 训练完训练集图片后,需要进行模型测试。利用验证集来验证模型是否可以准确地挑选出含有气球在内的照片。
​ 在此过程中,通常会通过调整和模型相关的各种事物(超参数)来重复步骤2和3,诸如里面有多少个节点,有多少层,使用怎样的激活函数和损失函数,如何在反向传播阶段积极有效地训练权值等等。

步骤7:测试及应用
​ 当有了一个准确的模型,就可以将该模型部署到你的应用程序中。你可以将预测功能发布为API(Application Programming Interface, 应用程序编程接口)调用,并且你可以从软件中调用该API,从而进行推理并给出相应的结果。

EM算法

发表于 2019-07-23
字数统计: | 阅读时长 ≈

EM算法

1. EM算法基本思想

​ 最大期望算法(Expectation-Maximization algorithm, EM),是一类通过迭代进行极大似然估计的优化算法,通常作为牛顿迭代法的替代,用于对包含隐变量或缺失数据的概率模型进行参数估计。

​ 最大期望算法基本思想是经过两个步骤交替进行计算:

​ 第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;

​ 第二步是最大化(M),最大化在E步上求得的最大似然值来计算参数的值。

​ M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。

2. EM算法推导

​ 对于m个样本观察数据x=(x^{1},x^{2},…,x^{m}),现在想找出样本的模型参数\thet

a,其极大化模型分布的对数似然函数为:

如果得到的观察数据有未观察到的隐含数据z=(z^{(1)},z^{(2)},…z^{(m)}),极大化模型分布的对数似然函数则为:

由于上式不能直接求出\theta,采用缩放技巧:

上式用到了Jensen不等式:

并且引入了一个未知的新分布Q_i(z^{(i)})。

此时,如果需要满足Jensen不等式中的等号,所以有:

​

由于Q_i(z^{(i)})是一个分布,所以满足

​

综上,可得:

如果Q_i(z^{(i)}) = P( z^{(i)}|x^{(i)};\theta),则第(1)式是我们的包含隐藏数据的对数似然的一个下界。如果我们能极大化这个下界,则也在尝试极大化我们的对数似然。即我们需要最大化下式:

简化得:

以上即为EM算法的M步,\sum\limits_{z^{(i)}}Q_i(z^{(i)})log{P(x^{(i)}, z^{(i)};\theta)}​可理解为logP(x^{(i)}, z^{(i)};\theta) 基于条件概率分布Q_i(z^{(i)}) 的期望。以上即为EM算法中E步和M步的具体数学含义。

3. 图解EM算法​

考虑上一节中的(a)式,表达式中存在隐变量,直接找到参数估计比较困难,通过EM算法迭代求解下界的最大值到收敛为止。

​ 图片中的紫色部分是我们的目标模型p(x|\theta),该模型复杂,难以求解析解,为了消除隐变量z^{(i)}的影响,我们可以选择一个不包含$z^{(i)}$的模型r(x|\theta),使其满足条件r(x|\theta) \leqslant p(x|\theta) 。

求解步骤如下:

(1)选取\theta_1,使得r(x|\theta_1) = p(x|\theta_1),然后对此时的r求取最大值,得到极值点\theta_2,实现参数的更新。

(2)重复以上过程到收敛为止,在更新过程中始终满足r \leqslant p .

4. EM算法流程

输入:观察数据x=(x^{(1)},x^{(2)},…x^{(m)}),联合分布p(x,z ;\theta),条件分布p(z|x; \theta),最大迭代次数J

1)随机初始化模型参数\theta的初值\theta^0。

2)for j from 1 to j:

​ a) E步。计算联合分布的条件概率期望:

​ b) M步。极大化$L(\theta, \theta^{j})$,得到\theta^{j+1}$\:

​ c) 如果\theta^{j+1}收敛,则算法结束。否则继续回到步骤a)进行E步迭代。

输出:模型参数\theta​。

OpenCV:使用普通摄像头进行深度估计

发表于 2019-07-16
字数统计: | 阅读时长 ≈

OpenCV:使用普通摄像头进行深度估计

1.双目视觉测距原理

(1)理想情况

双目立体视觉是基于视差原理,从双目相机中获取的多幅图像中恢复被测物体三维几何信息的方法。如图,对于空间物体表面任意一点,如果从左右2个摄像机同时观察P,并能确定在左摄像机图像上的点Pl与右摄像机图像上的点Pr是空间同一点P的图像点(称Pl与Pr,为共轭对应点),则可计算出空间点P的三维坐标(包含距离信息)。基于双目立体视觉的测距系统包含摄像机标定、立体校正、立体匹配和三维重建等步骤。

理想双目相机成像模型

(1)计算原理

根据三角形相似原理:

z/f=(x-b)/xr=x/xl=y/yl

解方程得:

z=bf/d, x=zxl/d, y=z*y/f

由此可知:想要得到距离z,必须知道:

1、相机焦距f,左右相机基线b(可以通过先验信息或者相机标定得到)。
2、视差 :d=xl-xr,即左相机像素点(xl, yl)和右相机中对应点(xr, yr)的关系,这是双目视觉的核心问题。

(2)极线约束

对于左图中的一个像素点,来确定该点在右图中的位置,不需要在整个图像中地毯式搜索,需要用到极线约束。如上图所示。O1,O2是两个相机,P是空间中的一个点,P和两个相机中心点O1、O2形成了三维空间中的一个平面PO1O2,称为极平面(Epipolar plane)。极平面和两幅图像相交于两条直线,这两条直线称为极线(Epipolar line)。P在相机O1中的成像点是P1,在相机O2中的成像点是P2,但是P的位置是未知的。我们的目标是:对于左图的P1点,寻找它在右图中的对应点P2,这样就能确定P点的空间位置。极线约束(Epipolar Constraint)是指当空间点在两幅图像上分别成像时,已知左图投影点p1,那么对应右图投影点p2一定在相对于p1的极线上,这样可以极大的缩小匹配范围。即P2一定在对应极线上,所以只需要沿着极线搜索便可以找到P1的对应点P2。

当两个相机光心不是处于同一水平面时:这种情况下拍摄的两张左右图片,右图中对应的极线是右图中的多条直线,也就是对应的搜索区域。这多条直线并不是水平的,如果进行逐点搜索效率非常低。

(3)图像矫正技术:

像矫正是通过分别对两张图片用单应性矩阵变换得到,目的是把两个不同方向的图像平面(下图中灰色平面)重新投影到同一个平面且光轴互相平行(下图中黄色平面),这样转化为理想情况的模型。

经过图像矫正后,左图中的像素点只需要沿着水平的极线方向搜索对应点,从下图中我们可以看到三个点对应的视差(红色双箭头线段)是不同的,越远的物体视差越小,越近的物体视差越大。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#使用普通摄像头进行深度估计


import cv2
import numpy as np

def update(val=0):
stereo.setBlockSize(cv2.getTrackbarPos('window_size','disparity'))
stereo.setUniquenessRatio(cv2.getTrackbarPos('uniquenessRatio','disparity'))
stereo.setSpeckleWindowSize(cv2.getTrackbarPos('speckleRange','disparity'))
stereo.setSpeckleRange(cv2.getTrackbarPos('speckleRange','disparity'))
stereo.setDisp12MaxDiff(cv2.getTrackbarPos('disp12MaxDiff','disparity'))

print('computing disparity.......')
disp=stereo.compute(imgL,imgR).astype(np.float32)/16.0

cv2.imshow('left',imgL)
cv2.imshow('right',imgR)
cv2.imshow('disparity',(disp-min_disp)/num_disp)

#创建窗口,设置初始值
cv2.namedWindow('disparity')
cv2.createTrackbar('speckleRange','disparity',speckleRange,50,update)
cv2.createTrackbar('window_size','disparity',window_size,21,update)
cv2.createTrackbar('speckleWindowSize','disparity',speckleWindowSize,200,update)
cv2.createTrackbar('uniquenessRatio','disparity',uniquenessRatio,50,update)
cv2.createTrackbar('disp12MaxDiff','disparity',disp12MaxDiff,250,update)
#创建stereoSGBM算法的实例
stereo=cv2.StereoSGBM_create(
minDisparity=min_disp,
numDisparities=num_disp,
blockSize=window_size,
uniquenessRatio=uniquenessRatio,
speckleRange=speckleRange,
speckleWindowSize=speckleWindowSize,
disp12MaxDiff=disp12MaxDiff,
P1=p1,
P2=p2
)
update()
cv2.waitKey(0)

运行结果:

12…5

Yu-shui

46 日志
GitHub
© 2019 Yu-shui | Site words total count:
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4