机器学习算法

旧城冷巷雨未停 提交于 2019-11-27 10:19:00

在这里插入图片描述

一 监督学习

    监督学习是指:利用一组已知类别的样本调整分类器的参数,使其达到所要求性能的过程,也称为监督训练或有教师学习。

    监督学习是从标记的训练数据来推断一个功能的机器学习任务。训练数据包括一套训练示例。在监督学习中,每个实例都是由一个输入对象(通常为矢量)和一个期望的输出值(也称为监督信号)组成。监督学习算法是分析该训练数据,并产生一个推断的功能,其可以用于映射出新的实例。一个最佳的方案将允许该算法来正确地决定那些看不见的实例的类标签。这就要求学习算法是在一种“合理”的方式从一种从训练数据到看不见的情况下形成。

监督学习中需要注意的问题:

1、偏置方差权衡
    第一个问题就是偏置和方差之间的权衡。假设我们有几种不同的,但同样好的演算数据集。一种学习算法是基于一个未知数的输入,在经过这些数据集的计算时,系统会无误的预测到并将正确的未知数输出。一个学习算法在不同的演算集演算时如果预测到不同的输出值会对特定的输入有较高的方差。一个预测误差学习分类器是与学习算法中的偏差和方差有关的。一般来说,偏差和方差之间有一个权衡。较低的学习算法偏差必须“灵活”,这样就可以很好的匹配数据。但如果学习算法过于灵活,它将匹配每个不同的训练数据集,因此有很高的方差。许多监督学习方法的一个关键方面是他们能够调整这个偏差和方差之间的权衡(通过提供一个偏见/方差参数,用户可以调整)。
2、功能的复杂性和数量的训练数据
    第二个问题是训练数据可相对于“真正的”功能(分类或回归函数)的复杂度的量。如果真正的功能是简单的,则一个“不灵活的”学习算法具有高偏压和低的方差将能够从一个小数据量的学习。但是,如果真功能是非常复杂的(例如,因为它涉及在许多不同的输入要素的复杂的相互作用,并且行为与在输入空间的不同部分),则该函数将只从一个非常大的数量的训练数据,并使用可学习“灵活”的学习算法具有低偏置和高方差。因此,良好的学习算法来自动调整的基础上可用的数据量和该函数的明显的复杂性要学习的偏压/方差权衡。
3、输入空间的维数
    第三个问题是输入空间的维数。如果输入特征向量具有非常高的维数,学习问题是很困难的,即使真函数仅依赖于一个小数目的那些特征。这是因为许多“额外”的尺寸可混淆的学习算法,并使其具有高方差。因此,高的输入维数通常需要调整分类器具有低方差和高偏置。在实践中,如果工程师能够从输入数据手动删除不相关的特征,这是有可能改善该学习功能的准确性。此外,还有许多算法的特征选择,设法确定相关特征,并丢弃不相关的。这是维数降低,其目的是将输入数据映射到较低维空间中运行的监督学习算法之前的更一般的策略的一个实例。
4、噪声中的输出值
    第四个问题是在所需要的输出值(监控目标变量)的噪声的程度。如果所希望的输出值,通常是不正确的(因为人为错误或传感器的错误),则学习算法不应试图找到一个函数完全匹配的训练示例。试图以适应数据过于谨慎导致过度拟合。当没有测量误差(随机噪声),如果你正在努力学习功能,是您学习模式太复杂,你甚至可以过度拟合。在这种情况下的目标函数,该函数不能被模拟“腐化”你的训练数据的那部分-这一现象被称为确定性的噪声。当任一类型的噪声存在时,最好是去一个更高的偏见,低方差估计。

实例分析:

    正如人们通过已知病例学习诊断技术那样,计算机要通过学习才能具有识别各种事物和现象的能力。用来进行学习的材料就是与被识别对象属于同类的有限数量样本。监督学习中在给予计算机学习样本的同时,还告诉计算各个样本所属的类别。若所给的学习样本不带有类别信息,就是无监督学习。任何一种学习都有一定的目的,对于模式识别来说,就是要通过有限数量样本的学习,使分类器在对无限多个模式进行分类时所产生的错误概率最小。

    不同设计方法的分类器有不同的学习算法。对于贝叶斯分类器来说,就是用学习样本估计特征向量的类条件概率密度函数。在已知类条件概率密度函数形式的条件下,用给定的独立和随机获取的样本集,根据最大似然法或贝叶斯学习估计出类条件概率密度函数的参数。例如,假定模式的特征向量服从正态分布,样本的平均特征向量和样本协方差矩阵就是正态分布的均值向量和协方差矩阵的最大似然估计。在类条件概率密度函数的形式未知的情况下,有各种非参数方法,用学习样本对类条件概率密度函数进行估计。在分类决策规则用判别函数表示的一般情况下,可以确定一个学习目标,例如使分类器对所给样本进行分类的结果尽可能与“教师”所给的类别一致,然后用迭代优化算法求取判别函数中的参数值。

    在无监督学习的情况下,用全部学习样本可以估计混合概率密度函数,若认为每一模式类的概率密度函数只有一个极大值,则可以根据混合概率密度函数的形状求出用来把各类分开的分界面。

    监督学习方法是目前研究较为广泛的一种机器学习方法,例如神经网络传播算法、决策树学习算法等已在许多领域中得到成功的应用,但是,监督学习需要给出不同环境状态下的期望输出(即导师信号),完成的是与环境没有交互的记忆和知识重组的功能,因此限制了该方法在复杂的优化控制问题中的应用。

1 classification分类

(1) Binary Decision Tree(BDT)二分决策树

    对于分类回归树,算法的要点是给树的每个结点定义一个衡量标准。比如,当我们拟合一个函数的时候,我们使用真实值和预测值的差的平方和,这就是衡量标准。算法的目的是使差的平方和最小。对于分类问题,我们定义一个度量,使得当一个结点的大多数值都属于同一类时,这个度量最小。三个最常用的度量是:熵(entropy)、吉尼系数(Giniindex)和错分类(misclassification)。决策树构成了其他算法的基础,比如bosting和随机树。

    决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

    不同于贝叶斯算法,决策树的构造过程不依赖领域知识,它使用属性选择度量来选择将元组最好地划分成不同的类的属性。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。
构造决策树的关键步骤是分裂属性。所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。分裂属性分为三种不同的情况:
    1、属性是离散值且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。
    2、属性是离散值且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支。
    3、属性是连续值。此时确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支。

    构造决策树的关键性内容是进行属性选择度量,属性选择度量是一种选择分裂准则,是将给定的类标记的训练集合的数据划分D“最好”地分成个体类的启发式方法,它决定了拓扑结构及分裂点split_point的选择。

    属性选择度量算法有很多,一般使用自顶向下递归分治法,并采用不回溯的贪心策略。这里采用ID3C4.5两种常用算法。ID3C4.5两种算法在之前的博客有写到,这里就不在描述了。https://blog.csdn.net/zstu_lihang/article/details/93621689

