Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
安浅Y
apachecn-dl-zh
提交
e786ad4d
A
apachecn-dl-zh
项目概览
安浅Y
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e786ad4d
编写于
12月 08, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-12-08 22:05:21
上级
69afcc91
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
25 addition
and
25 deletion
+25
-25
new/handson-unsup-learn-py/01.md
new/handson-unsup-learn-py/01.md
+7
-7
new/handson-unsup-learn-py/02.md
new/handson-unsup-learn-py/02.md
+2
-2
new/handson-unsup-learn-py/03.md
new/handson-unsup-learn-py/03.md
+1
-1
new/handson-unsup-learn-py/05.md
new/handson-unsup-learn-py/05.md
+1
-1
new/handson-unsup-learn-py/06.md
new/handson-unsup-learn-py/06.md
+1
-1
new/handson-unsup-learn-py/07.md
new/handson-unsup-learn-py/07.md
+13
-13
未找到文件。
new/handson-unsup-learn-py/01.md
浏览文件 @
e786ad4d
...
...
@@ -342,15 +342,15 @@ Dataset and regression line
由于本书完全致力于无监督算法,因此我决定不将简单的聚类分析展示为一个“世界”! 例如,而是相当基本的生成模型。 假设我们正在每小时监控一次到达地铁站的火车的数量,因为我们需要确定车站所需的安全代理的数量。 特别是,我们被要求每列火车至少有一名经纪人,每当火车数量减少时,我们将被罚款。
而且,在每个小时的开始发送一个组变得更容易,而不是一个个地控制代理。 因为问题很简单,所以我们也知道泊松分布很好,它是用
*μ*
参数化的泊松分布。 从理论上,我们知道,这种分布可以在独立性的主要假设下有效地模拟固定时间范围内发生的随机事件数。 在一般情况下,生成模型基于参数化分布(例如,使用神经网络),并且没有对其族做出特定假设。 仅在某些特定情况下(例如,高斯混合),才可以选择具有特定属性的分布,并且在不失严格性的前提下,我们可以将此示例视为这样的情况。
而且,在每个小时的开始发送一个组变得更容易,而不是一个个地控制代理。 因为问题很简单,所以我们也知道泊松分布很好,它是用
`μ`
参数化的泊松分布。 从理论上,我们知道,这种分布可以在独立性的主要假设下有效地模拟固定时间范围内发生的随机事件数。 在一般情况下,生成模型基于参数化分布(例如,使用神经网络),并且没有对其族做出特定假设。 仅在某些特定情况下(例如,高斯混合),才可以选择具有特定属性的分布,并且在不失严格性的前提下,我们可以将此示例视为这样的情况。
泊松分布的概率质量函数为:
![](
img/5e23a070-77de-4ec1-aea3-2e2e0d937c01.png
)
此分布描述了在预定时间间隔内观察
`k`
事件的可能性。 在我们的案例中,间隔始终为一小时,因此我们非常希望估计观察 10 列以上火车的可能性。 如何获得
*μ*
的正确数字?
此分布描述了在预定时间间隔内观察
`k`
事件的可能性。 在我们的案例中,间隔始终为一小时,因此我们非常希望估计观察 10 列以上火车的可能性。 如何获得
`μ`
的正确数字?
最常见的策略称为
**最大似然估计**
(
**MLE**
)。 它收集了一组观测值,并找到了
*μ*
的值,该值最大化了通过我们的分布生成所有点的概率。
最常见的策略称为
**最大似然估计**
(
**MLE**
)。 它收集了一组观测值,并找到了
`μ`
的值,该值最大化了通过我们的分布生成所有点的概率。
假设我们收集了
`N`
个观测值(每个观测值是一个小时内的到达次数),则
`μ`
的
**可能性**
相对于所有样本的概率就是 使用
`μ`
计算的概率分布下的所有样本(为简单起见,假设为 IID):
...
...
@@ -360,11 +360,11 @@ Dataset and regression line
![](
img/245700f9-7ebf-4b2c-8738-815a9780be8d.png
)
一旦计算出对数似然,就可以将
*μ*
的导数设置为 0,以找到最佳值。 在这种情况下,我们省略了证明(直接获得)并直接得出
`μ`
的 MLE 估计:
一旦计算出对数似然,就可以将
`μ`
的导数设置为 0,以找到最佳值。 在这种情况下,我们省略了证明(直接获得)并直接得出
`μ`
的 MLE 估计:
![](
img/bf118ff0-c5b5-45b8-8f26-88f41e0c8868.png
)
我们很幸运! MLE 估计值只是到达时间的平均值。 这意味着,如果我们观察到
`N`
值的平均值为
`μ`
,则最有可能产生它们的泊松分布为
*μ*
作为特征系数。 因此,从这种分布中提取的任何其他样本将与观察到的数据集兼容。
我们很幸运! MLE 估计值只是到达时间的平均值。 这意味着,如果我们观察到
`N`
值的平均值为
`μ`
,则最有可能产生它们的泊松分布为
`μ`
作为特征系数。 因此,从这种分布中提取的任何其他样本将与观察到的数据集兼容。
现在,我们可以开始第一个模拟。 假设我们在一个工作日的午后收集了 25 个观测值,如下所示:
...
...
@@ -420,7 +420,7 @@ mu = np.mean(obs)
print
(
'mu = {}'
.
format
(
mu
))
```
*μ*
的新值如下:
`μ`
的新值如下:
```
py
mu
=
10.641509433962264
...
...
@@ -495,7 +495,7 @@ Histogram of 2000 points sampled from the final Poisson distribution
强化学习有许多有趣的应用,而不仅限于游戏。 例如,推荐系统可以根据用户提供的二进制反馈(例如,拇指向上或向下)来校正建议。 强化学习和监督学习之间的主要区别是环境提供的信息。 实际上,在有监督的情况下,校正通常与校正成比例,而在强化学习中,必须考虑一系列操作和将来的奖励来进行分析。 因此,校正通常基于预期奖励的估计,并且其效果受后续操作的值影响。 例如,一个受监督的模型没有记忆,因此它的修正是即时的,而强化学习代理必须考虑情节的部分推出,以便确定一个动作是否实际上是负面的。
强化学习是机器学习的一个有趣的分支。 不幸的是,该主题超出了本文的讨论范围,因此我们不对其进行详细讨论(您可以在《Python 强化学习实用指南》
,Ravichandiran S.,Packt 出版
中找到更多详细信息)。
强化学习是机器学习的一个有趣的分支。 不幸的是,该主题超出了本文的讨论范围,因此我们不对其进行详细讨论(您可以在《Python 强化学习实用指南》中找到更多详细信息)。
现在,我们可以简要地解释一下为什么选择 Python 作为这种探索无监督学习世界的主要语言。
...
...
new/handson-unsup-learn-py/02.md
浏览文件 @
e786ad4d
...
...
@@ -51,7 +51,7 @@
![](
img/165e5351-6d27-4a0d-be73-bf40c3d8df31.png
)
可以假设
`p_data(x)`
的概率空间可划分为包含
`K`
的(可能无限)配置(对于
*K = 1 ,2,...,*
区域,这样
`p_data(x;k)`
表示样本属于簇
`k`
的概率。 以这种方式,我们指出,当确定
`p_data(x)`
时,每个可能的聚类结构已经存在。 可以对聚类概率分布做出进一步的假设,以更好地近似
`p_data(x)`
(我们将在第 5 章,
[HTG24 软聚类和高斯混合模型
)。 但是,当我们尝试将概率空间(和相应的样本)划分为内聚组时,我们可以假设两种可能的策略:
可以假设
`p_data(x)`
的概率空间可划分为包含
`K`
的(可能无限)配置(对于
*K = 1 ,2,...,*
区域,这样
`p_data(x;k)`
表示样本属于簇
`k`
的概率。 以这种方式,我们指出,当确定
`p_data(x)`
时,每个可能的聚类结构已经存在。 可以对聚类概率分布做出进一步的假设,以更好地近似
`p_data(x)`
(我们将在第 5 章,
“软聚类和高斯混合模型”
)。 但是,当我们尝试将概率空间(和相应的样本)划分为内聚组时,我们可以假设两种可能的策略:
*
**硬聚类**
:在这种情况下,每个样本
`x[p] ∈ X`
被分配给一个聚类
`K[i]`
,对于
`i ≠ j`
,
`K[i] ∩ K[j] = ∅`
。 我们将要讨论的大多数算法都属于这一类。 在这种情况下,问题可以表示为将聚类分配给每个输入样本的参数化函数:
...
...
@@ -110,7 +110,7 @@ for i in range(1, distances.shape[0] + 1):
Minkowski distances (log-scale) for different values of p and N
第一个结果是,如果我们选择
`N`
的值,则当
`p → ∞`
时,距离收缩并饱和。 这是 Minkowski 距离结构的正常结果,但敏锐的读者可能会注意到另一个要素。 让我们想象一下将
`1N`
向量的成分之一设置为等于
`0.0`
。 这等效于从
`N`
维超立方体的顶点移动到另一个顶点。 距离会怎样? 好吧,用一个例子很容易证明,当
`p → ∞`
时,两个距离收敛到相同的值。 特别是
Aggarwal,Hinneburg 和 Keim(在《关于高度量空间中距离度量的惊人行为》中,Aggarwal CC,Hinneburg A.,Keim DA,ICDT 2001)被
证明是重要的结果。
第一个结果是,如果我们选择
`N`
的值,则当
`p → ∞`
时,距离收缩并饱和。 这是 Minkowski 距离结构的正常结果,但敏锐的读者可能会注意到另一个要素。 让我们想象一下将
`1N`
向量的成分之一设置为等于
`0.0`
。 这等效于从
`N`
维超立方体的顶点移动到另一个顶点。 距离会怎样? 好吧,用一个例子很容易证明,当
`p → ∞`
时,两个距离收敛到相同的值。 特别是
被 Aggarwal,Hinneburg 和 Keim(在《关于高度量空间中距离度量的惊人行为》中)
证明是重要的结果。
假设我们有
`M`
个二元样本的分布
`p(x)`
,
`x[i] ∈ (0, 1)^d`
。 如果采用 Minkowski 度量,则可以计算最大值(
`Dmax^p`
)和最小值(
`Dmin^p`
)从
`p(x)`
采样的两个点与原点之间的距离(通常,该距离可以通过解析来计算,但是也可以使用迭代程序持续采样,直到
`Dmax^p`
和
`Dmin^p`
停止更改)。 作者证明以下不等式成立:
...
...
new/handson-unsup-learn-py/03.md
浏览文件 @
e786ad4d
...
...
@@ -452,7 +452,7 @@ Statistical measures corresponding to the subdataset -20 < x < -20 and y < 20
![](
img/f7d41112-b38c-4121-b764-1979a72dd4e4.png
)
因此,不稳定性是几对噪声变化的聚类结果之间的平均距离。 当然,该值不是绝对的,因此可以得出的规则是:选择产生最小不稳定的配置。 同样重要的是,这种方法不能与之前讨论的其他方法相提并论,因为它是基于其他超参数(噪声变化的数量,噪声均值和方差,二次采样率等),因此可以产生不同的结果。 当
`A`
和
`X`
固定时。 特别是噪声的大小会极大地改变不稳定性,因此在确定
*μ*
和
*之前,有必要评估`X`的均值和协方差矩阵。 高斯噪声的Σ*
。 在我们的示例中(基于“旷工”数据集中的 DBSCAN 聚类),我们从加性噪声项
*n [i] 〜N(E [X]*
开始创建了 20 个扰动版本。 ,
*Cov(X)/ 4*
),然后应用从均匀分布
*U`(0, 1)`*
中采样的乘法掩码。 这样,一些噪声项将被随机抵消或减少,如以下代码所示:
因此,不稳定性是几对噪声变化的聚类结果之间的平均距离。 当然,该值不是绝对的,因此可以得出的规则是:选择产生最小不稳定的配置。 同样重要的是,这种方法不能与之前讨论的其他方法相提并论,因为它是基于其他超参数(噪声变化的数量,噪声均值和方差,二次采样率等),因此可以产生不同的结果。 当
`A`
和
`X`
固定时。 特别是噪声的大小会极大地改变不稳定性,因此在确定
`μ`
和
*之前,有必要评估`X`的均值和协方差矩阵。 高斯噪声的Σ*
。 在我们的示例中(基于“旷工”数据集中的 DBSCAN 聚类),我们从加性噪声项
*n [i] 〜N(E [X]*
开始创建了 20 个扰动版本。 ,
*Cov(X)/ 4*
),然后应用从均匀分布
*U`(0, 1)`*
中采样的乘法掩码。 这样,一些噪声项将被随机抵消或减少,如以下代码所示:
```
py
import
numpy
as
np
...
...
new/handson-unsup-learn-py/05.md
浏览文件 @
e786ad4d
...
...
@@ -208,7 +208,7 @@ print(W[:, im])
![](
img/37882b8c-c2b1-48c3-a901-106fb8c48cb5.png
)
Full covariance matrix (left); diagonal covariance (center); circular/spherical covariance (right)
从现在开始,我们将一直在考虑完全协方差矩阵的情况,该矩阵可以实现最大的表达能力。 很容易理解,当这样的分布完全对称(即协方差矩阵是圆形/球形)时,伪簇的形状与 K 均值相同(当然 ,在高斯混合中,簇没有边界,但是始终可以在固定数量的标准偏差后削减高斯)。 相反,当协方差矩阵不是对角线或具有不同的方差时,影响不再是对称的(例如,在双变量的情况下,一个组件可以显示出比另一个更大的方差)。 在这两种情况下,高斯混合均允许我们计算实际概率,而不是测量样本之间的距离,
`x`
*[i]*
平均载体
*μ*
*[j]*
(以 K 均值表示)。 下图显示了单变量混合的示例:
从现在开始,我们将一直在考虑完全协方差矩阵的情况,该矩阵可以实现最大的表达能力。 很容易理解,当这样的分布完全对称(即协方差矩阵是圆形/球形)时,伪簇的形状与 K 均值相同(当然 ,在高斯混合中,簇没有边界,但是始终可以在固定数量的标准偏差后削减高斯)。 相反,当协方差矩阵不是对角线或具有不同的方差时,影响不再是对称的(例如,在双变量的情况下,一个组件可以显示出比另一个更大的方差)。 在这两种情况下,高斯混合均允许我们计算实际概率,而不是测量样本之间的距离,
`x`
*[i]*
平均载体
`μ`
*[j]*
(以 K 均值表示)。 下图显示了单变量混合的示例:
![](
img/45e96e53-863e-4c70-995b-c33388eb96ea.png
)
Example of a univariate Gaussian mixture
...
...
new/handson-unsup-learn-py/06.md
浏览文件 @
e786ad4d
...
...
@@ -50,7 +50,7 @@
![](
img/56c00e44-2ed4-4572-a7cd-087d8160596e.png
)
例如,单变量高斯分布完全由均值
*μ*
和方差
*σ^2*
来表征:
例如,单变量高斯分布完全由均值
`μ`
和方差
*σ^2*
来表征:
![](
img/b3f2250c-4a29-4b19-9652-1af23703d1d2.png
)
...
...
new/handson-unsup-learn-py/07.md
浏览文件 @
e786ad4d
...
...
@@ -239,11 +239,11 @@ pca = PCA(n_components=16, random_state=1000)
digits_pca
=
pca
.
fit_transform
(
X
)
```
在拟合模型并将所有样本投影到对应于前 16 个主成分的子空间后,即可获得
`digits_pca`
数组。 如果我们想将原始图像与其重构进行比较,则需要调用
`inverse_transform()`
方法,该方法将投影投射到原始空间上。 因此,如果 PCA 在这种情况下是
*f(x)变换:^(64) →^(16)*
,则逆变换为
*g (z ):→^(16) →→^(64)*
。 以下屏幕截图显示了前 10 位数字与它们的重构之间的比较:
在拟合模型并将所有样本投影到对应于前 16 个主成分的子空间后,即可获得
`digits_pca`
数组。 如果我们想将原始图像与其重构进行比较,则需要调用
`inverse_transform()`
方法,该方法将投影投射到原始空间上。 因此,如果 PCA 在这种情况下是
变换
`f(x): ℜ^64 → ℜ^16`
,则逆变换为
`g(x): ℜ^16 → ℜ^64`
。 以下屏幕截图显示了前 10 位数字与它们的重构之间的比较:
![](
img/6b57796e-5007-448a-9bd2-a96bc7e3affb.png
)
Original samples (top row); reconstructions (bottom row)
重建显然是有损的,但是数字仍然是可区分的。 现在,让我们通过对
`explained_variance_ratio_`
数组的所有值求和来检查总的解释方差,其中包含每个分量的相对解释方差的相对数量(因此,任何
*k [ < n*
分量始终小于 1):
重建显然是有损的,但是数字仍然是可区分的。 现在,让我们通过对
`explained_variance_ratio_`
数组的所有值求和来检查总的解释方差,其中包含每个分量的相对解释方差的相对数量(因此,任何
`k < n`
分量始终小于 1):
```
py
print
(
np
.
sum
(
pca
.
explained_variance_ratio_
))
...
...
@@ -283,7 +283,7 @@ Original dataset (left); PCA projected version (right)
Original dataset (left); PCA projected version (right)
当几何形状更复杂时,找到可区分的阈值可能是不可能的。 但是,我们知道,将数据投影到高维空间可以使它们线性分离。 特别地,如果
*x∈^n*
,我们可以选择适当的函数
*f(x)*
,这样
*y = f(x) ∈ℜ^p*
,以及
*p > > n*
。 不幸的是,将这种转换应用于整个数据集可能会非常昂贵。 实际上,给定一个转换矩阵
`A`
(具有
`n`
个组件),一个主分量,
`a`
<sup
class=
"calibre27"
>
*(t)[ 投影后的*
</sup>
可以编写如下(请记住它们是协方差矩阵的特征向量):
当几何形状更复杂时,找到可区分的阈值可能是不可能的。 但是,我们知道,将数据投影到高维空间可以使它们线性分离。 特别地,如果
`x ∈ ℜ^n`
,我们可以选择适当的函数
`f(x)`
,这样
`y = f(x) ∈ ℜ^p`
,以及
`p >> n`
。 不幸的是,将这种转换应用于整个数据集可能会非常昂贵。 实际上,给定一个转换矩阵
`A`
(具有
`n`
个组件),一个主分量,
`a`
<sup
class=
"calibre27"
>
*(t)[ *
</sup>
投影后的
可以编写如下(请记住它们是协方差矩阵的特征向量):
![](
img/0b373061-285c-4f7a-aadc-13d1e235a978.png
)
...
...
@@ -291,7 +291,7 @@ Original dataset (left); PCA projected version (right)
![](
img/febdde35-860f-4ead-b585-97c81169aa6a.png
)
可以看到,转换需要计算点积
*f(x [i] )^T f(x [i] )*
。 在这些情况下,我们可以采用所谓的
**内核技巧**
,该技巧指出存在称为[kernels]且具有有趣特性的特定功能
*K(•,•)*
,例如
如下:
可以看到,转换需要计算点积
`f(x[i])^T f(x[i])`
。 在这些情况下,我们可以采用所谓的
**内核技巧**
,该技巧指出存在称为[kernels]且具有有趣特性的特定功能
`K(·, ·)`
,
如下:
![](
img/d4f72e86-05e8-4d2e-8030-cc028ce9c8c1.png
)
...
...
@@ -303,7 +303,7 @@ Original dataset (left); PCA projected version (right)
*
`p`
为!
[](
img/464465b9-c466-4538-8f60-33259f9424d7.png
)
的多项式内核
*
乙状结肠内核:!
[](
img/f1b5b271-2c9d-46d2-99c5-e00687a24f4c.png
)
对于非常大的数据集,该过程仍然相当昂贵(但是可以预先计算并存储内核值,以避免浪费额外的时间),但是它比标准投影更有效。 此外,其具有允许在可能进行线性辨别的空间中提取主要成分的优点。 现在,让我们将 RBF 内核 PCA 应用于上一个屏幕快照中显示的半月数据集。
`gamma`
参数等于
*1 /σ^2*
。 在这种特殊情况下,主要问题是存在双重重叠。 考虑到原始标准偏差约为 1.0(即
*σ^2 = 1*
),我们至少需要三个标准偏差才能区分 他们适当; 因此,我们将设置
*γ= 10*
:
对于非常大的数据集,该过程仍然相当昂贵(但是可以预先计算并存储内核值,以避免浪费额外的时间),但是它比标准投影更有效。 此外,其具有允许在可能进行线性辨别的空间中提取主要成分的优点。 现在,让我们将 RBF 内核 PCA 应用于上一个屏幕快照中显示的半月数据集。
`gamma`
参数等于
`1 /σ^2`
。 在这种特殊情况下,主要问题是存在双重重叠。 考虑到原始标准偏差约为 1.0(即
`σ^2 = 1`
),我们至少需要三个标准偏差才能区分 他们适当; 因此,我们将设置
`γ = 10`
:
```
py
from
sklearn.datasets
import
make_moons
...
...
@@ -336,13 +336,13 @@ Original dataset (left); kernel PCA projected version (right)
*
*C = diag(σ^2 ,σ^2 ,...,σ^2 )*
:在这种情况下,噪声定义为
**同调**
(所有分量均具有相同的方差)。
*
*C = diag(σ [1]^2 , σ [2]^2 ,..., σ [n]^2*
*)*
,其中
*σ [1]^2 ≠σ [2]^2 ≠...≠σ [n]^2*
:在这种情况下,噪声定义为
**异方差**
(每个分量都有其自身的方差)。
有可能证明,当噪声是同调的时,PCA 可以轻松地对其进行管理,因为单个分量的解释方差以相同的方式受噪声项的影响(也就是说,这等同于不存在噪声)。 相反,当噪声为异方差时,PCA 的性能将下降,其结果可能绝对不可接受。 因此,Rubin 和 Thayer(在
用于 ML 因子分析的
*EM 算法中, Rubin D.和 Thayer D 。 , Psychometrika*
,
47,1982)提出了另一种降维方法,称为
**因子分析**
,它可以解决此类问题。
有可能证明,当噪声是同调的时,PCA 可以轻松地对其进行管理,因为单个分量的解释方差以相同的方式受噪声项的影响(也就是说,这等同于不存在噪声)。 相反,当噪声为异方差时,PCA 的性能将下降,其结果可能绝对不可接受。 因此,Rubin 和 Thayer(在
《用于 ML 因子分析的 EM 算法》中, Rubin D. 和 Thayer D.,Psychometrika,
47,1982)提出了另一种降维方法,称为
**因子分析**
,它可以解决此类问题。
假设我们有一个零中心数据集
`X`
,其中包含
`m`
个样本
*x [i] ∈^n*
。 我们的目标是找到一组潜在变量,
*z [i] ∈ℜ^p*
(其中
*p < n*
)和矩阵
`A`
(称为因子加载矩阵),以便可以重写每个样本,如下所示:
假设我们有一个零中心数据集
`X`
,其中包含
`m`
个样本
`x[i] ∈ ℜ^n`
。 我们的目标是找到一组潜在变量,
`z[i] ∈ ℜ^p`
(其中
`p < n`
)和矩阵
`A`
(称为因子加载矩阵),以便可以重写每个样本,如下所示:
![](
img/f30e647b-5fcb-4fb0-a0fc-26e5698a673d.png
)
因此,我们现在假设样本
`x[i]`
是一组高斯潜变量加上一个额外的异方差噪声项的组合。 由于潜在变量的维数较低,因此问题与标准 PCA 非常相似,主要区别在于,我们现在考虑了异方差噪声(当然,
`n`
项也可以为
null
,或者 同调)。 因此,当确定分量(即潜在变量)时,模型中将包括不同噪声方差的影响,最终效果是部分滤波(降噪)。 在上述论文中,作者提出了一种优化算法,该算法形式上不是很复杂,但是需要许多数学操作(因此,我们省略了任何证明)。 此方法基于
**期望最大化**
(
**EM**
)算法,该算法有助于查找使对数似然性最大化的参数集。 在本书中,我们无需讨论所有数学细节(可在原始论文中找到),而是检查该方法的属性并将结果与标准 PCA 进行比较。
因此,我们现在假设样本
`x[i]`
是一组高斯潜变量加上一个额外的异方差噪声项的组合。 由于潜在变量的维数较低,因此问题与标准 PCA 非常相似,主要区别在于,我们现在考虑了异方差噪声(当然,
`n`
项也可以为
`null`
,或者 同调)。 因此,当确定分量(即潜在变量)时,模型中将包括不同噪声方差的影响,最终效果是部分滤波(降噪)。 在上述论文中,作者提出了一种优化算法,该算法形式上不是很复杂,但是需要许多数学操作(因此,我们省略了任何证明)。 此方法基于
**期望最大化**
(
**EM**
)算法,该算法有助于查找使对数似然性最大化的参数集。 在本书中,我们无需讨论所有数学细节(可在原始论文中找到),而是检查该方法的属性并将结果与标准 PCA 进行比较。
让我们首先加载 Olivetti 人脸数据集,将其零居中,然后创建一个异方差嘈杂的版本,如下所示:
...
...
@@ -413,7 +413,7 @@ Factor Analysis log-likelihood(Xnz): 1459.2912218162423
在前面的表达式中,系数
`$1[$2]`
几乎总是不为零,因此所有组件都参与重建过程。 出于降维的目的,这不是问题,因为为了限制它们,我们对每个组件解释的方差更感兴趣。 但是,在某些任务下,分析每个较大的
**建筑原子**
很有帮助,并假设每个向量都可以表示为它们的稀疏组合。 最经典的例子是文本语料库,其中词典包含的术语比每个文档中涉及的术语更多。 这些类型的模型通常称为
**字典学习**
算法,因为原子集定义了一种字典,其中包含可用于创建新样本的所有单词。 当原子数
`k`
大于样品的维数
`n`
时,该字典被称为
**过度完成**
,其表示为 常稀疏。 相反,当
*k < n*
时,字典被称为
**未完全完成,**
并且向量需要更密集。
通过对函数的最小化,对解决方案的
`L[1]`
范数施加惩罚,可以轻松解决此类学习问题。 这种限制导致稀疏性的原因不在本书的讨论范围之内,但是有兴趣的人可以在
*Mastering Machine Learning Algorithms*
*Bonaccorso G.*
中找到更长的讨论范围。
*Packt 出版物*
,2018 年。
通过对函数的最小化,对解决方案的
`L[1]`
范数施加惩罚,可以轻松解决此类学习问题。 这种限制导致稀疏性的原因不在本书的讨论范围之内,但是有兴趣的人可以在
《Mastering Machine Learning Algorithms》中找到更长的讨论范围。
字典学习(以及稀疏 PCA)的问题可以正式表示为:
...
...
@@ -421,7 +421,7 @@ Factor Analysis log-likelihood(Xnz): 1459.2912218162423
这是一种算法的特殊情况,其中
`U[k]`
的分量被强制具有单位长度(除非
`normalize_components=False`
参数) ,并对系数
`V`
进行了惩罚,以增加其稀疏度(与系数
*α*
成比例)。
让我们考虑 MNIST 数据集,它执行具有 30 个成分的稀疏 PCA(产生不完全的字典)和中高稀疏度(例如
*α= 2.0*
)。 数组
`X`
应该包含归一化的样本,并在以下 PCA 示例中显示:
让我们考虑 MNIST 数据集,它执行具有 30 个成分的稀疏 PCA(产生不完全的字典)和中高稀疏度(例如
`α = 2.0`
)。 数组
`X`
应该包含归一化的样本,并在以下 PCA 示例中显示:
```
py
from
sklearn.decomposition
import
SparsePCA
...
...
@@ -448,7 +448,7 @@ y = spca.transform(X[0].reshape(1, -1)).squeeze()
Absolute coefficients for the sparse transformation of the digit X[0]
显然有一些主要成分(例如 2
, 7 , 13 , 17 , 21 , 24 , 26 , 27 和 30 ),一些次要的(例如 5 , 8 等)和一些无效或可忽略的值(例如 1 , 3 , 6 等)。 如果以相同的代码长度(30 个分量)增加稀疏度,则对应于空分量的系数将降至零,而如果代码长度也增加(例如
*k = 100*
) ,字典将变得过于完整,并且空系数的数量也将增加。
显然有一些主要成分(例如 2
,7,13,17,21,24,26,27 和 30 ),一些次要的(例如 5,8 等)和一些无效或可忽略的值(例如 1,3,6 等)。 如果以相同的代码长度(30 个分量)增加稀疏度,则对应于空分量的系数将降至零,而如果代码长度也增加(例如
`k = 100`
) ,字典将变得过于完整,并且空系数的数量也将增加。
...
...
@@ -458,7 +458,7 @@ Absolute coefficients for the sparse transformation of the digit X[0]
当数据集
`X`
为非负数时,可以应用已被证明的分解技术(例如,在
*中通过非负矩阵分解学习对象的部分, Lee DD 和 Seung,SH,Nature,*
401,10 / 1999)在任务目标是提取与样品结构部分相对应的原子时更加可靠。 例如,在图像的情况下,它们应该是几何元素,甚至是更复杂的部分。
**非负矩阵分解**
(
**NNMF**
)施加的主要条件是,所有涉及的矩阵都必须为非负,并且
*X = UV*
。 因此,一旦定义了标准
`N`
(例如 Frobenius),则简单目标就变成了:
当数据集
`X`
为非负数时,可以应用已被证明的分解技术(例如,在
《通过非负矩阵分解学习对象的部分》中)在任务目标是提取与样品结构部分相对应的原子时更加可靠。 例如,在图像的情况下,它们应该是几何元素,甚至是更复杂的部分。
**非负矩阵分解**
(
**NNMF**
)施加的主要条件是,所有涉及的矩阵都必须为非负,并且
`X = UV`
。 因此,一旦定义了标准
`N`
(例如 Frobenius),则简单目标就变成了:
![](
img/f554b0eb-d763-49ca-a7c2-6916ff5e9523.png
)
...
...
@@ -468,7 +468,7 @@ Absolute coefficients for the sparse transformation of the digit X[0]
双重正则化通过避免类似于监督模型的过度拟合的效果,使您既可以获得稀疏性,又可以获得样本的各部分之间的更好匹配(由于该解决方案次优,因此在适应新模型时更加灵活) 样本是从相同的数据生成过程中提取的;这增加了通常可以实现的可能性)。
现在,让我们考虑 MNIST 数据集,并将其分解为 50 个原子,最初设置
*α= 2.0*
和
*β= 0.1*
(在 scikit-learn 中称为
`l1_ratio`
)。 此配置将强制中等稀疏性和强
*L2*
/
Frobenius 正则化。 该过程非常简单,类似于稀疏 PCA:
现在,让我们考虑 MNIST 数据集,并将其分解为 50 个原子,最初设置
`α = 2.0`
和
`β = 0.1`
(在 scikit-learn 中称为
`l1_ratio`
)。 此配置将强制中等稀疏性和强 L2/
Frobenius 正则化。 该过程非常简单,类似于稀疏 PCA:
```
py
from
sklearn.decomposition
import
NMF
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录