1. 各种遥感数据分类方法比较
常用的遥感数据的专题分类方法有多种,从分类判别决策方法的角度可以分为统计分类器、神经网络分类器、专家系统分类器等;从是否需要训练数据方面,又可以分为监督分类器和非监督分类器。
一、统计分类方法
统计分类方法分为非监督分类方法和监督分类方法。非监督分类方法不需要通过选取已知类别的像元进行分类器训练,而监督分类方法则需要选取一定数量的已知类别的像元对分类器进行训练,以估计分类器中的参数。非监督分类方法不需要任何先验知识,也不会因训练样本选取而引入认为误差,但非监督分类得到的自然类别常常和研究感兴趣的类别不匹配。相应地,监督分类一般需要预先定义分类类别,训练数据的选取可能会缺少代表性,但也可能在训练过程中发现严重的分类错误。
1.非监督分类器
非监督分类方法一般为聚类算法。最常用的聚类非监督分类方法是 K-均值(K-Means Algorithm)聚类方法(Duda and Hart,1973)和迭代自组织数据分析算法(ISODATA)。其算法描述可见于一般的统计模式识别文献中。
一般通过简单的聚类方法得到的分类结果精度较低,因此很少单独使用聚类方法进行遥感数据专题分类。但是,通过对遥感数据进行聚类分析,可以初步了解各类别的分布,获取最大似然监督分类中各类别的先验概率。聚类分析最终的类别的均值矢量和协方差矩阵可以用于最大似然分类过程(Schowengerdt,1997)。
2.监督分类器
监督分类器是遥感数据专题分类中最常用的一种分类器。和非监督分类器相比,监督分类器需要选取一定数量的训练数据对分类器进行训练,估计分类器中的关键参数,然后用训练后的分类器将像元划分到各类别。监督分类过程一般包括定义分类类别、选择训练数据、训练分类器和最终像元分类四个步骤(Richards,1997)。每一步都对最终分类的不确定性有显著影响。
监督分类器又分为参数分类器和非参数分类器两种。参数分类器要求待分类数据满足一定的概率分布,而非参数分类器对数据的概率分布没有要求。
遥感数据分类中常用的分类器有最大似然分类器、最小距离分类器、马氏距离分类器、K-最近邻分类器(K-Nearest neighborhood classifier,K-NN)以及平行六面体分类器(parallelepiped classifier)。最大似然、最小距离和马氏距离分类器在第三章已经详细介绍。这里简要介绍 K-NN 分类器和平行六面体分类器。
K-NN分类器是一种非参数分类器。该分类器的决策规则是:将像元划分到在特征空间中与其特征矢量最近的训练数据特征矢量所代表的类别(Schowengerdt,1997)。当分类器中 K=1时,称为1-NN分类器,这时以离待分类像元最近的训练数据的类别作为该像元的类别;当 K >1 时,以待分类像元的 K 个最近的训练数据中像元数量最多的类别作为该像元的类别,也可以计算待分类像元与其 K 个近邻像元特征矢量的欧氏距离的倒数作为权重,以权重值最大的训练数据的类别作为待分类像元的类别。Hardin,(1994)对 K-NN分类器进行了深入的讨论。
平行六面体分类方法是一个简单的非参数分类算法。该方法通过计算训练数据各波段直方图的上限和下限确定各类别像元亮度值的范围。对每一类别来说,其每个波段的上下限一起就形成了一个多维的盒子(box)或平行六面体(parallelepiped)。因此 M 个类别就有M 个平行六面体。当待分类像元的亮度值落在某一类别的平行六面体内时,该像元就被划分为该平行六面体代表的类别。平行六面体分类器可以用图5-1中两波段的遥感数据分类问题来表示。图中的椭圆表示从训练数据估计的各类别亮度值分布,矩形表示各类别的亮度值范围。像元的亮度落在哪个类别的亮度范围内,就被划分为哪个类别。
图5-1 平行六面体分类方法示意图
3.统计分类器的评价
各种统计分类器在遥感数据分类中的表现各不相同,这既与分类算法有关,又与数据的统计分布特征、训练样本的选取等因素有关。
非监督聚类算法对分类数据的统计特征没有要求,但由于非监督分类方法没有考虑任何先验知识,一般分类精度比较低。更多情况下,聚类分析被作为非监督分类前的一个探索性分析,用于了解分类数据中各类别的分布和统计特征,为监督分类中类别定义、训练数据的选取以及最终的分类过程提供先验知识。在实际应用中,一般用监督分类方法进行遥感数据分类。
最大似然分类方法是遥感数据分类中最常用的分类方法。最大似然分类属于参数分类方法。在有足够多的训练样本、一定的类别先验概率分布的知识,且数据接近正态分布的条件下,最大似然分类被认为是分类精度最高的分类方法。但是当训练数据较少时,均值和协方差参数估计的偏差会严重影响分类精度。Swain and Davis(1978)认为,在N维光谱空间的最大似然分类中,每一类别的训练数据样本至少应该达到10×N个,在可能的条件下,最好能达到100×N以上。而且,在许多情况下,遥感数据的统计分布不满足正态分布的假设,也难以确定各类别的先验概率。
最小距离分类器可以认为是在不考虑协方差矩阵时的最大似然分类方法。当训练样本较少时,对均值的估计精度一般要高于对协方差矩阵的估计。因此,在有限的训练样本条件下,可以只估计训练样本的均值而不计算协方差矩阵。这样最大似然算法就退化为最小距离算法。由于没有考虑数据的协方差,类别的概率分布是对称的,而且各类别的光谱特征分布的方差被认为是相等的。很显然,当有足够训练样本保证协方差矩阵的精确估计时,最大似然分类结果精度要高于最小距离精度。然而,在训练数据较少时,最小距离分类精度可能比最大似然分类精度高(Richards,1993)。而且最小距离算法对数据概率分布特征没有要求。
马氏距离分类器可以认为是在各类别的协方差矩阵相等时的最大似然分类。由于假定各类别的协方差矩阵相等,和最大似然方法相比,它丢失了各类别之间协方差矩阵的差异的信息,但和最小距离法相比较,它通过协方差矩阵保持了一定的方向灵敏性(Richards,1993)。因此,马氏距离分类器可以认为是介于最大似然和最小距离分类器之间的一种分类器。与最大似然分类一样,马氏距离分类器要求数据服从正态分布。
K-NN分类器的一个主要问题是需要很大的训练数据集以保证分类算法收敛(Devijver and Kittler,1982)。K-NN分类器的另一个问题是,训练样本选取的误差对分类结果有很大的影响(Cortijo and Blanca,1997)。同时,K-NN分类器的计算复杂性随着最近邻范围的扩大而增加。但由于 K-NN分类器考虑了像元邻域上的空间关系,和其他光谱分类器相比,分类结果中“椒盐现象”较少。
平行六面体分类方法的优点在于简单,运算速度快,且不依赖于任何概率分布要求。它的缺陷在于:首先,落在所有类别亮度值范围之外的像元只能被分类为未知类别;其次,落在各类别亮度范围重叠区域内的像元难以区分其类别(如图5-1所示)。
各种统计分类方法的特点可以总结为表5-1。
二、神经网络分类器
神经网络用于遥感数据分类的最大优势在于它平等地对待多源输入数据的能力,即使这些输入数据具有完全不同的统计分布,但是由于神经网络内部各层大量的神经元之间连接的权重是不透明的,因此用户难以控制(Austin,Harding and Kanellopoulos et al.,1997)。
神经网络遥感数据分类被认为是遥感数据分类的热点研究领域之一(Wilkinson,1996;Kimes,1998)。神经网络分类器也可分为监督分类器和非监督分类器两种。由于神经网络分类器对分类数据的统计分布没有任何要求,因此神经网络分类器属于非参数分类器。
遥感数据分类中最常用的神经网络是多层感知器模型(multi-layer percep-tron,MLP)。该模型的网络结构如图5-2所示。该网络包括三层:输入层、隐层和输出层。输入层主要作为输入数据和神经网络输入界面,其本身没有处理功能;隐层和输出层的处理能力包含在各个结点中。输入的结构一般为待分类数据的特征矢量,一般情况下,为训练像元的多光谱矢量,每个结点代表一个光谱波段。当然,输入结点也可以为像元的空间上下文信息(如纹理)等,或多时段的光谱矢量(Paola and Schowengerdt,1995)。
表5-1 各种统计分类器比较
图5-2 多层感知器神经网络结构
对于隐层和输出层的结点来说,其处理过程是一个激励函数(activation function)。假设激励函数为f(S),对隐层结点来说,有:
遥感信息的不确定性研究
其中,pi为隐层结点的输入;hj为隐层结点的输出;w为联接各层神经之间的权重。
对输出层来说,有如下关系:
遥感信息的不确定性研究
其中,hj为输出层的输入;ok为输出层的输出。
激励函数一般表达为:
遥感信息的不确定性研究
确定了网络结构后,就要对网络进行训练,使网络具有根据新的输入数据预测输出结果的能力。最常用的是后向传播训练算法(Back-Propagation)。这一算法将训练数据从输入层进入网络,随机产生各结点连接权重,按式(5-1)(5-2)和(5-3)中的公式进行计算,将网络输出与预期的结果(训练数据的类别)相比较并计算误差。这个误差被后向传播的网络并用于调整结点间的连接权重。调整连接权重的方法一般为delta规则(Rumelhart,et al.,1986):
遥感信息的不确定性研究
其中,η为学习率(learning rate);δk为误差变化率;α为动量参数。
将这样的数据的前向和误差后向传播过程不断迭代,直到网络误差减小到预设的水平,网络训练结束。这时就可以将待分类数据输入神经网络进行分类。
除了多层感知器神经网络模型,其他结构的网络模型也被用于遥感数据分类。例如,Kohonen自组织网络被广泛用于遥感数据的非监督聚类分析(Yoshida et al.,1994;Schaale et al.,1995);自适应共振理论(Adaptive Resonance Theory)网络(Silva,S and Caetano,M.1997)、模糊ART图(Fuzzy ART Maps)(Fischer,M.M and Gopal,S,1997)、径向基函数(骆剑承,1999)等也被用于遥感数据分类。
许多因素影响神经网络的遥感数据分类精度。Foody and Arora(1997)认为神经网络结构、遥感数据的维数以及训练数据的大小是影响神经网络分类的重要因素。
神经网络结构,特别是网络的层数和各层神经元的数量是神经网络设计最关键的问题。网络结构不但影响分类精度,而且对网络训练时间有直接影响(Kavzoglu and Mather,1999)。对用于遥感数据分类的神经网络来说,由于输入层和输出层的神经元数目分别由遥感数据的特征维数和总的类别数决定的,因此网络结构的设计主要解决隐层的数目和隐层的神经元数目。一般过于复杂的网络结构在刻画训练数据方面较好,但分类精度较低,即“过度拟合”现象(over-fit)。而过于简单的网络结构由于不能很好的学习训练数据中的模式,因此分类精度低。
网络结构一般是通过实验的方法来确定。Hirose等(1991)提出了一种方法。该方法从一个小的网络结构开始训练,每次网络训练陷入局部最优时,增加一个隐层神经元,然后再训练,如此反复,直到网络训练收敛。这种方法可能导致网络结构过于复杂。一种解决办法是每当认为网络收敛时,减去最近一次加入的神经元,直到网络不再收敛,那么最后一次收敛的网络被认为是最优结构。这种方法的缺点是非常耗时。“剪枝法”(pruning)是另一种确定神经网络结构的方法。和Hirose等(1991)的方法不同,“剪枝法”从一个很大的网络结构开始,然后逐步去掉认为多余的神经元(Sietsma and Dow,1988)。从一个大的网络开始的优点是,网络学习速度快,对初始条件和学习参数不敏感。“剪枝”过程不断重复,直到网络不再收敛时,最后一次收敛的网络被认为最优(Castellano,Fanelli and Pelillo,1997)。
神经网络训练需要训练数据样本的多少随不同的网络结构、类别的多少等因素变化。但是,基本要求是训练数据能够充分描述代表性的类别。Foody等(1995)认为训练数据的大小对遥感分类精度有显著影响,但和统计分类器相比,神经网络的训练数据可以比较少。
分类变量的数据维对分类精度的影响是遥感数据分类中的普遍问题。许多研究表明,一般类别之间的可分性和最终的分类精度会随着数据维数的增大而增高,达到某一点后,分类精度会随数据维的继续增大而降低(Shahshahani and Landgrebe,1994)。这就是有名的Hughes 现象。一般需要通过特征选择去掉信息相关性高的波段或通过主成分分析方法去掉冗余信息。分类数据的维数对神经网络分类的精度同样有明显影响(Battiti,1994),但Hughes 现象没有传统统计分类器中严重(Foody and Arora,1997)。
Kanellopoulos(1997)通过长期的实践认为一个有效的ANN模型应考虑以下几点:合适的神经网络结构、优化学习算法、输入数据的预处理、避免振荡、采用混合分类方法。其中混合模型包括多种ANN模型的混合、ANN与传统分类器的混合、ANN与知识处理器的混合等。
三、其他分类器
除了上述统计分类器和神经网络分类器,还有多种分类器被用于遥感图像分类。例如模糊分类器,它是针对地面类别变化连续而没有明显边界情况下的一种分类器。它通过模糊推理机制确定像元属于每一个类别的模糊隶属度。一般的模糊分类器有模糊C均值聚类法、监督模糊分类方法(Wang,1990)、混合像元模型(Foody and Cox,1994;Settle and Drake,1993)以及各种人工神经网络方法等(Kanellopoulos et al.,1992;Paola and Schowengerdt,1995)。由于模糊分类的结果是像元属于每个类别的模糊隶属度,因此也称其为“软分类器”,而将传统的分类方法称为“硬分类器”。
另一类是上下文分类器(contextual classifier),它是一种综合考虑图像光谱和空间特征的分类器。一般的光谱分类器只是考虑像元的光谱特征。但是,在遥感图像中,相邻的像元之间一般具有空间自相关性。空间自相关程度强的像元一般更可能属于同一个类别。同时考虑像元的光谱特征和空间特征可以提高图像分类精度,并可以减少分类结果中的“椒盐现象”。当类别之间的光谱空间具有重叠时,这种现象会更明显(Cortijo et al.,1995)。这种“椒盐现象”可以通过分类的后处理滤波消除,也可以通过在分类过程中加入代表像元邻域关系的信息解决。
在分类过程中可以通过不同方式加入上下文信息。一是在分类特征中加入图像纹理信息;另一种是图像分割技术,包括区域增长/合并常用算法(Ketting and Landgrebe,1976)、边缘检测方法、马尔可夫随机场方法。Rignot and Chellappa(1992)用马尔可夫随机场方法进行SAR图像分类,取得了很好的效果,Paul Smits(1997)提出了保持边缘细节的马尔可夫随机场方法,并用于SAR图像的分类;Crawford(1998)将层次分类方法和马尔可夫随机场方法结合进行SAR图像分类,得到了更高的精度;Cortijo(1997)用非参数光谱分类对遥感图像分类,然后用ICM算法对初始分类进行上下文校正。
2. 基于R语言的梯度推进算法介绍
基于R语言的梯度推进算法介绍
通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法。通过大量数据科学竞赛的试炼,我们可以发现人们更钟爱于Boosting算法,这是因为和其他方法相比,它在产生类似的结果时往往更加节约时间。
Boosting算法有很多种,比如梯度推进(Gradient Boosting)、XGBoost、AdaBoost、Gentle Boost等等。每一种算法都有自己不同的理论基础,通过对它们进行运用,算法之间细微的差别也能够被我们所察觉。如果你是一个新手,那么太好了,从现在开始,你可以用大约一周的时间来了解和学习这些知识。
在本文中,笔者将会向你介绍梯度推进算法的基本概念及其复杂性,此外,文中还分享了一个关于如何在R语言中对该算法进行实现的例子。
快问快答每当谈及Boosting算法,下列两个概念便会频繁的出现:Bagging和Boosting。那么,这两个概念是什么,它们之间究竟有什么区别呢?让我们快速简要地在这里解释一下:
Bagging:对数据进行随机抽样、建立学习算法并且通过简单平均来得到最终概率结论的一种方法。
Boosting:与Bagging类似,但在样本选择方面显得更为聪明一些——在算法进行过程中,对难以进行分类的观测值赋予了越来越大的权重。
我们知道你可能会在这方面产生疑问:什么叫做越来越大?我怎么知道我应该给一个被错分的观测值额外增加多少的权重呢?请保持冷静,我们将在接下来的章节里为你解答。
从一个简单的例子出发假设你有一个初始的预测模型M需要进行准确度的提高,你知道这个模型目前的准确度为80%(通过任何形式度量),那么接下来你应该怎么做呢?
有一个方法是,我们可以通过一组新的输入变量来构建一个全新的模型,然后对它们进行集成学习。但是,笔者在此要提出一个更简单的建议,如下所示:
Y= M(x) + error
如果我们能够观测到误差项并非白噪声,而是与我们的模型输出(Y)有着相同的相关性,那么我们为什么不通过这个误差项来对模型的准确度进行提升呢?比方说:
error = G(x) + error2
或许,你会发现模型的准确率提高到了一个更高的数字,比如84%。那么下一步让我们对error2进行回归。
error2 = H(x) + error3
然后我们将上述式子组合起来:
Y = M(x) + G(x) + H(x) + error3
这样的结果可能会让模型的准确度更进一步,超过84%。如果我们能像这样为三个学习算法找到一个最佳权重分配,
Y = alpha * M(x) + beta * G(x) + gamma * H(x) + error4
那么,我们可能就构建了一个更好的模型。
上面所述的便是Boosting算法的一个基本原则,当我初次接触到这一理论时,我的脑海中很快地冒出了这两个小问题:
1.我们如何判断回归/分类方程中的误差项是不是白噪声?如果无法判断,我们怎么能用这种算法呢?
2.如果这种算法真的这么强大,我们是不是可以做到接近100%的模型准确度?
接下来,我们将会对这些问题进行解答,但是需要明确的是,Boosting算法的目标对象通常都是一些弱算法,而这些弱算法都不具备只保留白噪声的能力;其次,Boosting有可能导致过度拟合,所以我们必须在合适的点上停止这个算法。
试着想象一个分类问题请看下图:
从最左侧的图开始看,那条垂直的线表示我们运用算法所构建的分类器,可以发现在这幅图中有3/10的观测值的分类情况是错误的。接着,我们给予那三个被误分的“+”型的观测值更高的权重,使得它们在构建分类器时的地位非常重要。这样一来,垂直线就直接移动到了接近图形右边界的位置。反复这样的过程之后,我们在通过合适的权重组合将所有的模型进行合并。
算法的理论基础我们该如何分配观测值的权重呢?
通常来说,我们从一个均匀分布假设出发,我们把它称为D1,在这里,n个观测值分别被分配了1/n的权重。
步骤1:假设一个α(t);
步骤2:得到弱分类器h(t);
步骤3:更新总体分布,
其中,
步骤4:再次运用新的总体分布去得到下一个分类器;
觉得步骤3中的数学很可怕吗?让我们来一起击破这种恐惧。首先,我们简单看一下指数里的参数,α表示一种学习率,y是实际的回应值(+1或-1),而h(x)则是分类器所预测的类别。简单来说,如果分类器预测错了,这个指数的幂就变成了1 *α, 反之则是-1*α。也就是说,如果某观测值在上一次预测中被预测错误,那么它对应的权重可能会增加。那么,接下来该做什么呢?
步骤5:不断重复步骤1-步骤4,直到无法发现任何可以改进的地方;
步骤6:对所有在上面步骤中出现过的分类器或是学习算法进行加权平均,权重如下所示:
案例练习
最近我参加了由Analytics Vidhya组织的在线hackathon活动。为了使变量变换变得容易,在complete_data中我们合并了测试集与训练集中的所有数据。我们将数据导入,并且进行抽样和分类。
library(caret)rm(list=ls())setwd("C:Usersts93856DesktopAV")library(Metrics)complete <- read.csv("complete_data.csv", stringsAsFactors = TRUE)train <- complete[complete$Train == 1,]score <- complete[complete$Train != 1,]set.seed(999)ind <- sample(2, nrow(train), replace=T, prob=c(0.60,0.40))trainData<-train[ind==1,]testData <- train[ind==2,]set.seed(999)ind1 <- sample(2, nrow(testData), replace=T, prob=c(0.50,0.50))trainData_ens1<-testData[ind1==1,]testData_ens1 <- testData[ind1==2,]table(testData_ens1$Disbursed)[2]/nrow(testData_ens1)#Response Rate of 9.052%
接下来,就是构建一个梯度推进模型(Gradient Boosting Model)所要做的:
fitControl <- trainControl(method = "repeatedcv", number = 4, repeats = 4)trainData$outcome1 <- ifelse(trainData$Disbursed == 1, "Yes","No")set.seed(33)gbmFit1 <- train(as.factor(outcome1) ~ ., data = trainData[,-26], method = "gbm", trControl = fitControl,verbose = FALSE)gbm_dev <- predict(gbmFit1, trainData,type= "prob")[,2]gbm_ITV1 <- predict(gbmFit1, trainData_ens1,type= "prob")[,2]gbm_ITV2 <- predict(gbmFit1, testData_ens1,type= "prob")[,2]auc(trainData$Disbursed,gbm_dev)auc(trainData_ens1$Disbursed,gbm_ITV1)auc(testData_ens1$Disbursed,gbm_ITV2)
在上述案例中,运行代码后所看到的所有AUC值将会非常接近0.84。我们随时欢迎你对这段代码进行进一步的完善。在这个领域,梯度推进模型(GBM)是最为广泛运用的方法,在未来的文章里,我们可能会对GXBoost等一些更加快捷的Boosting算法进行介绍。
结束语笔者曾不止一次见识过Boosting算法的迅捷与高效,在Kaggle或是其他平台的竞赛中,它的得分能力从未令人失望,当然了,也许这要取决于你能够把特征工程(feature engineering)做得多好了。
以上是小编为大家分享的关于基于R语言的梯度推进算法介绍的相关内容,更多信息可以关注环球青藤分享更多干货
3. 机器学习一般常用的算法有哪些
机器学习是人工智能的核心技术,是学习人工智能必不可少的环节。机器学习中有很多算法,能够解决很多以前难以企的问题,机器学习中涉及到的算法有不少,下面小编就给大家普及一下这些算法。
一、线性回归
一般来说,线性回归是统计学和机器学习中最知名和最易理解的算法之一。这一算法中我们可以用来预测建模,而预测建模主要关注最小化模型误差或者尽可能作出最准确的预测,以可解释性为代价。我们将借用、重用包括统计学在内的很多不同领域的算法,并将其用于这些目的。当然我们可以使用不同的技术从数据中学习线性回归模型,例如用于普通最小二乘法和梯度下降优化的线性代数解。就目前而言,线性回归已经存在了200多年,并得到了广泛研究。使用这种技术的一些经验是尽可能去除非常相似(相关)的变量,并去除噪音。这是一种快速、简单的技术。
二、Logistic 回归
它是解决二分类问题的首选方法。Logistic 回归与线性回归相似,目标都是找到每个输入变量的权重,即系数值。与线性回归不同的是,Logistic 回归对输出的预测使用被称为 logistic 函数的非线性函数进行变换。logistic 函数看起来像一个大的S,并且可以将任何值转换到0到1的区间内。这非常实用,因为我们可以规定logistic函数的输出值是0和1并预测类别值。像线性回归一样,Logistic 回归在删除与输出变量无关的属性以及非常相似的属性时效果更好。它是一个快速的学习模型,并且对于二分类问题非常有效。
三、线性判别分析(LDA)
在前面我们介绍的Logistic 回归是一种分类算法,传统上,它仅限于只有两类的分类问题。而LDA的表示非常简单直接。它由数据的统计属性构成,对每个类别进行计算。单个输入变量的 LDA包括两个,第一就是每个类别的平均值,第二就是所有类别的方差。而在线性判别分析,进行预测的方法是计算每个类别的判别值并对具备最大值的类别进行预测。该技术假设数据呈高斯分布,因此最好预先从数据中删除异常值。这是处理分类预测建模问题的一种简单而强大的方法。
四、决策树
决策树是预测建模机器学习的一种重要算法。决策树模型的表示是一个二叉树。这是算法和数据结构中的二叉树,没什么特别的。每个节点代表一个单独的输入变量x和该变量上的一个分割点。而决策树的叶节点包含一个用于预测的输出变量y。通过遍历该树的分割点,直到到达一个叶节点并输出该节点的类别值就可以作出预测。当然决策树的有点就是决策树学习速度和预测速度都很快。它们还可以解决大量问题,并且不需要对数据做特别准备。
五、朴素贝叶斯
其实朴素贝叶斯是一个简单但是很强大的预测建模算法。而这个模型由两种概率组成,这两种概率都可以直接从训练数据中计算出来。第一种就是每个类别的概率,第二种就是给定每个 x 的值,每个类别的条件概率。一旦计算出来,概率模型可用于使用贝叶斯定理对新数据进行预测。当我们的数据是实值时,通常假设一个高斯分布,这样我们可以简单的估计这些概率。而朴素贝叶斯之所以是朴素的,是因为它假设每个输入变量是独立的。这是一个强大的假设,真实的数据并非如此,但是,该技术在大量复杂问题上非常有用。所以说,朴素贝叶斯是一个十分实用的功能。
六、K近邻算法
K近邻算法简称KNN算法,KNN 算法非常简单且有效。KNN的模型表示是整个训练数据集。KNN算法在整个训练集中搜索K个最相似实例(近邻)并汇总这K个实例的输出变量,以预测新数据点。对于回归问题,这可能是平均输出变量,对于分类问题,这可能是众数类别值。而其中的诀窍在于如何确定数据实例间的相似性。如果属性的度量单位相同,那么最简单的技术是使用欧几里得距离,我们可以根据每个输入变量之间的差值直接计算出来其数值。当然,KNN需要大量内存或空间来存储所有数据,但是只有在需要预测时才执行计算。我们还可以随时更新和管理训练实例,以保持预测的准确性。
七、Boosting 和 AdaBoost
首先,Boosting 是一种集成技术,它试图集成一些弱分类器来创建一个强分类器。这通过从训练数据中构建一个模型,然后创建第二个模型来尝试纠正第一个模型的错误来完成。一直添加模型直到能够完美预测训练集,或添加的模型数量已经达到最大数量。而AdaBoost 是第一个为二分类开发的真正成功的 boosting 算法。这是理解 boosting 的最佳起点。现代 boosting 方法建立在 AdaBoost 之上,最显著的是随机梯度提升。当然,AdaBoost 与短决策树一起使用。在第一个决策树创建之后,利用每个训练实例上树的性能来衡量下一个决策树应该对每个训练实例付出多少注意力。难以预测的训练数据被分配更多权重,而容易预测的数据分配的权重较少。依次创建模型,每一个模型在训练实例上更新权重,影响序列中下一个决策树的学习。在所有决策树建立之后,对新数据进行预测,并且通过每个决策树在训练数据上的精确度评估其性能。所以说,由于在纠正算法错误上投入了太多注意力,所以具备已删除异常值的干净数据十分重要。
八、学习向量量化算法(简称 LVQ)
学习向量量化也是机器学习其中的一个算法。可能大家不知道的是,K近邻算法的一个缺点是我们需要遍历整个训练数据集。学习向量量化算法(简称 LVQ)是一种人工神经网络算法,它允许你选择训练实例的数量,并精确地学习这些实例应该是什么样的。而学习向量量化的表示是码本向量的集合。这些是在开始时随机选择的,并逐渐调整以在学习算法的多次迭代中最好地总结训练数据集。在学习之后,码本向量可用于预测。最相似的近邻通过计算每个码本向量和新数据实例之间的距离找到。然后返回最佳匹配单元的类别值或作为预测。如果大家重新调整数据,使其具有相同的范围,就可以获得最佳结果。当然,如果大家发现KNN在大家数据集上达到很好的结果,请尝试用LVQ减少存储整个训练数据集的内存要求
4. 机器学习GBDT和XGBoosts有何区别
首先来了解一下boosting思想,每次训练单个弱分类器时,都将上一次分错的数据权重提高一点再进行当前单个弱分类器的学习,这样往后执行,训练出来的单个弱分类器就会越在意那些容易分错的点,最终通过加权求和的方式组合成一个最终的学习器,gradent boosting 是boosting的一种,每一次构建单个学习器时,是在之前建立的模型的损失函数的梯度下降方向, GB与Adaboost的区别在于:
AdaBoost是通过提升错分数据点的权重来定位模型的不足。
Gradient Boosting是通过算梯度(gradient)来定位模型的不足。
主要思想是,每一次建立单个学习器时,是在之前建立的模型的损失函数的梯度下降方向,损失函数越大,说明模型越容易出错,如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度方向上下降。
GBDT=GB+DT(decision tree),即基分类器为决策树时,这里的决策树是回归树。
Xgboost 是GB算法的高效实现,其中基分类器除了可以使CART也可以是线性分类器。
几大区别:
传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯帝回归或者线性回归
传统GBDT在优化时只用到了一阶导数,而xgboost对代价函数进行了二阶泰勒展开,用到了一阶和二阶导数
xgboost加入了正则项,防止过拟合
shrinkage,相当于学习率,在每完成一次迭代后,会乘上这个系数,削减每棵树的影响
列抽样,借鉴随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算。
5. 梯度下降中的线性搜索计算学习率是怎么理解
梯度下降法是一个最优化算法,通常也称为最速下降法。最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的。最速下降法是用负梯度方向为搜索方向的,最速下降法越接近目标值,步长越小,前进越慢。
梯度下降法可以用于求解非线性方程组。
顾名思义,梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值)。
表示梯度方向上的搜索步长。梯度方向我们可以通过对函数求导得到,步长的确定比较麻烦,太大了的话可能会发散,太小收敛速度又太慢。一般确定步长的方法是由线性搜索算法来确定,即把下一个点的坐标看做是ak+1的函数,然后求满足f(ak+1)的最小值即可。
因为一般情况下,梯度向量为0的话说明是到了一个极值点,此时梯度的幅值也为0.而采用梯度下降算法进行最优化求解时,算法迭代的终止条件是梯度向量的幅值接近0即可,可以设置个非常小的常数阈值。
6. 人工神经网络算法的学习率有什么作用
1、神经网络的结构(例如2输入3隐节点1输出)建好后,一般就要求神经网络里的权值和阈值。现在一般求解权值和阈值,都是采用梯度下降之类的搜索算法(梯度下降法、牛顿法、列文伯格-马跨特法、狗腿法等等)。
2、这些算法会先初始化一个解,在这个解的基础上,确定一个搜索方向和一个移动步长(各种法算确定方向和步长的方法不同,也就使各种算法适用于解决不同的问题),使初始解根据这个方向和步长移动后,能使目标函数的输出(在神经网络中就是预测误差)下降。
3、然后将它更新为新的解,再继续寻找下一步的移动方向的步长,这样不断的迭代下去,目标函数(神经网络中的预测误差)也不断下降,最终就能找到一个解,使得目标函数(预测误差)比较小。
4、而在寻解过程中,步长太大,就会搜索得不仔细,可能跨过了优秀的解,而步长太小,又会使寻解过程进行得太慢。因此,步长设置适当非常重要。
5、学习率对原步长(在梯度下降法中就是梯度的长度)作调整,如果学习率lr = 0.1,那么梯度下降法中每次调整的步长就是0.1*梯度,
6、而在matlab神经网络工具箱里的lr,代表的是初始学习率。因为matlab工具箱为了在寻解不同阶段更智能的选择合适的步长,使用的是可变学习率,它会根据上一次解的调整对目标函数带来的效果来对学习率作调整,再根据学习率决定步长。
7. caffe训练网络的时候学习率应该怎么设置
1、会更新,finetune的过程相当于继续训练,跟直接训练的区别是初始化的时候:
a. 直接训练是按照网络定义指定的方式初始化(如高斯随机初始化)
b. finetune是用你已经有的参数文件来初始化(就是之前训练好的caffemodel)
2、嗯,这个问题有两种情况:比如有4个全连接层A->B->C->D
a. 你希望C层的参数不会改变,C前面的AB层的参数也不会改变,这种情况也就是D层的梯度不往前反向传播到D层的输入blob(也就是C层的输出blob 没有得到梯度),你可以通过设置D层的propagate_down为false来做到。
propagate_down的数量与输入blob的数量相同,假如你某个层有2个输入blob,那么你应该在该layer的Param里面写上两行:
propagate_down : 0 # 第1个输入blob不会得到反向传播的梯度
propagate_down : 0 # 第2个输入blob不会得到反向传播的梯度
这样的话,你这个layer的梯度就不会反向传播啦,前面的所有layer的参数也就不会改变了
b. 你希望C层的参数不会改变,但是C前面的AB层的参数会改变,这种情况,只是固定了C层的参数,C层得到的梯度依然会反向传播给前面的B层。只需要将对应的参数blob的学习率调整为0:
你在layer里面加上param { lr_mult: 0 }就可以了,比如全连接层里面:
layer {
type: "InnerProct"
param { # 对应第1个参数blob的配置,也就是全连接层的参数矩阵的配置
lr_mult: 0 # 学习率为0,其他参数可以看caffe.proto里面的ParamSpec这个类型
}
param { # 对应第2个参数blob的配置,也就是全连接层的偏置项的配置
lr_mult: 0 # 学习率为0
}
}
不知道这样说你能不能理解
8. 分类器的选择
如果训练集很小,那么高偏差/低方差分类器(如朴素贝叶斯分类器)要优于低偏差/高方差分类器(如k近邻分类器),因为后者容易过拟合。然而,随着训练集的增大,低偏差/高方差分类器将开始胜出(它们具有较低的渐近误差),因为高偏差分类器不足以提供准确的模型。
你也可以认为这是生成模型与判别模型的区别。
一些特定算法的优点
朴素贝叶斯的优点:超级简单,你只是在做一串计算。如果朴素贝叶斯(NB)条件独立性假设成立,相比于逻辑回归这类的判别模型,朴素贝叶斯分类器将收敛得更快,所以你只需要较小的训练集。而且,即使NB假设不成立,朴素贝叶斯分类器在实践方面仍然表现很好。如果想得到简单快捷的执行效果,这将是个好的选择。它的主要缺点是,不能学习特征之间的相互作用(比如,它不能学习出:虽然你喜欢布拉德·皮特和汤姆·克鲁斯的电影,但却不喜欢他们一起合作的电影)。
逻辑回归的优点:有许多正则化模型的方法,你不需要像在朴素贝叶斯分类器中那样担心特征间的相互关联性。与决策树和支撑向量机不同,你还可以有一个很好的概率解释,并能容易地更新模型来吸收新数据(使用一个在线梯度下降方法)。如果你想要一个概率框架(比如,简单地调整分类阈值,说出什么时候是不太确定的,或者获得置信区间),或你期望未来接收更多想要快速并入模型中的训练数据,就选择逻辑回归。
决策树的优点:易于说明和解释(对某些人来说—我不确定自己是否属于这个阵营)。它们可以很容易地处理特征间的相互作用,并且是非参数化的,所以你不用担心异常值或者数据是否线性可分(比如,决策树可以很容易地某特征x的低端是类A,中间是类B,然后高端又是类A的情况)。一个缺点是,不支持在线学习,所以当有新样本时,你将不得不重建决策树。另一个缺点是,容易过拟合,但这也正是诸如随机森林(或提高树)之类的集成方法的切入点。另外,随机森林往往是很多分类问题的赢家(我相信通常略优于支持向量机),它们快速并且可扩展,同时你不须担心要像支持向量机那样调一堆参数,所以它们最近似乎相当受欢迎。
SVMs的优点:高准确率,为过拟合提供了好的理论保证,并且即使你的数据在基础特征空间线性不可分,只要选定一个恰当的核函数,它们仍然能够取得很好的分类效果。它们在超高维空间是常态的文本分类问题中尤其受欢迎。然而,它们内存消耗大,难于解释,运行和调参也有些烦人,因此,我认为随机森林正渐渐开始偷走它的“王冠”。
然而…
尽管如此,回忆一下,更好的数据往往打败更好的算法,设计好的特征大有裨益。并且,如果你有一个庞大数据集,这时你使用哪种分类算法在分类性能方面可能并不要紧(所以,要基于速度和易用性选择算法)。
重申我上面说的,如果你真的关心准确率,一定要尝试各种各样的分类器,并通过交叉验证选择最好的一个。或者,从Netflix Prize(和Middle Earth)中吸取教训,只使用了一个集成方法进行选择。
9. 机器学习算法中GBDT和XGBOOST的区别有哪些
尝试回答一下
首先xgboost是Gradient Boosting的一种高效系统实现,并不是一种单一算法。xgboost里面的基学习器除了用tree(gbtree),也可用线性分类器(gblinear)。而GBDT则特指梯度提升决策树算法。
xgboost相对于普通gbm的实现,可能具有以下的一些优势:
显式地将树模型的复杂度作为正则项加在优化目标
公式推导里用到了二阶导数信息,而普通的GBDT只用到一阶
允许使用column(feature) sampling来防止过拟合,借鉴了Random Forest的思想,sklearn里的gbm好像也有类似实现。
4.实现了一种分裂节点寻找的近似算法,用于加速和减小内存消耗。
5.节点分裂算法能自动利用特征的稀疏性。
6.data事先排好序并以block的形式存储,利于并行计算
7.cache-aware, out-of-core computation,这个我不太懂。。
8.支持分布式计算可以运行在MPI,YARN上,得益于底层支持容错的分布式通信框架rabit。