(2) Naive Bayesian Classifier朴素贝叶斯分类器

关于Naive Bayesian Classifier的描述请参照之前的博客:https://blog.csdn.net/zstu_lihang/article/details/93492345

(3) Neural Network(NN)神经网络

    神经网络主要是默认人类脑结构进行的一种代码程序结构的表现,同时是RNN,CNN,DNN的基础。结构上大体上分为三个部分(输入,含隐,输出),各层都有个的讲究,其中,输入层主要是特征处理后的入口,含隐层用来训练相应函数,节点越多,训练出的函数就越复杂,输出层输出相应的预测结果,比较常见的就是多分类了。

算法特点
1、神经网络属于有监督学习的一种;
2、计算复杂度比较高,因为增加了相应的激活函数,所以等于复合函数嵌套复合函数;
3、含隐层的神经元越多,计算函数便越复杂,但带来的好处是,不用过度考虑特征方程,较其它机器学习入门算法而言,省却了特征适配;
4、BP后向传播其实就是误差函数反推参数求导过程,不知道为什么网络上的很多博客都没有人点出来,可能是使用BP后向传播算法,让别人听起来更厉害一些吧;
5、需要考虑过拟合问题;

神经网络
    在这里插入图片描述
    上图建立具有一个输入层、一个隐藏层、一个输出层的三层神经网络。输入层的结点数由数据维度决定,这里是2维。类似地,输出层的结点数由类别数决定,也是2。(因为我们只有两类输出,实际中我们会避免只使用一个输出结点预测0和1,而是使用两个输出结点以使网络以后能很容易地扩展到更多类别)。每一个神经元都可以理解成一个函数,这个函数,也可以叫做激活函数,例如,输入神经元理解为Fin(x),含隐神经元理解为Fhn(x),输出神经元理解为Fou(x),每一层之间都是具有一个权重参数w(或者叫θ),每一层的输出乘上权重参数,都是下一层的输入,例如,Fin( input1 ) * w1 就是含隐层的输入,Fhn( Fin( input1 ) * w1 ) *w2 就是输出层的输入,Fou( Fhn( Fin(input1 ) * w1 ) * w2 )计算出最后的输出值。
常见的激活函数:
    Sigmoid函数(也叫logistics函数)、Tanh函数(双曲函数)、sgn函数(阶跃函数)、ReLU函数、softmax函数、Linear函数

(4)Convolution NN(CNN)卷积神经网络

    卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。

    卷积神经网络(Convolutional Neural Networks / CNNs / ConvNets)与普通神经网络非常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,普通神经网络里的一些计算技巧到这里依旧适用。

    所以哪里不同呢?卷积神经网络默认输入是图像,可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。

具有三维体积的神经元(3D volumes of neurons)
    卷积神经网络利用输入是图片的特点,把神经元设计成三个维度 : width, height, depth(注意这个depth不是神经网络的深度,而是用来描述神经元的) 。比如输入的图片大小是 32 × 32 × 3 (rgb),那么输入神经元就也具有 32×32×3 的维度。下面是图解:
传统神经网络:
在这里插入图片描述
卷积神经网络
                在这里插入图片描述
    一个卷积神经网络由很多层组成,它们的输入是三维的,输出也是三维的,有的层有参数,有的层不需要参数。

卷积神经网络通常包含以下几种层:

  • 卷积层(Convolutional layer),卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
  • 线性整流层(Rectified Linear Units layer, ReLU layer),这一层神经的活性化函数(Activation function)使用线性整流(Rectified Linear Units, ReLU)。
  • 池化层(Pooling layer),通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
  • 全连接层( Fully-Connected layer), 把所有局部特征结合变成全局特征,用来计算最后每一类的得分。
    一个卷积神经网络各层应用实例:
    在这里插入图片描述

卷积层(Convolutional layer)

    普通神经网络把输入层和隐含层进行“全连接(Full Connected)“的设计。从计算的角度来讲,相对较小的图像从整幅图像中计算特征是可行的。但是,如果是更大的图像(如 96x96 的图像),要通过这种全联通网络的这种方法来学习整幅图像上的特征,从计算角度而言,将变得非常耗时。你需要设计 10 的 4 次方(=10000)个输入单元,假设你要学习 100 个特征,那么就有 10 的 6 次方个参数需要去学习。与 28x28 的小块图像相比较, 96x96 的图像使用前向输送或者后向传导的计算方式,计算过程也会慢 10 的 2 次方(=100)倍。

    卷积层解决这类问题的一种简单方法是对隐含单元和输入单元间的连接加以限制:每个隐含单元仅仅只能连接输入单元的一部分。例如,每个隐含单元仅仅连接输入图像的一小片相邻区域。(对于不同于图像输入的输入形式,也会有一些特别的连接到单隐含层的输入信号“连接区域”选择方式。如音频作为一种信号输入方式,一个隐含单元所需要连接的输入单元的子集,可能仅仅是一段音频输入所对应的某个时间段上的信号。)

    每个隐含单元连接的输入区域大小叫r神经元的感受野(receptive field)。

    由于卷积层的神经元也是三维的,所以也具有深度。卷积层的参数包含一系列过滤器(filter),每个过滤器训练一个深度,有几个过滤器输出单元就具有多少深度。

    具体如下图所示,样例输入单元大小是32×32×3, 输出单元的深度是5, 对于输出单元不同深度的同一位置,与输入图片连接的区域是相同的,但是参数(过滤器)不同。
                    在这里插入图片描述
    虽然每个输出单元只是连接输入的一部分,但是值的计算方法是没有变的,都是权重和输入的点积,然后加上偏置,这点与普通神经网络是一样的,如下图所示:
在这里插入图片描述
卷积(Convolution)
    如果应用参数共享的话,实际上每一层计算的操作就是输入层和权重的卷积!这也就是卷积神经网络名字的由来。

    先抛开卷积这个概念不管。为简便起见,考虑一个大小为5×5的图像,和一个3×3的卷积核。这里的卷积核共有9个参数,就记为 吧。这种情况下,卷积核实际上有9个神经元,他们的输出又组成一个3×3的矩阵,称为特征图。第一个神经元连接到图像的第一个3×3的局部,第二个神经元则连接到第二个局部(注意,有重叠!就跟你的目光扫视时也是连续扫视一样)。具体如下图所示。
