提交 be4ce0f8 编写于 作者: B barrycg 提交者: loopyme

proofread chap.2.8 and chap.2.9

上级 c38dc5ee
......@@ -2,10 +2,11 @@
校验者:
        [@不将就](https://github.com/apachecn/scikit-learn-doc-zh)
[@barrycg](https://github.com/barrycg)
翻译者:
        [@Xi](https://github.com/apachecn/scikit-learn-doc-zh)
密度估计在无监督学习,特征工程和数据建模之间划分了界线。一些最流行和最有用的密度估计方法是混合模型,如高斯混合( [`sklearn.mixture.GaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") ), 和基于邻近的方法( [`sklearn.neighbors.KernelDensity`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity "sklearn.neighbors.KernelDensity") ),如核密度估计[clustering](clustering.html#clustering) 一节中更充分地讨论了高斯混合,因为此方法也用作为一种无监督聚类方案。
密度估计涉及了无监督学习,特征工程和数据建模这三个不同的领域。一些最流行和最有用的密度估计方法是混合模型,如高斯混合( [`sklearn.mixture.GaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") ), 和基于邻近的方法,如核密度估计[`sklearn.neighbors.KernelDensity`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity "sklearn.neighbors.KernelDensity")[clustering](clustering.html#clustering) 一节中更充分地讨论了高斯混合,因为此方法也用作为一种无监督聚类方案。
密度估计是一个非常简单的概念,大多数人已经熟悉了其中一种常用的密度估计技术:直方图。
......@@ -15,15 +16,15 @@
**[![hist_to_kde](img/10a8344b866fca53744b728ef788a668.jpg)](https://scikit-learn.org/stable/auto_examples/neighbors/plot_kde_1d.html)**
然而,直方图的一个主要问题是组( binning )的选择可能会对得到的可视化结果造成不相称的影响。考虑上图中右上角的图, 它显示了相同数据下组( bins )向右移动后的直方图。这两个可视化的结果看起来完全不同,可能会导致对数据作出不同的解释。
然而,直方图的一个主要问题是分组( binning )的选择可能会对得到的可视化结果造成不相称的影响。考虑上图中右上角的图, 它显示了相同数据下,组( bins )向右移动后的直方图。这两个可视化的结果看起来完全不同,可能会导致对数据作出不同的解释。
直观地说,你也可以把一个直方图看成由一堆块组成,每个点上放一个块,通过在合适的网格空间中堆积这些块,我们就可以得到直方图。但是,如果不是把这些块堆叠在一个规则的网格上,而是把每个块的中心定位在它所代表的点上,然后把每个位置的总高度相加呢?这样可以得到如上图左 下角所示的可视化.它可能不像直方图那样整洁,但是由数据决定块的位置意味着它能更好地表示基本的数据。
直观地说,你也可以把一个直方图看成由一堆块组成,每个点上放一个块. 通过在合适的网格空间中堆积这些块,我们就可以得到直方图。但是,如果不是把这些块堆叠在一个规则的网格上,而是把每个块定位在它所代表的点上,然后把每个位置的总高度相加呢?这样可以得到如上图左下角所示的可视化.它可能不像直方图那样整洁,但是由数据决定块的位置意味着它能更好地表示基本的数据。
这个可视化是核密度估计的一个例子,该例中用的是一种”顶帽”核(即每个点上的方块)。我们可以通过使用一种更平滑的核来得到一个更平滑的分布。上图右下角展示了一个高斯核密度估计,其中每个点都给总的分布贡献一条高斯曲线。结果是从数据中得到了一个平滑的密度估计,并且可作为一个强大的非参数模型用来估计这些点的分布
这个可视化是核密度估计的一个例子,该例中用的是一种顶帽核(top-hat kernel)(即每个点上放一个方块)。我们可以通过使用一种更平滑的核来得到一个更平滑的分布。上图右下角展示了一个高斯核密度估计,其中每个点都给总的分布贡献一条高斯曲线。结果是从数据中得到了一个平滑的密度估计,并且可作为一个强大的非参数的点分布模型
## 2.8.2. 核密度估计
[`sklearn.neighbors.KernelDensity`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity "sklearn.neighbors.KernelDensity") 实现了 scikit-learn 中的核密度估计,它使用 Ball Tree 或 KD Tree 来进行高效查询(有关这些讨论请参见 [最近邻](neighbors.html#neighbors) )。尽管为了简单起见上述示例采用的是一维数据集,但实际上核密度估计能够用在任意维度上, 不过在实际应用中,维数灾难会导致其在高维上的性能降低。
[`sklearn.neighbors.KernelDensity`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity "sklearn.neighbors.KernelDensity") 实现了 scikit-learn 中的核密度估计,它使用 Ball Tree 或 KD Tree 来进行高效查询(有关这些讨论请参见 [最近邻](neighbors.html#neighbors) )。尽管为了简单起见上述示例采用的是一维数据集,但核密度估计能够用在任意维度上, 不过在实际应用中,维数灾难(the curse of dimensionality)会导致其在高维上的性能降低。
如下图所示, 从双峰分布中绘制了100个点,并展示了选用三个不同核的核密度估计:
......@@ -78,7 +79,7 @@ array([-0.41075698, -0.41075698, -0.41076071, -0.41075698, -0.41075698,
![K(x; h) \propto \cos(\frac{\pi x}{2h})](img/6b0371e0d33eebe00fe5ec3d59de5b43.jpg) 如果 ![x < h](img/7d1d547b1a46ad827caeb7f0e85b213d.jpg)
核密度估计可以与任何有效的距离度量一起使用(可用度量列表请参见 [`sklearn.neighbors.DistanceMetric`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.DistanceMetric.html#sklearn.neighbors.DistanceMetric "sklearn.neighbors.DistanceMetric") ), 但其结果被适当地归一化处理,仅适用于欧几里德度量标准。 一个特别有用的度量是测量球体上的点与点之间角距离 的 [Haversine distance](https://en.wikipedia.org/wiki/Haversine_formula) 。 下面是使用核密度估计来对地理空间数据进行可视化的示例,本例中南美大陆两种不同物种的观测分布如图:
核密度估计可以与任何有效的距离度量一起使用(可用度量列表请参见 [`sklearn.neighbors.DistanceMetric`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.DistanceMetric.html#sklearn.neighbors.DistanceMetric "sklearn.neighbors.DistanceMetric") ), 但其结果只能被欧氏度量进行合适地归一化。 一个特别有用的度量是测量球体上的点与点之间角距离 的 [Haversine distance](https://en.wikipedia.org/wiki/Haversine_formula) 。 下面是使用核密度估计来对地理空间数据进行可视化的示例,本例中南美大陆两种不同物种的观测分布如图:
[![species_kde](img/97b3ab2cc18a43b00c07a1cf6e118798.jpg)](https://scikit-learn.org/stable/auto_examples/neighbors/plot_species_kde.html)
......
......@@ -3,18 +3,19 @@
校验者:
        [@不将就](https://github.com/apachecn/scikit-learn-doc-zh)
[@Loopy](https://github.com/loopyme)
[@barrycg](https://github.com/barrycg)
翻译者:
        [@夜神月](https://github.com/apachecn/scikit-learn-doc-zh)
## 2.9.1. 限制波尔兹曼机
Restricted Boltzmann machines (RBM)(限制玻尔兹曼机)是基于概率模型的无监督非线性特征学习器。当用 RBM 或 RBMs 中的层次结构提取的特征在馈入线性分类器(如线性支持向量机或感知机)时通常会获得良好的结果。
限制玻尔兹曼机 (Restricted Boltzmann machines, 简称RBM)是基于概率模型的无监督非线性特征学习器。当用 RBM 或 多层次结构的RBMs 提取的特征在馈入线性分类器(如线性支持向量机或感知机)时通常会获得良好的结果。
该模型对输入的分布作出假设。目前,scikit-learn 只提供了 [`BernoulliRBM`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM"),它假定输入是二值的,或者是 0 到 1 之间的值,每个值都编码特定特征被激活的概率。
该模型对输入的分布作出假设。目前,scikit-learn 只提供了 [`BernoulliRBM`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM"),它假定输入是二值(binary values)的,或者是 0 到 1 之间的值,每个值都编码特定特征被激活的概率。
RBM 尝试使用特定图形模型最大化数据的可能性。所使用的参数学习算法( [Stochastic Maximum Likelihood](#sml) (随机最大似然))要防止特征表示偏离输入数据,这使得它们能学习到有趣的特征,但使得该模型对于小数据集不太有用且通常对于密度估计无效。
RBM 尝试使用特定图形模型最大化数据的可能性(the likelihood of the data)。所使用的参数学习算法( [Stochastic Maximum Likelihood](#sml) (随机最大似然))防止特征表示偏离输入数据,这使得它们能学习到有趣的特征,但使得该模型对于小数据集不太有用且通常对于密度估计无效。
该方法随着独立RBM的权重初始化深层神经网络而普及。这种方法被称为无监督的预训练(unsupervised pre-training)。
该方法因为深层神经网络需要独立RBM的权重来初始化而普及。这种方法被称为无监督的预训练(unsupervised pre-training)。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_rbm_logistic_classification_0011.png](img/3af1cb0026efe5789c3acf3669ff5bc6.jpg)](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_rbm_logistic_classification.html)
......@@ -27,8 +28,9 @@ RBM 的图形模型是一个全连接的二分图(fully-connected bipartite gr
![http://sklearn.apachecn.org/cn/0.19.0/_images/rbm_graph.png](img/0dd4aedd59a06ecbaead248c17a3ce80.jpg)
节点是随机变量,其状态取决于它连接到的其他节点的状态。 因此,为了简单起见,模型被参数化为连接的权重以及每个可见和隐藏单元的一个偏置项。 我们用能量函数衡量联合概率分布的质量:
节点是随机变量,其状态取决于它连接到的其他节点的状态。这个模型可通过连接的权重值进行参数化,同时每个可见或隐藏单元都有一个偏置项(biased term), 为了简单起见, 这被省略了。
用能量函数衡量联合概率分布的质量:
![E(\mathbf{v}, \mathbf{h}) = \sum_i \sum_j w_{ij}v_ih_j + \sum_i b_iv_i + \sum_j c_jh_j](img/5959a6fe3c27570b7d474f26126eb628.jpg)
......@@ -47,31 +49,31 @@ RBM 的图形模型是一个全连接的二分图(fully-connected bipartite gr
### 2.9.1.2. 伯努利限制玻尔兹曼机
[`BernoulliRBM`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM") 中,所有单位都是二进制随机单元。 这意味着输入数据应该是二进制的,或者在 0 和 1 之间的实数值表示可见单元活跃或不活跃的概率。 这是一个很好的字符识别模型,其中的关注点是哪些像素是活跃的,哪些不是。 对于自然场景的图像,它不再适合,因为背景,深度和相邻像素的趋势取相同的值。
[`BernoulliRBM`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM") 中,所有单位都是二进制随机单元。 这意味着输入数据应该是二值,或者是在 0 和 1 之间的实数值, 其表示可见单元活跃或不活跃的概率。 这是一个很好的字符识别模型,其中的关注点是哪些像素是活跃的,哪些不是。 对于自然场景的图像,它不再适合,因为背景,深度和相邻像素的趋势取相同的值。
每个单位的条件概率分布由其接收的输入的sigmoid函数给出:
每个单位的条件概率分布由其接收的输入的 logistic sigmoid函数给出:
![P(v_i=1|\mathbf{h}) = \sigma(\sum_j w_{ij}h_j + b_i) \\P(h_i=1|\mathbf{v}) = \sigma(\sum_i w_{ij}v_i + c_j)](img/e6811d3f6333e9490d602db8dc1e3d96.jpg)
其中 ![\sigma](img/8c4a5c99b21079b9fb1be49910ff96e3.jpg)Sigmoid函数:
其中 ![\sigma](img/8c4a5c99b21079b9fb1be49910ff96e3.jpg) logistic sigmoid函数:
![\sigma(x) = \frac{1}{1 + e^{-x}}](img/f1c8c9b812ae1b6ec189eda900e47269.jpg)
### 2.9.1.3. 随机最大似然学习
[`BernoulliRBM`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM") 函数中实现的学习算法被称为随机最大似然(Stochastic Maximum Likelihood (SML))或持续对比发散(Persistent Contrastive Divergence (PCD))。由于数据的似然函数的形式,直接优化最大似然是不可行的:
[`BernoulliRBM`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM") 函数中实现的训练算法被称为随机最大似然(Stochastic Maximum Likelihood (SML))或持续对比发散(Persistent Contrastive Divergence (PCD))。由于数据的似然函数的形式,直接优化最大似然是不可行的:
![\log P(v) = \log \sum_h e^{-E(v, h)} - \log \sum_{x, y} e^{-E(x, y)}](img/1252aa7af065b0afd424b2ff01b4e2a5.jpg)
为了简单起见,上面的等式是针对单个训练样本所写的。相对于权重的梯度由对应于上述的两个项构成。根据它们的符号,它们通常被称为正梯度和负梯度。在这种实现中,按照小批量梯度(mini-batches of samples )对梯度进行计算。
为了简单起见,上面的等式是针对单个训练样本所写的。相对于权重的梯度由对应于上述的两个项构成。根据它们的符号,它们通常被称为正梯度和负梯度。在这种实现中,按照小批量样本(mini-batches of samples )对梯度进行计算。
maximizing the log-likelihood (最大化对数似然度)的情况下,正梯度使模型更倾向于与观察到的训练数据兼容的隐藏状态。由于 RBM 的二分体结构,可以有效地计算。然而,负梯度是棘手的。其目标是降低模型偏好的联合状态的能量,从而使数据保持真实。可以通过马尔可夫链蒙特卡罗近似,使用块 Gibbs 采样,通过迭代地对每个给定另一个的 ![v](img/ce7fd91ddb116ab5d747de0316caf657.jpg) 和 ![h](img/c5f49595b56010ad04fce358940848e5.jpg) 进行采样,直到链混合。以这种方式产生的样品有时被称为幻想粒子。这是无效的,很难确定马可夫链是否混合。
最大化对数似然度(maximizing the log-likelihood)的情况下,正梯度使模型更倾向于与观察到的训练数据兼容的隐藏状态。由于 RBM 的二分体结构,可以高效地计算。然而,负梯度是棘手的。其目标是降低模型偏好的联合状态的能量,从而使数据保持真实。可以通过马尔可夫链蒙特卡罗近似,使用块吉比斯采样,通过迭代地对每个 ![v](img/ce7fd91ddb116ab5d747de0316caf657.jpg) 和 ![h](img/c5f49595b56010ad04fce358940848e5.jpg) 进行交互采样,直到链混合。以这种方式产生的样本有时被称为幻想粒子。这是无效的,很难确定马可夫链是否混合。
对比发散方法建议在经过少量迭代后停止链,![k](img/f93871977da52a6d11045d57c3e18728.jpg) 通常为 1.该方法快速且方差小,但样本远离模型分布。
对比发散方法建议在经过少量迭代后停止链,迭代数![k](img/f93871977da52a6d11045d57c3e18728.jpg) 通常为 1.该方法快速且方差小,但样本远离模型分布。
持续的对比分歧解决这个问题。而不是每次需要梯度启动一个新的链,并且只执行一个 Gibbs 采样步骤,在 PCD 中,我们保留了在每个权重更新之后更新的 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) Gibbs 步长的多个链(幻想粒子)。这使得颗粒更彻底地探索空间.
持续对比发散(PCD)解决了这个问题。而不是每次需要梯度时都启动一个新的链,并且只执行一个吉比斯采样步骤,在 PCD 中,我们保留了多个链(幻想粒子),每个 链,在每个权重更新之后, 执行![k](img/f93871977da52a6d11045d57c3e18728.jpg)个吉比斯采样步骤。这使得粒子能更彻底地探索空间.
> **参考资料**:
>* [“A fast learning algorithm for deep belief nets”](http://www.cs.toronto.edu/~hinton/absps/fastnc.pdf) G. Hinton, S. Osindero, Y.-W. Teh, 2006
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册