Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
大唐爆破僧
apachecn-dl-zh
提交
982c5be1
A
apachecn-dl-zh
项目概览
大唐爆破僧
/
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,体验更适合开发者的 AI 搜索 >>
提交
982c5be1
编写于
12月 15, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-12-15 14:52:46
上级
b93b9438
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
32 addition
and
28 deletion
+32
-28
new/handson-unsup-learn-py/02.md
new/handson-unsup-learn-py/02.md
+7
-7
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
+9
-9
new/handson-unsup-learn-py/06.md
new/handson-unsup-learn-py/06.md
+5
-5
new/handson-unsup-learn-py/07.md
new/handson-unsup-learn-py/07.md
+9
-5
new/handson-unsup-learn-py/09.md
new/handson-unsup-learn-py/09.md
+1
-1
未找到文件。
new/handson-unsup-learn-py/02.md
浏览文件 @
982c5be1
...
...
@@ -170,7 +170,7 @@ Std(distances) = 0.042885311128215066
![](
img/2654403d-f595-446f-a602-b22518cc792f.png
)
重复该过程,直到质心停止变化为止(这也意味着序列
`S(0) > S(1) > ... > S(t[end])`
)。 读者应该立即了解到,计算时间受初始猜测的影响很大。 如果
`M^(0)`
非常接近
`M^t[end]`
,则可以找到一些迭代的最佳配置。 相反,当
`M^(0)`
纯粹是随机的时,无效初始选择的概率接近
`1`
(也就是说,每个初始
均匀随机选择为 在计算复杂度方面几乎相等
)。
重复该过程,直到质心停止变化为止(这也意味着序列
`S(0) > S(1) > ... > S(t[end])`
)。 读者应该立即了解到,计算时间受初始猜测的影响很大。 如果
`M^(0)`
非常接近
`M^t[end]`
,则可以找到一些迭代的最佳配置。 相反,当
`M^(0)`
纯粹是随机的时,无效初始选择的概率接近
`1`
(也就是说,每个初始
的均匀随机选择,在计算复杂度方面几乎等价
)。
...
...
@@ -311,7 +311,7 @@ kmdff = pd.concat([dff, df_km], axis=1)
K 均值和类似算法的最大缺点之一是对簇数的明确要求。 有时,这条信息是由外部约束施加的(例如,在乳腺癌的情况下,只有两种可能的诊断),但是在许多情况下(需要进行探索性分析时),数据科学家必须检查不同的配置
并评估它们。 评估 K 均值性能并选择适当数量的聚类的最简单方法是基于不同最终惯性的比较。
K 均值和类似算法的最大缺点之一是对簇数的明确要求。 有时,这条信息是由外部约束施加的(例如,在乳腺癌的情况下,只有两种可能的诊断),但是在许多情况下(需要进行探索性分析时),数据科学家必须检查不同的配置并评估它们。 评估 K 均值性能并选择适当数量的聚类的最简单方法是基于不同最终惯性的比较。
让我们从下面的简单示例开始,该示例基于 scikit-learn 函数
`make_blobs()`
生成的 12 个非常紧凑的高斯 Blob:
...
...
@@ -406,7 +406,7 @@ print(sdff[['perimeter_mean', 'area_mean', 'smoothness_mean',
根据事实,我们知道所有这些样本都是恶性的,但是我们可以尝试确定一个规则。
`area_mean`
/
`perimeter_mean`
之比约为
`9.23`
,相对于平均值,相对标准偏差非常小。 这意味着这些样本在非常狭窄的范围内代表了扩展的肿瘤。 而且,
`concavity_mean`
和
`symmetry_mean`
均大于总值。 因此(在不进行科学合理分析的前提下),我们可以得出结论,分配给这些簇的样本代表了已经进入晚期的非常糟糕的肿瘤。
为了与良性样本进行比较,现在考虑由
`x > -10`
和
`20 < y < 50`
,界定的区域
如下:
为了与良性样本进行比较,现在考虑由
`x > -10`
和
`20 < y < 50`
界定的区域
如下:
```
py
sdff
=
dff
[(
dff
.
x
>
-
10.0
)
&
(
dff
.
y
>
20.0
)
&
(
dff
.
y
<
50.0
)]
...
...
@@ -454,7 +454,7 @@ print(sdff[['perimeter_mean', 'area_mean', 'smoothness_mean',
第一张图显示了
`K = 2`
的
*自然*
聚类。 第一个轮廓非常清晰,表明平均群集间距离具有较大的差异。 而且,一个集群比另一个集群具有更多的分配(即使它不那么尖锐)。 从数据集描述中,我们知道这两个类别是不平衡的(357 良性与 212 恶性),因此,不对称是部分合理的。 但是,一般而言,当数据集平衡时,良好的轮廓图的特征是具有均匀轮廓的均质簇,其圆形轮廓应接近 1.0。 实际上,当形状类似于长雪茄时,这意味着群集内距离非常接近其平均值(高内聚),并且相邻群集之间存在明显的分隔。 对于
`K = 2`
,我们拥有合理的分数,因为第一个簇达到 0.6,而第二个簇具有约 0.8 的峰值。 但是,尽管后者的大多数样本的特征是
`s(•) > 0.75`
,但在前一种样本中,约有一半的样本低于 0.5。 分析表明,较大的聚类更均匀,并且 K 均值更易于分配样本(即,就度量而言,
`x[i] ∈ K[2]`
的方差较小,在高维空间中,代表
`K[2]`
的球比代表
`K[1]`
的球更均匀。)。
其他图显示了类似的情况,因为已检测到非常紧密的聚类以及一些尖锐的聚类。 这意味着宽度差异非常一致。 但是,随着
`K`
的增加,由于分配的样本数趋于变得相似,因此我们获得了更加均一的簇。 具有
`s(·) > 0.75`
的非常圆形(几乎矩形)的簇的存在证实了数据集至少包含一组非常有凝聚力的样本,
其样本
相对于分配给其他群集的任何其他点的距离都非常接近。 我们知道,恶性类(即使其基数更大)更为紧凑,而良性类则分布在更宽的子空间中。 因此,我们可以假设,对于所有
`K`
来说,最圆的簇是由恶性样本组成的,而其他所有簇都可以根据其清晰度进行区分。 例如,对于
`K = 8`
,第三簇很可能对应于第一图中第二簇的中心部分,而较小的簇包含属于良性子集的孤立区域的样本。
其他图显示了类似的情况,因为已检测到非常紧密的聚类以及一些尖锐的聚类。 这意味着宽度差异非常一致。 但是,随着
`K`
的增加,由于分配的样本数趋于变得相似,因此我们获得了更加均一的簇。 具有
`s(·) > 0.75`
的非常圆形(几乎矩形)的簇的存在证实了数据集至少包含一组非常有凝聚力的样本,相对于分配给其他群集的任何其他点的距离都非常接近。 我们知道,恶性类(即使其基数更大)更为紧凑,而良性类则分布在更宽的子空间中。 因此,我们可以假设,对于所有
`K`
来说,最圆的簇是由恶性样本组成的,而其他所有簇都可以根据其清晰度进行区分。 例如,对于
`K = 8`
,第三簇很可能对应于第一图中第二簇的中心部分,而较小的簇包含属于良性子集的孤立区域的样本。
如果我们不了解基本事实,则应同时考虑
`K = 2`
和
`K = 8`
(甚至更大)。 实际上,在第一种情况下,我们可能会丢失许多细粒度的信息,但是我们正在确定一个强大的细分领域(假设由于问题的性质,一个集群的凝聚力不是很高)。 另一方面,在
`K > 8`
的情况下,簇明显更小,具有适度的内聚性,它们代表具有某些共同特征的亚组。 正如我们在上一节中讨论的那样,最终的选择取决于许多因素,这些工具只能提供一般的指示。 此外,当聚类是非凸的或它们的方差未在所有特征之间均匀分布时,K 均值将始终产生次优性能,因为所得聚类将包含较大的空白空间。 如果没有特定的方向,则群集的最佳数量与包含均匀(宽度大致相同)的圆形图的图相关联。 如果形状对于任何
`K`
值仍然保持清晰,则意味着几何形状与对称度量不完全兼容(例如,簇非常拉伸),应考虑其他方法。
...
...
@@ -509,7 +509,7 @@ print('Completeness: {}'.format(completeness_score(kmdff['diagnosis'], kmdff['pr
Completeness
:
0.5168089972809706
```
该结果证实,对于
`K = 2`
,K 均值不能完美地分离
聚类,因为如我们所见,因为某些恶性样本被错误地分配给包含大量 大多数良性样本
。 但是,由于
`c`
并不是非常小,因此我们可以确保将这两个类别的大多数样本分配给了不同的群集。 邀请读者使用其他方法(在第 3 章,“高级聚类”中讨论)检查该值,并提供不同结果的简要说明。
该结果证实,对于
`K = 2`
,K 均值不能完美地分离
群集,因为如我们所见,因为某些恶性样本被错误地分配给包含大多数良性样本的群集
。 但是,由于
`c`
并不是非常小,因此我们可以确保将这两个类别的大多数样本分配给了不同的群集。 邀请读者使用其他方法(在第 3 章,“高级聚类”中讨论)检查该值,并提供不同结果的简要说明。
...
...
@@ -523,7 +523,7 @@ Completeness: 0.5168089972809706
![](
img/a0058b86-18c3-459c-bf62-7fc1c35afc87.png
)
与完整性得分类似,当
`H(Y[true] | Y[pred]) → H(Y[true])`
时,表示
分配对条件熵没有影响,因此在聚类(例如,每个聚类包含属于所有类别的样本)并且
`h → 0`
之后,不确定性不会降低。 相反,当
`H(Y[true] | Y[pred]) → 0`
,
`h → 1`
,因为对预测的了解减少了关于真实分配的不确定性,并且簇几乎只包含带有相同标签的样本。 重要的是要记住,仅靠这个分数是不够的,因为它不能保证一个簇包含所有带有相同真实标签的样本
`x[i] ∈ X`
。 这就是为什么同质性分数总是与完整性分数一起评估的原因。
与完整性得分类似,当
`H(Y[true] | Y[pred]) → H(Y[true])`
时,表示分配对条件熵没有影响,因此在聚类(例如,每个聚类包含属于所有类别的样本)并且
`h → 0`
之后,不确定性不会降低。 相反,当
`H(Y[true] | Y[pred]) → 0`
,
`h → 1`
,因为对预测的了解减少了关于真实分配的不确定性,并且簇几乎只包含带有相同标签的样本。 重要的是要记住,仅靠这个分数是不够的,因为它不能保证一个簇包含所有带有相同真实标签的样本
`x[i] ∈ X`
。 这就是为什么同质性分数总是与完整性分数一起评估的原因。
对于乳腺癌威斯康星州数据集,
`K = 2`
,我们获得以下信息:
...
...
@@ -602,7 +602,7 @@ from sklearn.metrics import adjusted_mutual_info_score
Adj
.
Mutual
info
:
0.42151741598216214
```
该协议是适度的,并且与其他措施兼容。 假设存在置换和机会分配的可能性,
`Y[true]`
和
`Y[pred]`
共享中等级别的信息,因为我们已经讨论过,K 均值能够正确分配重叠概率可忽略不计的所有样本,同时它倾向于考虑良性地位于两个聚类边界上的许多恶性样本(相反,
这没有错 良性样本的分配)。 没有任何进一步的指示,该索引还建议检查其他可以管理非凸簇的聚类算法,因为缺少共享信息主要是由于无法使用标准球(尤其是在重叠区域为子空间)捕获复杂的几何图形 更重要)
。
该协议是适度的,并且与其他措施兼容。 假设存在置换和机会分配的可能性,
`Y[true]`
和
`Y[pred]`
共享中等级别的信息,因为我们已经讨论过,K 均值能够正确分配重叠概率可忽略不计的所有样本,同时它倾向于考虑良性地位于两个聚类边界上的许多恶性样本(相反,
良性样本的分配没有错)。 没有任何进一步的指示,该索引还建议检查其他可以管理非凸簇的聚类算法,因为缺少共享信息主要是由于无法使用标准球(尤其是在重叠区域更显著的子空间)捕获复杂的几何图形
。
...
...
new/handson-unsup-learn-py/03.md
浏览文件 @
982c5be1
...
...
@@ -758,7 +758,7 @@ Adjusted Rand score BIRCH: 0.767304858161472
如您所见,小批量 K 均值很快就达到最大值,所有随后的振荡都是由于重新分配。 相反,BIRCH 的性能总是较差,且呈负趋势。 出现这种差异的主要原因是由于策略不同。 实际上,小批量 K 均值可以在几次批处理后纠正质心的初始猜测,并且重新分配不会显着改变配置。 另一方面,BIRCH 执行的合并数受样本数影响。
刚开始时,性能不是很相似,因为 CF 树中的子簇的数量不是很大(因此,聚合更多
*相干*
),但是经过几批之后,BIRCH 必须
进行聚合 为了获得所需的最终簇数,越来越多的子簇
。 这种情况以及越来越多的流样本数量驱使算法重新排列树,这常常导致稳定性的损失。 此外,数据集有一些重叠,可以通过对称方法更轻松地进行管理(实际上,即使分配错误,质心在这种情况下也可以到达其最终位置),而采用分层方法(例如 BIRCH 所采用的方法更能够找到所有子区域,但是在合并具有最小间距甚至更糟的重叠的子类时,更容易出错。 但是,此示例确认,通常首选小批量 K 均值作为首选,并且仅在性能不符合预期时(应谨慎选择其参数)才应选择 BIRCH。 我邀请读者使用更多所需的簇(例如
`nb_clusters=20`
和
`center_box=[-10.5, 10.5]`
)重复该示例。 可能会看到在这种情况下(保持所有其他参数不变),由小批量 K 均值执行的重新分配如何以较差的最终调整后的 Rand 分数减慢了收敛速度,而 BIRCH 立即达到了最佳值(几乎相等) 到通过标准 K 均值获得的结果),并且不再受样本数量的影响。
刚开始时,性能不是很相似,因为 CF 树中的子簇的数量不是很大(因此,聚合更多
*相干*
),但是经过几批之后,BIRCH 必须
聚合越来越多的子簇来获得所需的最终簇数
。 这种情况以及越来越多的流样本数量驱使算法重新排列树,这常常导致稳定性的损失。 此外,数据集有一些重叠,可以通过对称方法更轻松地进行管理(实际上,即使分配错误,质心在这种情况下也可以到达其最终位置),而采用分层方法(例如 BIRCH 所采用的方法更能够找到所有子区域,但是在合并具有最小间距甚至更糟的重叠的子类时,更容易出错。 但是,此示例确认,通常首选小批量 K 均值作为首选,并且仅在性能不符合预期时(应谨慎选择其参数)才应选择 BIRCH。 我邀请读者使用更多所需的簇(例如
`nb_clusters=20`
和
`center_box=[-10.5, 10.5]`
)重复该示例。 可能会看到在这种情况下(保持所有其他参数不变),由小批量 K 均值执行的重新分配如何以较差的最终调整后的 Rand 分数减慢了收敛速度,而 BIRCH 立即达到了最佳值(几乎相等) 到通过标准 K 均值获得的结果),并且不再受样本数量的影响。
...
...
new/handson-unsup-learn-py/05.md
浏览文件 @
982c5be1
...
...
@@ -78,7 +78,7 @@
![](
img/d1acd98b-e3aa-42e7-9bc8-4a9a58ecf622.png
)
如果
`x[i]`
接近质心
`x[i]`
的质心,则总和接近 0,并且
权重增加(当然,为了避免数字不稳定性,在分母上添加了一个小常数,因此它永远不能等于 0)。 当
`m >> 1`
时,指数接近 0,并且所有项的总和趋向于 1。这意味着对特定簇的偏好减弱,
`w [ij] ≈ 1 / k`
对应于均匀分布。 因此,较大的
`m`
表示划分较为平坦,不同分配之间没有明显的区别(除非样本非常接近质心),而当
`m ≈ 1`
时,则是一个主要的
权重将几乎等于 1,其他权重将接近 0(也就是说,分配很困难)。
如果
`x[i]`
接近质心
`x[i]`
的质心,则总和接近 0,并且
权重增加(当然,为了避免数字不稳定性,在分母上添加了一个小常数,因此它永远不能等于 0)。 当
`m >> 1`
时,指数接近 0,并且所有项的总和趋向于 1。这意味着对特定簇的偏好减弱,
`w [ij] ≈ 1 / k`
对应于均匀分布。 因此,较大的
`m`
表示划分较为平坦,不同分配之间没有明显的区别(除非样本非常接近质心),而当
`m ≈ 1`
时,则是单个主要
权重将几乎等于 1,其他权重将接近 0(也就是说,分配很困难)。
以类似于 K 均值的方式更新质心(换句话说,以最大化分离和内部凝聚力为目标):
...
...
@@ -100,7 +100,7 @@ X = digits['data'] / 255.0
Y
=
digits
[
'target'
]
```
`X`
数组包含 1,797 个扁平化样本,
`x ∈ R^(64)`
,对应于灰度
`8×8`
图像(其值
为
在 0 和 1 之间归一化)。 我们要分析不同
`m`
系数(1.05 和 1.5 之间的 5 个均匀值)的行为,并检查样本的权重(在我们的例子中,我们将使用
`X[0]`
)。 因此,我们调用 Scikit-Fuzzy
`cmeans`
函数,设置
`c=10`
(簇数)以及两个收敛参数
`error=1e-6`
和
`maxiter=20000`
。 此外,出于可重复性的原因,我们还将设置标准随机
`seed=1000`
。 输入数组应包含样本列。 因此,我们需要按如下方式转置它:
`X`
数组包含 1,797 个扁平化样本,
`x ∈ R^(64)`
,对应于灰度
`8×8`
图像(其值在 0 和 1 之间归一化)。 我们要分析不同
`m`
系数(1.05 和 1.5 之间的 5 个均匀值)的行为,并检查样本的权重(在我们的例子中,我们将使用
`X[0]`
)。 因此,我们调用 Scikit-Fuzzy
`cmeans`
函数,设置
`c=10`
(簇数)以及两个收敛参数
`error=1e-6`
和
`maxiter=20000`
。 此外,出于可重复性的原因,我们还将设置标准随机
`seed=1000`
。 输入数组应包含样本列。 因此,我们需要按如下方式转置它:
```
py
from
skfuzzy.cluster
import
cmeans
...
...
@@ -133,7 +133,7 @@ Mu = fc.reshape((10, 8, 8))
质心对应于
`m = 1.2`
和
`P[C] ≈ 0.73`
如您所见,所有不同的数字均已选定,并且按预期,第三个簇(由
`C[2]`
表示)对应于数字 0。现在,让我们检查一下
对应于
`X[0]`
的权重(也是
`W`
的转置,因此它们存储在
`W[:, 0]`
中):
如您所见,所有不同的数字均已选定,并且按预期,第三个簇(由
`C[2]`
表示)对应于数字 0。现在,让我们检查一下对应于
`X[0]`
的权重(也是
`W`
的转置,因此它们存储在
`W[:, 0]`
中):
```
py
print
(
W
[:,
0
])
...
...
@@ -202,7 +202,7 @@ print(W[:, im])
**高斯混合**
是最著名的软聚类方法之一,具有数十种特定应用。 它可以被认为是 K 均值之父,因为它的工作方式非常相似。 但是,与该算法相反,给定样本
`x[i] ∈ X`
和
`k`
簇(以高斯分布表示),它提供了一个概率向量,
`[p(x [i] ∈ C[1]), ..., p(x [i] ∈ C[k])]`
。
以更一般的方式,如果数据集
`X`
已从数据生成过程
`p_data`
(高斯混合模型)中采样
基于以下假设:
以更一般的方式,如果数据集
`X`
已从数据生成过程
`p_data`
中采样,高斯混合模型
基于以下假设:
![](
img/d446dbad-43ac-4ad0-9b81-8ebf92d53811.png
)
...
...
@@ -260,11 +260,11 @@ print(W[:, im])
![](
img/b9e28a78-408d-4541-bfa3-64f553fc6e23.png
)
这两个概率现在很简单。 项
`p(x[i] | j, θ[j])`
是
`x[i]`
在第
`j`
个高斯之下的概率,而
`p(j | θ[j])`
只是第
`j`
个高斯的概率,它等于权重
`w[j]`
的权重。 为了消除潜在变量,EM 算法以迭代方式进行,由两个步骤组成。 第一个(称为
**期望步骤**
或
**E 步骤**
)是对没有潜在变量的似然性的代理计算。 如果将整个参数集表示为
`θ`
,并且在迭代
`t`
时计算出的同一参数集为
`x[i]`
,则可以计算出
以下功能
:
这两个概率现在很简单。 项
`p(x[i] | j, θ[j])`
是
`x[i]`
在第
`j`
个高斯之下的概率,而
`p(j | θ[j])`
只是第
`j`
个高斯的概率,它等于权重
`w[j]`
的权重。 为了消除潜在变量,EM 算法以迭代方式进行,由两个步骤组成。 第一个(称为
**期望步骤**
或
**E 步骤**
)是对没有潜在变量的似然性的代理计算。 如果将整个参数集表示为
`θ`
,并且在迭代
`t`
时计算出的同一参数集为
`x[i]`
,则可以计算出
以下函数
:
![](
img/bf126480-b54e-43a6-a949-5fe06cc0748f.png
)
`Q(θ | θ[t])`
是相对于变量
`z[ij]`
的联合对数似然的期望值。并以数据集
`X`
和迭代时设置的参数
`t`
为条件。 此操作的作用是删除潜在变量(相加或积分后的值),并得出实际对数似然的近似值。 不难想象,第二步(称为
**最大化步**
或
**M 步**
)的目标是最大化
`Q(θ | θ[t])`
生成一个新的参数集
`θ[t + 1]`
。 重复该过程,直到参数变得稳定为止,并且有可能证明最终的参数集与 MLE 相对应。 跳过所有中间步骤,并假设最佳参数集为
`$1[$2]`
,最终结果如下:
`Q(θ | θ[t])`
是相对于变量
`z[ij]`
的联合对数似然的期望值。并以数据集
`X`
和迭代时设置的参数
`t`
为条件。 此操作的作用是删除潜在变量(相加或积分后的值),并得出实际对数似然的近似值。 不难想象,第二步(称为
**最大化步**
或
**M 步
骤
**
)的目标是最大化
`Q(θ | θ[t])`
生成一个新的参数集
`θ[t + 1]`
。 重复该过程,直到参数变得稳定为止,并且有可能证明最终的参数集与 MLE 相对应。 跳过所有中间步骤,并假设最佳参数集为
`$1[$2]`
,最终结果如下:
![](
img/9472adaf-1521-4725-b506-a53281bbfba7.png
)
...
...
@@ -364,7 +364,7 @@ Eigenvectors 2:
[
-
0.6702373
-
0.22534853
]]
```
在两个高斯变量中(一旦被截断并从顶部观察,都可以想象成椭圆),主要成分是第二个成分(即第二列,对应于最大的特征值)。 椭圆的偏心率由特征值之间的比率确定。 如果
的比率等于
等于 1,则形状为圆形,而高斯完美对称。 否则,它们会沿轴拉伸。 主要成分与
`x`
轴之间的角度(度)如下:
在两个高斯变量中(一旦被截断并从顶部观察,都可以想象成椭圆),主要成分是第二个成分(即第二列,对应于最大的特征值)。 椭圆的偏心率由特征值之间的比率确定。 如果
比率
等于 1,则形状为圆形,而高斯完美对称。 否则,它们会沿轴拉伸。 主要成分与
`x`
轴之间的角度(度)如下:
```
py
import
numpy
as
np
...
...
@@ -423,7 +423,7 @@ P([1, 0]=G1) = 0.068 and P([1, 0]=G2) = 0.932
![](
img/be138ce2-232e-4f56-bea4-bb9522afbb79.png
)
这种方法有两个重要含义。 第一个是关于价值本身。 AIC 越小,得分越高。 实际上,考虑到奥卡姆(Occam)的剃刀原理,模型的目的是用最少的参数获得最佳的似然性。 第二个含义与信息理论严格相关(我们不在讨论数学上繁琐的细节),尤其是与数据生成过程和通用概率模型之间的信息丢失有关。 可以证明 AIC 的渐近最小化(即,当样本数量趋于无穷大时)等于信息丢失的最小化。 考虑基于不同成分数量的几种高斯混合(
`n[p]`
是所有权重,均值和协方差参数的总和),具有最小 AIC 的配置对应于
该模型 可以最高精度地再现数据生成过程
。 AIC 的主要局限性在于小型数据集。 在这种情况下,AIC 倾向于针对大量参数达到最小值,这与 Occam 的剃刀原理相反。 但是,在大多数现实生活中,AIC 提供了一种有用的相对措施,可以帮助数据科学家排除许多配置并仅分析最有前途的配置。
这种方法有两个重要含义。 第一个是关于价值本身。 AIC 越小,得分越高。 实际上,考虑到奥卡姆(Occam)的剃刀原理,模型的目的是用最少的参数获得最佳的似然性。 第二个含义与信息理论严格相关(我们不在讨论数学上繁琐的细节),尤其是与数据生成过程和通用概率模型之间的信息丢失有关。 可以证明 AIC 的渐近最小化(即,当样本数量趋于无穷大时)等于信息丢失的最小化。 考虑基于不同成分数量的几种高斯混合(
`n[p]`
是所有权重,均值和协方差参数的总和),具有最小 AIC 的配置对应于
使用最高精度再现数据生成过程的模型
。 AIC 的主要局限性在于小型数据集。 在这种情况下,AIC 倾向于针对大量参数达到最小值,这与 Occam 的剃刀原理相反。 但是,在大多数现实生活中,AIC 提供了一种有用的相对措施,可以帮助数据科学家排除许多配置并仅分析最有前途的配置。
当需要强制将参数的数量保持在非常低的水平时,可以使用
**贝叶斯信息准则**
(
**BIC**
),其定义如下:
...
...
@@ -460,7 +460,7 @@ for n in range(1, n_max_components + 1):
高斯混合物的 AIC,BIC 和对数似然(组件数量在
`(1, 20)`
)
在这种情况下,我们知道数据集是由两个高斯分布生成的,但是让我们假设我们没有这条信息。 AIC 和 BIC 都具有
`n[c] = 2`
的(局部)最小值。 但是,尽管 BIC 越来越大,但 AIC 的伪全局最小值为
`n[c] = 18*`
。 因此,如果我们信任 AIC,则应该选择 18 个分量,这等效于以许多高斯对数据集进行超细分,并且方差很小。 另一方面,
`n[c] = 2`
和
`n[c] = 18`
之间的差异不是很大 值,因此考虑到简单得多,我们也可以选择以前的配置。 BIC 确认了这种选择。 实际上,即使还有一个局部最小值对应于
`n[c] = 18`
,其值也比
`n[c] = 2`
。 正如我们之前所解释的,这种行为是由于 BIC 施加的样本量额外罚款。 对于
`n[c] = 2`
,每个二元高斯变量需要一个权重变量,两个均值变量和四个协方差矩阵变量,我们得到
`n[p] = 2 (1 + 2 + 4) = 14`
,对于
`n[c] = 18`
,我们得到
`n[p] = 18 (1 + 2 + 4) = 126`
。 由于有 300 个样本,BIC 会受到
`log(300) ≈ 5.7`
的惩罚,这会导致 BIC 增加约 350。随着
`n[c]`
变大(因为在极端情况下,每个点都可以被视为由具有零方差的单个高斯生成,等效于狄拉克三角洲),因此参数数量在模型选择
中起主要作用 处理
。
在这种情况下,我们知道数据集是由两个高斯分布生成的,但是让我们假设我们没有这条信息。 AIC 和 BIC 都具有
`n[c] = 2`
的(局部)最小值。 但是,尽管 BIC 越来越大,但 AIC 的伪全局最小值为
`n[c] = 18*`
。 因此,如果我们信任 AIC,则应该选择 18 个分量,这等效于以许多高斯对数据集进行超细分,并且方差很小。 另一方面,
`n[c] = 2`
和
`n[c] = 18`
之间的差异不是很大 值,因此考虑到简单得多,我们也可以选择以前的配置。 BIC 确认了这种选择。 实际上,即使还有一个局部最小值对应于
`n[c] = 18`
,其值也比
`n[c] = 2`
。 正如我们之前所解释的,这种行为是由于 BIC 施加的样本量额外罚款。 对于
`n[c] = 2`
,每个二元高斯变量需要一个权重变量,两个均值变量和四个协方差矩阵变量,我们得到
`n[p] = 2 (1 + 2 + 4) = 14`
,对于
`n[c] = 18`
,我们得到
`n[p] = 18 (1 + 2 + 4) = 126`
。 由于有 300 个样本,BIC 会受到
`log(300) ≈ 5.7`
的惩罚,这会导致 BIC 增加约 350。随着
`n[c]`
变大(因为在极端情况下,每个点都可以被视为由具有零方差的单个高斯生成,等效于狄拉克三角洲),因此参数数量在模型选择
过程中起主要作用
。
没有任何额外的惩罚,很可能会选择更大的模型作为最佳选择,但是在聚类过程中,我们还需要强制执行最大分离原则。 这种情况部分与更少的组件有关,因此 BIC 应该成为最佳方法。 通常,我建议比较两个标准,以尝试找到与 AIC 和 BIC 之间的最大协议相对应的
`n[c]`
。 此外,还应考虑基本的背景知识,因为许多数据生成过程具有明确定义的行为,并且有可能通过排除所有不现实的值来限制潜在组件的范围。 我邀请读者以
`n[c] = 18`
重复前面的示例,绘制所有高斯曲线并比较某些特定点的概率。
...
...
new/handson-unsup-learn-py/06.md
浏览文件 @
982c5be1
...
...
@@ -292,7 +292,7 @@ Epanechnikov 核
一旦选择了核函数,就可以使用 k 最近邻方法建立概率密度函数的完全近似值。 实际上,给定数据集
`X`
(为简单起见,
`X ∈ R^m`
,所以这些值是实数),例如,
创建起来很容易 球形树
(如第 2 章,“聚类基础知识”中所述)以有效的方式对数据进行分区。 当数据结构准备就绪时,可以在带宽定义的半径范围内获得查询点
`x[j]`
的所有邻居。 假设这样的集合是
`X[j] = {x[1], ..., x[t]}`
,点数是
`N[j]`
。 概率密度的估计如下:
一旦选择了核函数,就可以使用 k 最近邻方法建立概率密度函数的完全近似值。 实际上,给定数据集
`X`
(为简单起见,
`X ∈ R^m`
,所以这些值是实数),例如,
通过创建球形树,很容易
(如第 2 章,“聚类基础知识”中所述)以有效的方式对数据进行分区。 当数据结构准备就绪时,可以在带宽定义的半径范围内获得查询点
`x[j]`
的所有邻居。 假设这样的集合是
`X[j] = {x[1], ..., x[t]}`
,点数是
`N[j]`
。 概率密度的估计如下:
![](
img/93a535f7-f555-4e22-b5da-bed6fa8503ba.png
)
...
...
@@ -302,7 +302,7 @@ Epanechnikov 核
`x[j]`
的密度估计。 在属于
`x[j]`
邻域的每个点中评估内核函数
在这一点上,自然会问为什么不为每个查询使用整个数据集而不是 k-NN 方法? 答案很简单,它基于这样的假设:可以使用局部行为轻松地插值以
`x[j]`
计算的密度函数的值(即,对于多变量
分布,以
`x[j]`
为中心的球和
*远点*
对估计没有影响。 因此,我们可以将计算限制为
`X`
的较小子集,避免包含接近零的贡献。
在这一点上,自然会问为什么不为每个查询使用整个数据集而不是 k-NN 方法? 答案很简单,它基于这样的假设:可以使用局部行为轻松地插值以
`x[j]`
计算的密度函数的值(即,对于多变量分布,以
`x[j]`
为中心的球和
*远点*
对估计没有影响。 因此,我们可以将计算限制为
`X`
的较小子集,避免包含接近零的贡献。
在讨论如何确定最佳带宽之前,让我们展示一下先前定义的数据集的密度估计(使用 scikit-learn)。 由于我们没有任何特定的先验知识,因此我们将使用具有不同带宽(0.1、0.5 和 1.5)的高斯核。 所有其他参数均保留为其默认值。 但是,
`KernelDensity`
类允许设置度量(默认为
`metric='euclidean'`
),数据结构(默认为
`algorithm='auto'`
,它根据维度在球树和 kd 树之间执行自动选择),以及绝对公差和相对公差(分别为 0 和
`10^(-8)`
)。 在许多情况下,无需更改默认值。 但是,对于具有特定功能的超大型数据集,例如,更改
`leaf_size`
参数以提高性能可能会有所帮助(如第 2 章,“聚类基础知识”中讨论的 )。 此外,默认度量标准不能满足所有任务的要求(例如:标准文档显示了一个基于 Haversine 距离的示例,在使用纬度和经度时可以使用该示例)。 在其他情况下,最好使用超立方体而不是球(曼哈顿距离的情况就是这样)。
...
...
@@ -349,7 +349,7 @@ print('h = {:.3f}'.format(h))
h
=
2.415
```
因此,建议是增加带宽,甚至超过我们上一个实验中的带宽。 因此,第二种方法基于四分位数间距(
`IQR = Q3-Q1`
或等效地,第 75 个百分位减去第 25 个百分位),并且
对于非常强大的内部变体
,它更加健壮:
因此,建议是增加带宽,甚至超过我们上一个实验中的带宽。 因此,第二种方法基于四分位数间距(
`IQR = Q3-Q1`
或等效地,第 75 个百分位减去第 25 个百分位),并且
对于非常强大的内部变化
,它更加健壮:
![](
img/9464a3dc-f6d7-4d24-b844-ec66461d4776.png
)
...
...
@@ -447,7 +447,7 @@ p(Age = 90) = 0.0000000 (Anomaly)
![](
img/749c0092-8f96-4900-8bb3-062de85e7b6a.png
)
当考虑包含所有样本(正常样本和异常样本)的数据集时,这种行为通常是不正确的,并且数据科学家在确定阈值时必须小心。 即使很明显,也最好通过从数据集中删除所有异常来学习正态分布,以展开
(
`p[K](x) → 0`
)的区域 异常所在的位置
。 这样,先前的标准仍然有效,并且可以轻松比较不同的密度以进行区分。
当考虑包含所有样本(正常样本和异常样本)的数据集时,这种行为通常是不正确的,并且数据科学家在确定阈值时必须小心。 即使很明显,也最好通过从数据集中删除所有异常来学习正态分布,以展开
异常所在的区域(
`p[K](x) → 0`
)
。 这样,先前的标准仍然有效,并且可以轻松比较不同的密度以进行区分。
在继续下一个示例之前,我建议通过创建人工漏洞并设置不同的检测阈值来修改初始分布。 此外,我邀请读者根据年龄和身高生成双变量分布(例如:基于一些高斯的总和),并创建一个简单的模型,该模型能够检测所有参数不太可能出现的人。
...
...
@@ -861,7 +861,7 @@ X_tsne = tsne.fit_transform(Xf)
用于葡萄酒数据集的新颖性检测的 t-SNE 图
可以看到,许多接近训练离群点的样本本身就是离群点,并且通常,几乎所有远测样本都是离群点。 但是,由于维数的减少,很难得出更多的结论。 但是,我们知道,当噪声足够小时,找到内点的可能性就很大(这是合理的结果)。 作为练习,我请读者检查一下
[
单个化学性质
](
https://scikit-learn.org/stable/datasets/index.html#wine-dataset
)
,以及
每个 他们或小
组,找出哪个阈值可以将一个离群值转换为离群值(例如,回答此问题:与训练集兼容的最大酒精含量是多少?)。
可以看到,许多接近训练离群点的样本本身就是离群点,并且通常,几乎所有远测样本都是离群点。 但是,由于维数的减少,很难得出更多的结论。 但是,我们知道,当噪声足够小时,找到内点的可能性就很大(这是合理的结果)。 作为练习,我请读者检查一下
[
单个化学性质
](
https://scikit-learn.org/stable/datasets/index.html#wine-dataset
)
,以及
对于每个或每
组,找出哪个阈值可以将一个离群值转换为离群值(例如,回答此问题:与训练集兼容的最大酒精含量是多少?)。
...
...
new/handson-unsup-learn-py/07.md
浏览文件 @
982c5be1
...
...
@@ -92,7 +92,7 @@
![](
img/b34ef798-1103-49d5-ab68-e75859ae3600.png
)
新数据集
`Z`
的维数等于
`k < n`
(或
`<<`
),并且它包含与
组件数
。 例如,考虑上一个屏幕快照中显示的示例,如果我们选择单个分量,则所有向量都将沿着第一个主分量变换为点。 当然,会有一些信息丢失,必须逐案考虑; 在以下各节中,我们将讨论如何评估此类损失并做出合理的决定。 现在,我们将简要展示如何以有效方式提取主要成分。
新数据集
`Z`
的维数等于
`k < n`
(或
`<<`
),并且它包含与
分量数量成比例的原始变化量
。 例如,考虑上一个屏幕快照中显示的示例,如果我们选择单个分量,则所有向量都将沿着第一个主分量变换为点。 当然,会有一些信息丢失,必须逐案考虑; 在以下各节中,我们将讨论如何评估此类损失并做出合理的决定。 现在,我们将简要展示如何以有效方式提取主要成分。
...
...
@@ -159,11 +159,15 @@ print(np.cov(X.T))
[
0.40799363
6.32083501
]]
```
以下代码段显示了
`whiten()`
函数,该函数用于对通用数据集进行美白(零居中是过程的一部分)(
`correct`
参数强制 美白后的水垢
校正):
以下代码段显示了
`whiten()`
函数,该函数用于对通用数据集进行美白(零居中是过程的一部分)(
`correct`
参数在漂白之后强制执行缩放
校正):
```
py
import
numpy
as
np
def
zero_center
(
X
):
return
X
-
np
.
mean
(
X
,
axis
=
0
)
def
whiten
(
X
,
correct
=
True
):
import
numpy
as
np
def
zero_center
(
X
):
return
X
-
np
.
mean
(
X
,
axis
=
0
)
def
whiten
(
X
,
correct
=
True
):
Xc
=
zero_center
(
X
)
_
,
L
,
V
=
np
.
linalg
.
svd
(
Xc
)
W
=
np
.
dot
(
V
.
T
,
np
.
diag
(
1.0
/
L
))
...
...
@@ -315,7 +319,7 @@ print(np.sum(pca.explained_variance_ratio_))
![](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
...
...
new/handson-unsup-learn-py/09.md
浏览文件 @
982c5be1
...
...
@@ -65,7 +65,7 @@
![](
img/4bd5bc8f-ede6-45e8-80ea-543706b24852.png
)
判别器的作用是区分从
`p_data`
(返回大概率)提取的样本与由
`g(z; θ[g])`
(返回低概率)。 但是,由于生成器的目标是变得越来越有能力复制
`p_data`
,因此其作用是学习如何用
几乎完美复制品中的样本来欺骗判别器 数据生成过程
。 因此,考虑到区分因素,目标是最大化以下条件:
判别器的作用是区分从
`p_data`
(返回大概率)提取的样本与由
`g(z; θ[g])`
(返回低概率)。 但是,由于生成器的目标是变得越来越有能力复制
`p_data`
,因此其作用是学习如何用
数据生成过程的几乎完美复制品中的样本来欺骗判别器
。 因此,考虑到区分因素,目标是最大化以下条件:
![](
img/6776cf30-d26d-4c1b-aa66-65165ebac3a2.png
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录