在这里插入图片描述
池化层(Pooling Layer)
    池化(pool)即下采样(downsamples),目的是为了减少特征图。池化操作对每个深度切片独立,规模一般为 2*2,相对于卷积层进行卷积运算,池化层进行的运算一般有以下几种:

  • 最大池化(Max Pooling)。取4个点的最大值。这是最常用的池化方法。
  • 均值池化(Mean Pooling)。取4个点的均值。
  • 高斯池化。借鉴高斯模糊的方法。不常用。
  • 可训练池化。训练函数 ff ,接受4个点为输入,出入1个点。不常用。

    最常见的池化层是规模为2*2, 步幅为2,对输入的每个深度切片进行下采样。每个MAX操作对四个数进行,如下图所示:
在这里插入图片描述
    池化操作将保存深度大小不变。

    如果池化层的输入单元大小不是二的整数倍,一般采取边缘补零(zero-padding)的方式补成2的倍数,然后再池化。

全连接层(Fully-connected layer)

全连接层和卷积层可以相互转换:

  • 对于任意一个卷积层,要把它变成全连接层只需要把权重变成一个巨大的矩阵,其中大部分都是0 除了一些特定区块(因为局部感知),而且好多区块的权值还相同(由于权重共享)。
  • 相反地,对于任何一个全连接层也可以变为卷积层。比如,一个 的全连接层,输入层大小为 ,它可以等效为一个 的卷积层。换言之,我们把 filter size 正好设置为整个输入层大小。

(5)Deep Belief Networks(DBN)深度信念网络

    深度信念网络是一个概率生成模型,与传统的判别模型的神经网络相对,生成模型是建立一个观察数据和标签之间的联合分布,对P(Observation|Label)和 P(Label|Observation)都做了评估,而判别模型仅仅而已评估了后者,也就是P(Label|Observation)。

    DBNs由多个限制玻尔兹曼机(Restricted Boltzmann Machines)层组成,一个典型的网络结构如图1所示。这些网络被“限制”为一个可视层和一个隐层,层间存在连接,但层内的单元间不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。
    在这里插入图片描述
2.需要面对的问题
对于在深度神经网络应用传统的BP算法的时候,DBN遇到了以下问题:

(1)需要为训练提供一个有标签的样本集;

(2)学习过程较慢;

(3)不适当的参数选择会导致学习收敛于局部最优解。

Solution:

    首先,先不考虑最顶构成一个联想记忆(associative memory)的两层,一个DBN的连接是通过自顶向下的生成权值来指导确定的,RBMs就像一个建筑块一样,相比传统和深度分层的sigmoid信念网络,它能易于连接权值的学习。
    最开始的时候,通过一个非监督贪婪逐层方法去预训练获得生成模型的权值,非监督贪婪逐层方法被Hinton证明是有效的,并被其称为对比分歧(contrastive divergence)。
              在这里插入图片描述
    在这个训练阶段,在可视层会产生一个向量v,通过它将值传递到隐层。反过来,可视层的输入会被随机的选择,以尝试去重构原始的输入信号。最后,这些新的可视的神经元激活单元将前向传递重构隐层激活单元,获得h(在训练过程中,首先将可视向量值映射给隐单元;然后可视单元由隐层单元重建;这些新可视单元再次映射给隐单元,这样就获取新的隐单元。执行这种反复步骤叫做吉布斯采样)。这些后退和前进的步骤就是我们熟悉的Gibbs采样,而隐层激活单元和可视层输入之间的相关性差别就作为权值更新的主要依据。
    训练时间会显著的减少,因为只需要单个步骤就可以接近最大似然学习。增加进网络的每一层都会改进训练数据的对数概率,我们可以理解为越来越接近能量的真实表达。这个有意义的拓展,和无标签数据的使用,是任何一个深度学习应用的决定性的因素。
    在最高两层,权值被连接到一起,这样更低层的输出将会提供一个参考的线索或者关联给顶层,这样顶层就会将其联系到它的记忆内容。而我们最关心的,最后想得到的就是判别性能,例如分类任务里面。
    在预训练后,DBN可以通过利用带标签数据用BP算法去对判别性能做调整。在这里,一个标签集将被附加到顶层(推广联想记忆),通过一个自下向上的,学习到的识别权值获得一个网络的分类面。这个性能会比单纯的BP算法训练的网络好。这可以很直观的解释,DBNs的BP算法只需要对权值参数空间进行一个局部的搜索,这相比前向神经网络来说,训练是要快的,而且收敛的时间也少。
经典的DBN网络结构是由若干层 RBM 和一层 BP 组成的一种深层神经网络, 结构如下图4所示.
                    在这里插入图片描述
DBN 在训练模型的过程中主要分为两步:

    第 1 步:分别单独无监督地训练每一层 RBM 网络,确保特征向量映射到不同特征空间时,都尽可能多地保留特征信息;

    第 2 步:在 DBN 的最后一层设置 BP 网络,接收 RBM 的输出特征向量作为它的输入特征向量,有监督地训练实体关系分类器.而且每一层 RBM 网络只能确保自身层内的 权值对该层特征向量映射达到最优,并不是对整个 DBN 的特征向量映射达到最优,所以反向传播网络还将错误信息自顶向下传播至每一层 RBM,微调整个 DBN 网络.RBM 网络训练模型的过程可以看作对一个深层 BP 网络权值参数的初始化,使DBN 克服了 BP 网络因随机初始化权值参数而容易陷入局部最优和训练时间长的缺点.
    上述训练模型中第一步在深度学习的术语叫做预训练,第二步叫做微调。最上面有监督学习的那一层,根据具体的应用领域可以换成任何分类器模型,而不必是BP网络。

(6)Recurrent NN(RNN)深度循环神经网络

    在图像分类和目标识别领域,基于前馈神经网络的深度学习模型表现优异,但是在语音识别和自然语音处理领域深度学习模型水土不服,时间序列数据存在时间关联性和整体逻辑特性。深度学习模型无法利用历史数据的时间依赖关系,来分析数据特征,故而无法处理时间序列数据。计算机科学家借鉴大脑处理时序数据的模式,改造了深度学习模型,提出了循环神经网络模型。循环神经网络模型在隐层引入了定向循环,它能更好的表征高纬度信息的整体逻辑性。

1 RNN简史
    1982年,约翰·霍普菲尔德提出Hopfiled网络,网络内部有反馈连接,能够处理信号中的时间依赖性;
    1986年,Michael Jordan 在神经网络中引入循环连接;
    1990年,Jeffrey Elman 正式提出了RNN模型,RNN具备有限短期记忆;(利用反向传播和梯度下降算法过程中遭受到了严重的梯度消失问题)
    1997年,Sepp Hochreiter提出长短期记忆(Long short-term memory)网络模型;
    2003年,Yoshua Bengio基于RNN的N元统计模型,解决了分词特征表征和维度魔咒问题。
    2010年以后,循环神经网络(RNN)/卷积神经网络(CNN)/深度信念网络(DBN)成为深度学习的三个模型。并诞生了很多智能语音应用(SIRI,Alexa…)。

2 RNN的生物机理
    时间认知和目标导向在人脑处理语音识别和自然语音处理活动时显然非常重要。“书读百遍,其义自见”,“一回生二回熟”,“失败是成功母”等俗语均能发现时间认知和目标导向在人脑处理信息时的作用。历史信息经过强化叠加,逐渐沉淀下来,最终成为我们的经验知识,经验知识和上下文场景在某些场合可能比真实输入数据还要重要。RNN通过使用带有自反馈的神经元,能够处理理论上任意长度的(存在时间关联性的)序列数据。相比于传统的前馈神经网络,它更符合生物神经元的连接方式,更符合人类大脑处理信息的工作模式。

3 循环神经网络(Recurrent Neural Network)
    时间序列数据存在时间关联性和整体逻辑特性,传统神经网络信息是单向传播的(误差反向传播不改变单向性),循环神经网络(RNN)将输出层的结果再次输入到隐藏层,以其能够发现时间序列数据的时间关联性和整体逻辑特性等高维度信息。1990年,Jeffrey Elman正式提出了RNN模型,RNN具备有限短期记忆;1997年,Sepp Hochreiter提出长短期记忆(LSTM)网络模型。

Recurrent NN模型的创新:

  • 循环神经网络(RNN)处理时间序列数据具有先天优势;
  • 循环神经网络(RNN)通过反向传播和梯度下降算法达到了纠正错误的能力,但未解决梯度消失问题;
  • 直到1997年,循环神经网络(RNN)引入了一个基于LSTM的架构后,梯度消失问题得以解决;
  • LSTM的架构中的单元相当于一个模拟计算机,显著提高了网络精度。

3.1 时间序列数据
    常见的时间序列数据包括:语言模型、手写体识别、序列生成、机器翻译、语音、视频分析等。时间序列数据的样本间存在顺序关系,每个样本和它之前的样本存在关联;直白一点呢的表述也就是选择和决策参考了上一次的状态。RNN不仅能够处理序列的输入,也能得到序列的输出,这里的序列指的是向量序列。

假设时间序列为: $ X{x1x_1,x2x_2,…,xNx_N}$
时间序列模型为:P(X) = i=1N\sum_{i=1}^NP(xix_i|x1x_1,…,xi1x_{i-1})

    根据输出和输入序列不同数量rnn可以有多种不同的结构,不同结构自然就有不同的引用场合。每个矩形是一个向量;箭头代表函数(例如矩阵乘法);红色的是输入向量;蓝色的是输出向量;绿色的是某一时间的RNN状态。如下图,

  • 函数问题(不是序列): 一个输入得到一个输出,未体现序列的特征,例如:图像分类场景。
  • 一到多: 给一个输入得到一系列输出,可用于生产图片描述的场景,例如:图像自动字幕,将一幅幅图像转化为句子输出。
  • 多到一: 给一系列输入得到一个输出,可用于文本情感分析,对一些列的文本输入进行分类,看是消极还是积极情感,例如:情感分类,将一个给定的句子分类为积极的情感或者负面的情感
  • 间隔多到多: 给一些列输入得到一系列输出,可用于翻译或聊天对话场景,对输入的文本转换成另外的文本,例如:机器翻译,RNN读入英语的句子,翻译出法语的句子
  • 同步多到多: 它是经典的rnn结构,前一输入的状态会带到下一个状态中,而且每个输入都会对应一个输出,例如:视频分类,我们需要给视频的每一帧打标签。
    在这里插入图片描述

3.2 模型的结构
    和经典神经网络一样,循环神经网络(RNN)包含输入层,隐藏层和输出层;隐藏层分配了若干个权重矩阵,并利用优化函数(损失函数)按照一定优化条件定向优化,限定实际输出与目标输出之间的误差,最终计算出网络的权重矩阵。循环神经网络(RNN)引入了两个创新,(1) 即时输入和历史输入均分配权重,并通过优化函数确认最终的权重。(2) 引入了时间反向传播(BackPropagation Through Time,简称BPTT)。

    循环神经网络(RNN)继承了常规的梯度下降算法优化网络模型,常用随机梯度下降算法等均可用于优化循环神经网络(RNN)模型。梯度下降算法通过放大多维误差或代价函数的局部最小值来打破维数灾难。

    RNN与我们大脑神经元的工作方式更加的贴近,因为大脑的思考过程各个神经元是有相互间的交互的,但是以前的神经网络仅仅从一层到另外一层忽视了隐含层中神经元的复杂交互。在RNN中,神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出。

    RNN在NLP中有广泛的应用,语言模型与文本生成(Language Modeling and Generating Text),机器翻译(Machine Translation),语音识别(Speech Recognition),图像描述生成 (Generating Image Descriptions) 等。所有递归神经网络都具有神经网络重复模块链的形式。在标准RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。为了分析方便,我们常将RNN在时序上展开,得到如下的结构:
在这里插入图片描述
3.3 模型的优化
    RNN训练困难的主要原因在于隐藏层参数ww的传播:由于误差传播在展开后的RNN上,无论在前向传播过程还是在反向传播过程中ww都会乘上多次,这就导致:

梯度消失:如果梯度很小的话(<1),乘上多次指数级下降,对输出几乎就没有影响了
梯度爆炸:反过来,如果梯度很大的话,乘上多次指数级增加,又导致了梯度爆炸
1 通过时间的反向传播
    经典神经网络使用著名的BP算法反向逐层回归优化网络模型,利用损失函数的偏导调整每个单元的权重。循环神经网络(RNN)使用新版本机制即时间的反向传播(BPTT),引入了记忆单元,历史时刻T-1/T-2的数据也参与计算,用以关注时间序列数据的 时间关联性和整体逻辑特性。当然记忆模块可以有多种变体,比如长时记忆、短时记忆和工作记忆,不一而足。

2 梯度消失问题
    初代的循环神经网络(RNN)获取了初步的成功,但是梯度消失问题像梦魇一样让其陷入研究的低谷。梯度可以视为斜率,梯度值就是优化指示器;梯度值越大,网络模型很快速收敛到最佳状态;梯度值平坦或微弱,网络优化就失去了优化目标,网络模型无法收敛到最佳状态,只能处于随机漫步状态。

3.4 长期依赖问题
    对于看电影、写作或思考的场景来说,我们总会或多或少的记住前面的东西(短暂记忆或持久记忆),然后旧的记忆和新的记忆反复叠加,最终我们完成了电影、写作或思考之旅。例如,我们看章子怡的电影《无问西东》,我们可以根据已经发生的故事情节推测当前故事情节的可能情节;或者我们的大脑会把所有已经发生的故事串起来,在某一刹那我们的泪如雨下。

    传统的神经网络(串行的卷积网络)不能做到这一点,这似乎是一个主要的缺点。例如,假设您想要对电影中每个点发生的事件进行分类。目前尚不清楚传统神经网络如何利用其对电影中先前事件的推理来告知后者。循环神经网络解决了这个问题。它们是具有循环的网络,允许信息持续存在。由于独特的设计结构,LSTM特别适合于处理时序间隔和延迟非常长的任务,作为非线性模型,LSTM非常适合于构造更大型深度神经网络。

1 短期依赖问题
    时序数据(文本、音频或视频等)任务中,多数情况需要很多的上下文联系(甚至常识知识)才能准确预测。考虑尝试预测文本中的最后一个词“我在法国长大…我说流利的法语。”。最近的信息表明,下一个词可能是一种语言的名称,但如果我们想缩小哪种语言,我们需要从更进一步的背景来看,法国的背景。相关信息与需要变得非常大的点之间的差距完全是可能的。不幸的是,随着差距的扩大,RNN无法学会连接信息。
在这里插入图片描述
2 长期依赖问题
    RNN的优势是能够将先前信息连接到当前任务。我们只需要查看最近的信息来执行当前任务。如果相关信息与所需地点之间的差距很小,RNN可以学习使用过去的信息。例如: 考虑一种语言模型,试图根据之前的单词预测下一个单词。如果我们试图预测“云在天空中”的最后一个词,我们不需要任何进一步的背景 - 很明显,下一个词将是天空。
在这里插入图片描述

2 regression回归

(1)LinearRegression线性回归:

    线性回归,有时也称回归,不同情况下可以使用不同的回归方法,一般先采用线性回归方法得到最佳拟合直线,当出现欠拟合时,可采用局部加权线性回归,如果样本特征比样本数还多,就考虑使用缩减方法岭回归、lasso和前向逐步回归。

原理是:

    1.线性回归,对于给定的样本x,与回归系数w通过xTw计算,可得到预测值y’,真实值y与预测值y’之间的差值叫做误差,平方误差越小,说明预测结果越准确,也就是说使得误差平方和最小的w就是最好的系数,通过矩阵与导数知识的推导,可得到求w最优解的公式,由此求得w,完成回归,这个方法也叫最小二乘法。

    2.局部加权回归LWLR,给待测点附近的每个点赋予一定的权重,采用高斯核计算权重,使得待测点附近的点具有较大的权重,较远的点具有较小的权重,甚至权重为0,这样一来,待测点的预测值将会更接近真实值,但这会导致准确过了头,发生过拟合,因此要调节高斯核的k,也是回归函数中唯一一个需要我们关注的参数,当k=1.0时,模型效果与线性回归基本无差异。该算法的问题就是计算量大,每个待测点都以全部样本点为参考求权重。

    3.岭回归,是一种缩减方法,目的是通过引入常量和单位矩阵进行限制,使求得的w中,部分系数为0,也就是减少了不必要的特征,更好地理解数据的特征,从而求得比较准确的预测值。目前对岭回归的理解不是很深刻。

(2)树回归:

    CART算法叫作分类回归树,可用于分类也可用于回归,与ID3不同,CART可以处理连续型变量,采用二元切分法,构造的树是二叉树。构造树的过程依然是递归,我们可以构建两种树,回归树和模型树,回归树的叶节点包含单个值,模型树的单个节点包含的是线性方程,之所以采用树结构来切分数据,是因为这样处理数据集能得到更好的分类或回归效果。类似的,在该算法构建树的过程中,需要调节参数来控制什么时候生成叶节点,叶节点过多不是我们所希望的,所以通过调节参数以达到比较好的效果叫做预剪枝,通过测试集对树节点进行合并降低测试误差叫做后剪枝。

二 强化学习

    强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题 [1] 。

    强化学习的常见模型是标准的马尔可夫决策过程(Markov Decision Process, MDP)。按给定条件,强化学习可分为基于模式的强化学习(model-based RL)和无模式强化学习(model-free RL) ,以及主动强化学习(active RL)和被动强化学习(passive RL)。强化学习的变体包括逆向强化学习、阶层强化学习和部分可观测系统的强化学习。求解强化学习问题所使用的算法可分为策略搜索算法和值函数(value function)算法两类。深度学习模型可以在强化学习中得到使用,形成深度强化学习 。

    强化学习理论受到行为主义心理学启发,侧重在线学习并试图在探索-利用(exploration-exploitation)间保持平衡。不同于监督学习和非监督学习,强化学习不要求预先给定任何数据,而是通过接收环境对动作的奖励(反馈)获得学习信息并更新模型参数 。

    强化学习问题在信息论、博弈论、自动控制等领域有得到讨论,被用于解释有限理性条件下的平衡态、设计推荐系统和机器人交互系统 。一些复杂的强化学习算法在一定程度上具备解决复杂问题的通用智能,可以在围棋和电子游戏中达到人类水平 。

1 Q-learning

    Q一学习是强化学习的主要算法之一,是一种无模型的学习方法,它提供智能系统在马尔可夫环境中利用经历的动作序列选择最优动作的一种学习能力。Q-学习基于的一个关键假设是智能体和环境的交互可看作为一个Markov决策过程(MDP),即智能体当前所处的状态和所选择的动作,决定一个固定的状态转移概率分布、下一个状态、并得到一个即时回报。Q-学习的目标是寻找一个策略可以最大化将来获得的报酬。

    Q-Learning是一项无模型的增强学习技术,它可以在MDP问题中寻找一个最优的动作选择策略。它通过一个动作-价值函数来进行学习,并且最终能够根据当前状态及最优策略给出期望的动作。它的一个优点就是它不需要知道某个环境的模型也可以对动作进行期望值比较,这就是为什么它被称作无模型的。

    Q–learning中,每个Q(s,a)对应一个相应的Q值,在学习过程中根据Q值,选择动作。Q值的定义是如果执行当前相关的动作并且按照某一个策略执行下去,将得到的回报的总和。最优Q值可表示为Q+,其定义是执行相关的动作并按照最优策略执行下去,将得到的回报的总和,其定义如下:
            在这里插入图片描述
其中:s表示状态集,A表示动作集,T(s,a,s’)表示在状态s下执行动作a,转换到状态s’的概率,r(s,a)表示在状态s下执行动作a将得到的回报,表示折扣因子,决定时间的远近对回报的影响程度。

    智能体的每一次学习过程可以看作是从一个随机状态开始,采用一个策略来选择动作,如ε贪婪策略或Boltzamann分布策略。采用随机策略是为了保证智能体能够搜索所有可能的动作,对每个Q(s,a)进行更新。智能体在执行完所选的动作后,观察新的状态和回报,然后根据新状态的最大Q值和回报来更新上一个状态和动作的Q值。智能体将不断根据新的状态选择动作,直至到达一个终止状态。下面给出Q—learning算法的描述:
            在这里插入图片描述
    每次更新我们都用到了 Q 现实和 Q 估计, 而且 Q-learning 的迷人之处就是 在 Q(s1, a2) 现实 中, 也包含了一个 Q(s2) 的最大估计值, 将对下一步的衰减的最大估计和当前所得到的奖励当成这一步的现实, 很奇妙吧. 最后我们来说说这套算法中一些参数的意义. ε greedy 是用在决策上的一种策略, 比如 ε= 0.9 时, 就说明有90% 的情况我会按照 Q 表的最优值选择行为, 10% 的时间使用随机选行为. α是学习率, 来决定这次的误差有多少是要被学习的, α是一个小于1 的数. γ是对未来 reward 的衰减值. 我们可以这样想象.

    Q-learning 是一个 off-policy 的算法, 因为里面的 max action 让 Q table 的更新可以不基于正在经历的经验(可以是现在学习着很久以前的经验,甚至是学习他人的经验).

    On-policy 与 off-policy 本质区别在于:更新Q值时所使用的方法是沿用既定的策略(on-policy)还是使用新策略(off-policy)

2 Deep Q Networks

(1)算法思想
    DQN与Qleanring类似都是基于值迭代的算法,但是在普通的Q-learning中,当状态和动作空间是离散且维数不高时可使用Q-Table储存每个状态动作对的Q值,而当状态和动作空间是高维连续时,使用Q-Table不动作空间和状态太大十分困难。
    所以在此处可以把Q-table更新转化为一函数拟合问题,通过拟合一个函数function来代替Q-table产生Q值,使得相近的状态得到相近的输出动作。因此我们可以想到深度神经网络对复杂特征的提取有很好效果,所以可以将DeepLearning与Reinforcement Learning结合。这就成为了DQN .
                    在这里插入图片描述
DL与RL结合存在以下问题 :

  • DL是监督学习需要学习训练集,强化学习不需要训练集只通过环境进行返回奖励值reward,同时也存在着噪声和延迟的问题,所以存在很多状态state的reward值都是0也就是样本稀疏
  • DL每个样本之间互相独立,而RL当前状态的状态值是依赖后面的状态返回值的。
  • 当我们使用非线性网络来表示值函数的时候可能出现不稳定的问题

DQN中的两大利器解决了以上问题

  • 通过Q-Learning使用reward来构造标签
  • 通过experience replay(经验池)的方法来解决相关性及非静态分布问题
  • 使用一个MainNet产生当前Q值,使用另外一个Target产生Target Q

(2)experience replay 经验池
     经验池DQN中的记忆库用来学习之前的经历,又因为Q learning 是一种 off-policy 离线学习法, 它能学习当前经历着的, 也能学习过去经历过的, 甚至是学习别人的经历,所以在学习过程中随机的加入之前的经验会让神经网络更有效率。
    所以经验池解决了相关性及非静态分布问题。他通过在每个timestep下agent与环境交互得到的转移样本 (sts_t,ata_t,rtr_t,st+1s_{t+1}) 储存到回放记忆网络,要训练时就随机拿出一些(minibatch)来训练因此打乱其中的相关性。

(3)Q-target 目标网络
Q-targets的作用其实也是一种打乱相关性的机制,使用Q-targets会使得DQN中出现两个结构完全相同但是参数却不同的网络,预测Q估计的的网络MainNet使用的是最新的参数,而预测Q现实的神经网络TargetNet参数使用的却是很久之前的,Q(s,a;θiθ_i)表示当前网络MainNet的输出,用来评估当前状态动作对的值函数;Q(s,a;θiθ_i^{−}) 表示TargetNet的输出,可以解出targetQ并根据LossFunction更新MainNet的参数,每经过一定次数的迭代,将MainNet的参数复制给TargetNet。

    引入TargetNet后,再一段时间里目标Q值使保持不变的,一定程度降低了当前Q值和目标Q值的相关性,提高了算法稳定性。

(4)算法流程
    DQN的更新方式和Qlearning一样:Q(s,a)Q(s,a)+α[r+γmaxaQ(s,a)Q(s,a)]Q(s,a)←Q(s,a)+α[r+γmaxa&#x27;Q(s&#x27;,a&#x27;)−Q(s,a)]

     DQN的损失函数如下 θ表示网络参数为均方误差损失L(θ)=E[(TargetQQ(s,a;θ))2]L(θ)=E[(TargetQ−Q(s,a;θ))^2]
                                                  TargetQ=r+γmaxaQ(s,a;θ)TargetQ=r+γmaxa&#x27;Q(s&#x27;,a&#x27;;θ)

3 Double Q-learning

    Q-Learning 的过优化 (overoptimism) 现象是由于 Q-Learning 算法中的 max 操作造成的。令 (Qtarget(s,a))Q^{target}(s,a)) 是目标 Q 值;我们用了价值函数近似,QapproxQ^{approx} 是近似 Q 值;令 Y 为近似值和目标之间的误差,即:
                                Qapprox(s,a)=Qtarget(s,a)+Ys,aQapprox(s,a)=Qtarget(s,a)+Ys,a

    Q-learning 算法更新步骤将所有的 Q 值更新一遍,这个时候近似值和目标值之间的差值
            Z=rs,a+γmaxa1Qapprox(s,a1)rs,a+γmaxa2Qtarget(s,a2)=γmaxa1Qapprox(s,a1)γmaxa2Qtarget(s,a2)γQapprox(s,a)Qtarget(s,a)=γYs,aZ = rs,a+γmaxa1Qapprox(s′,a1)–rs,a+γmaxa2Qtarget(s′,a2) = γmaxa1Qapprox(s′,a1)–γmaxa2Qtarget(s′,a2) ≥ γQapprox(s′,a′)–Qtarget(s′,a′)=γYs′,a′

    其中a=argmaxaQtarget(s,a)a’ = argmax_{a} Q^{target}(s’,a)。这时候我们发现,即使 E[Y] = 0 也就是一开始是无偏的近似, Q Learning 中的 max 操作也会导致 E[Z] > 0。这就是过优化现象。为了解决这个问题, 提出了 Double Q 的想法。

    进一步分析了过优化的现象,并将 Double Q 的想法应用在 DQN 上,从而提出了 Double DQN。Double DQN 训练两个 Q 网络,一个负责选择动作,另一个负责计算。两个 Q 网络交替进行更新,具体算法如下所示。
                    在这里插入图片描述

4 Prioritized experience replay

    DQN 用了 Experience Replay 算法,将系统探索环境获得的样本保存起来,然后从中采样出样本以更新模型参数。对于采样,一个常见的改进是改变采样的概率。Prioritized Replay 便是采取了这个策略,采用 TD-err 作为评判标准进行采样。
                             TDerr=rs,a+γmaxaQ(s,a)Q(s,a)TD−err=|rs,a+γmaxa′Q(s′,a′)–Q(s,a)|
     例子中有 n 个状态,在每个状态系统一半概率采取 “正确” 或者一半概率 “错误”,图中红色虚线是错误动作。一旦系统采取错误动作,游戏结束。只有第 n 个状态 “正确” 朝向第 1 个状态,系统获得奖励 1。在这个例子训练过程中,系统产生无效样本,导致训练效率底下。如果采用 TD-err 作为评判标准进行采样,能够缓解这个问题。
                             在这里插入图片描述
从下图来看,Prioritized Replay 效果更好。
                         在这里插入图片描述

三 无监督学习

     现实生活中常常会有这样的问题:缺乏足够的先验知识,因此难以人工标注类别或进行人工类别标注的成本太高。很自然地,我们希望计算机能代我们完成这些工作,或至少提供一些帮助。根据类别未知(没有被标记)的训练样本解决模式识别中的各种问题,称之为无监督学习。

现实生活中常常会有这样的问题:
     (1)缺乏足够的先验知识,因此难以人工标注类别;
     (2)进行人工类别标注的成本太高。
很自然地,我们希望计算机能代我们(部分)完成这些工作,或至少提供一些帮助。常见的应用背景包括:
     (1)一从庞大的样本集合中选出一些具有代表性的加以标注用于分类器的训练。
     (2)先将所有样本自动分为不同的类别,再由人类对这些类别进行标注。
     (3)在无类别信息情况下,寻找好的特征。
常用算法:
     常用的无监督学习算法主要有主成分分析方法PCA等,等距映射方法、局部线性嵌入方法、拉普拉斯特征映射方法、黑塞局部线性嵌入方法和局部切空间排列方法等。
     从原理上来说PCA等数据降维算法同样适用于深度学习,但是这些数据降维方法复杂度较高,并且其算法的目标太明确,使得抽象后的低维数据中没有次要信息,而这些次要信息可能在更高层看来是区分数据的主要因素。所以现在深度学习中采用的无监督学习方法通常采用较为简单的算法和直观的评价标准。

1 Dimensionality Reduction降维

(1)Stacked Auto-Encoders(SAE)栈式自编码

     普通的AE模型通过多层编码解码过程,得到输出,最小化输入输出的差异从而使模型学到有用的特征。但是这种AE结构又一个弊端:虽然经过了多次的特征提取,但对于目标函数的计算只有一次,那么,如果通过“栈化”AE结构进行逐层的贪婪训练得到的性能会不会比现有的要好呢?
     实际上,Stacked AutoEncoder就是多个AE的“栈化”结果,其计算流程如下:
     下图展示的是一个基础的AE结构,由xix_ihi(1)h_i^{(1)}的过程为编码过程,由hi(1)h_i^{(1)}x^i\hat{x}_i的过程为解码过程,通常情况下,最小化损失函数:
                                在这里插入图片描述
     就可以是模型学习到有用的特征,当然,这个损失函数不唯一。
     “栈化”过程指的是将多个下图的训练过程融合到一起,使模型能够学得到更有效的信息。
                    在这里插入图片描述
     栈化”过程的基本实现思想如下:训练好上图的AE结构后,舍去解码过程,此时我们可以理解为code(4维)具有一定的降维、提取特征的能力。将此时的code作为输入,输入到新的AE结构中进行训练,如下图所示:
                    在这里插入图片描述
     按照与上面同样的思想来训练这个AE,这样可以在上面的code基础上再一次进行降维,如此重复,使每次的“栈化”过程都能够学习到近似最优,最后得到code,可以认为,这个code更能够提取出有效的特征,因为它是多种效果的“叠加”,相应的,如果是进行分类操作,直接将code接入到分类器中,就可以得到分类结果,下图所示是将code接入到softmax中:
                    在这里插入图片描述
     上述栈式自编码器的整体训练过程可以这样表示,途中省略了每次训练的解码过程:

                    在这里插入图片描述

(2)Local Linear Embedding局部线性嵌入

     局部线性嵌入(Locally Linear Embedding, LLE)是无监督非线性降维算法,是流行学习的一种。

     LLE和Isomap一样试图在降维过程中保持高维空间中的流形结构。Isomap把任意两个样本点之间的测地距离作为流形结构的特征,而LLE认为局部关系刻画了流形结构。

     LLE认为,在高维中间中的任意一个样本点和它的邻居样本点近似位于一个超平面上,所以该样本点可以通过其邻居样本点的线性组合重构出来。
                    在这里插入图片描述
     从图中可以看出,LLE算法主要分为三步,第一步是求K近邻的过程,这个过程使用了和KNN算法一样的求最近邻的方法。第二步,就是对每个样本求它在邻域里的K个近邻的线性关系,得到线性关系权重系数W。第三步就是利用权重系数来在低维里重构样本数据。

具体过程如下:

输入:样本集D={x1,x2,...,xm}D=\{x_1,x_2,...,x_m\}, 最近邻数k,降维到的维数d

输出: 低维样本集矩阵DD&#x27;
    1) for i 1 to m, 按欧式距离作为度量,计算和xix_i最近的的k个最近邻(xi1,xi2,...,xik,)(x_{i1}, x_{i2}, ...,x_{ik},)
    2) for i 1 to m, 求出局部协方差矩阵Zi=(xixj)T(xixj)Z_i=(x_i-x_j)^T(x_i-x_j),并求出对应的权重系数向量:
                                  WiWi=Zi1Z_i^{-1}1k1_k/1kT1_k^{T}Zi1Z_i^{-1}1k1_k
    3) 由权重系数向量WiW_i组成权重系数矩阵WW,计算矩阵M=(IW)T(IW)M=(I-W)^T(I-W)

4) 计算矩阵M的前d+1个特征值,并计算这d+1个特征值对应的特征向量{y1,y2,...yd+1}\{y_1,y_2,...y_{d+1}\}

5)由第二个特征向量到第d+1个特征向量所张成的矩阵即为输出低维样本集矩阵D=(y2,y3,...yd+1)D&#x27; = (y_2,y_3,...y_{d+1})

     LLE是广泛使用的图形图像降维方法,它实现简单,但是对数据的流形分布特征有严格的要求。比如不能是闭合流形,不能是稀疏的数据集,不能是分布不均匀的数据集等等,这限制了它的应用。下面总结下LLE算法的优缺点。

     LLE算法的主要优点有:

            1)可以学习任意维的局部线性的低维流形

            2)算法归结为稀疏矩阵特征分解,计算复杂度相对较小,实现容易。

     LLE算法的主要缺点有:

             1)算法所学习的流形只能是不闭合的,且样本集是稠密均匀的。

             2)算法对最近邻样本数的选择敏感,不同的最近邻数对最后的降维结果有很大影响。

2 Clustering聚类

(1)聚类算法简介

    聚类的基本思想:对于给定的M个样本的数据集,给定聚类(簇)的个数K(K<M),初始化每个样本所属的类别,再根据一定的规则不断地迭代并重新划分数据集的类别(改变样本与簇的类别关系),使得每一次的划分都比上一次的划分要好。

     距离的常用度量方法:欧氏距离(P=2)

(2)聚类算法分类

    聚类算法有很多种,主要分为划分聚类、密度聚类和谱聚类等三种聚类。

  • 划分聚类
    1)KMeans聚类(KMeans、二分KMeans、KMeans++、KMeansll、Canopy、Mini Batch KMeans)
    2)层次聚类(AGNES(凝聚的层次聚类)、DIANA(分裂的层次聚类)、BIRCH(平衡迭代削减聚类法)、CURE(使用代表点的聚类法))
  • 密度聚类
    1)DBSCAN(基于密度的聚类算法)
    2)MDCA(密度最大值聚类算法)
  • 谱聚类–通过对样本数据的拉普拉斯矩阵的特征向量进行聚类

(3)KMeans算法

     KMeans算法的思想:对于给定的M个样本的数据集(无标签),给定聚类(簇)的个数K(K<M),初始化每个样本所属的类别,再根据距离的不同,将每个样本分配到距离最近的中心点的簇中,然后再对迭代完成的每个簇更新中心点位置(改变样本与簇的类别关系),直到达到终止条件为止。

    KMeans算法的终止条件:1)迭代次数 2)簇中心点变化率 3)最小平方误差值

    KMeans算法的优点:理解简单容易,凸聚类的效果不错,效率高;对于服从高斯分布的数据集效果相当好。

    KMeans算法的缺点:中心点数量K的确定,初始化的中心点位置敏感,对于环形等非凸的数据集的聚类效果不好。
            在这里插入图片描述

(4)层次聚类(hierarchical clustering)

    特点:需要预先指定簇的个数作为迭代的终止条件。有两种策略:自底向上的聚合策略,自顶向下的分拆策略。

    自底向上的聚合策略:把每个样本初始化为一个簇,通过计算距离,对距离最小的两个簇进行聚合,直到簇的个数减少到所要的K个簇。

    类似于寻找最优编码二叉树的 Huffman’s Algorithm
                在这里插入图片描述

(5) DBSCAN(基于密度的聚类算法)

    特点:不用预先指定簇的个数
                在这里插入图片描述

3 Density Estimation密度估计

给定一个样本集,怎么得到该样本集的分布密度函数,解决这一问题有两个方法:
1.参数估计方法
    简单来讲,即假定样本集符合某一概率分布,然后根据样本集拟合该分布中的参数,例如:似然估计,混合高斯等,由于参数估计方法中需要加入主观的先验知识,往往很难拟合出与真实分布的模型;
2.非参数估计
    和参数估计不同,非参数估计并不加入任何先验知识,而是根据数据本身的特点、性质来拟合分布,这样能比参数估计方法得出更好的模型。核密度估计就是非参数估计中的一种,由Rosenblatt (1955)和Emanuel Parzen(1962)提出,又名Parzen窗(Parzen window)。Ruppert和Cline基于数据集密度函数聚类算法提出修订的核密度估计方法。
直方图到核密度估计
    给定一个数据集,需要观察这些样本的分布情况,往往我们会采用直方图的方法来进行直观的展现。该方法简单,容易计算,但绘制直方图时,需要确定bins,如果bins不同,那么最后的直方图会产生很大的差别。如下面的两直方图,右边比左边的直方图多划分了bins,导致最后的结果有很大的差别,左边时双峰的,右边时单峰的。

在这里插入图片描述
    除此之外,直方图还存在一个问题,那就是直方图展示的分布曲线并不平滑,即在一个bin中的样本具有相等的概率密度,显然,这一点往往并不适合。解决这一问题的办法时增加bins的数量,当bins增到到样本的最大值时,就能对样本的每一点都会有一个属于自己的概率,但同时会带来其他问题,样本中没出现的值的概率为0,概率密度函数不连续,这同样存在很大的问题。如果我们将这些不连续的区间连续起来,那么这很大程度上便能符合我们的要求,其中一个思想就是对于样本中的某一点的概率密度,如果能把邻域的信息利用起来,那么最后的概率密度就会很大程度上改善不连续的问题,为了方便观察,我们看另外一副图。
在这里插入图片描述
    现在我们假设要求x处的密度函数值,根据上面的思想,如果取x的邻域[x-h,x+h],当h->0的时候,我们便能把该邻域的密度函数值当作x点的密度函数值。用数学语言写就是:
在这里插入图片描述
    Nxi[xh,x+h]Nxi∈[x−h,x+h]时该邻域中的样本点数量,Ntotal样本集的总数量,最后对该邻域内的密度值取平均便得到x点的密度函数值f(x)。把上面的式子进行改写:
在这里插入图片描述
    这里h如果选的太大,肯定不符合h趋向于0的要求。h选的太小,那么用于估计f(x)的点实际上非常少。这也就是非参数估计里面的bias-variance tradeoff,也就是偏差和方差的平衡。这样后还是存在一个问题,那就是概率密度函数依然不够平滑(因为两个数之间的存在无数个数啊)。
在这里插入图片描述
    由于需要满足概率密度的积分为1,所以:
在这里插入图片描述
核函数
    从支持向量机、meansift都接触过核函数,应该说核函数是一种理论概念,但每种核函数的功能都是不一样的,这里的核函数有uniform,triangular, biweight, triweight, Epanechnikov,normal等。这些核函数的图像大致如下图:
在这里插入图片描述
    由于高斯内核方便的数学性质,也经常使用 K(x)= ϕ(x),ϕ(x)为标准正态概率密度函数。
    从上面讲述的得到的是样本中某一点的概率密度函数,那么整个样本集应该是怎么拟合的呢?将设有N个样本点,对这N个点进行上面的拟合过后,将这N个概率密度函数进行叠加便得到了整个样本集的概率密度函数。例如利用高斯核对X={x1x_1=−2.1,x2x_2=−1.3,x3x_3=−0.4,x4x_4=1.9,x5x_5=5.1,x6x_6=6.2}六个点的“拟合”结果如下:
在这里插入图片描述
    左边是直方图,bin的大小为2,右边是核密度估计的结果。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!