Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
D_ACMER
apachecn-dl-zh
提交
1afcae71
A
apachecn-dl-zh
项目概览
D_ACMER
/
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,发现更多精彩内容 >>
提交
1afcae71
编写于
12月 10, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-12-10 21:09:36
上级
8cfcd0c2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
18 addition
and
18 deletion
+18
-18
new/handson-unsup-learn-py/03.md
new/handson-unsup-learn-py/03.md
+18
-18
未找到文件。
new/handson-unsup-learn-py/03.md
浏览文件 @
1afcae71
...
...
@@ -50,7 +50,7 @@
![](
img/85a481c5-78cf-4e85-85b2-f8a8faa6cc13.png
)
Example of a graph: Point x[0] is the only one that is connected to x[1]
图的示例:点
`x[0]`
是连接到
`x[1]`
的唯一点
可以使用两种主要策略来确定权重
`w[ij]`
:KNN 和
**径向基函数**
(
**RBF**
)。 第一个基于上一章中讨论的相同算法。 考虑到邻居数
`k`
,数据集表示为球树或 kd 树,对于每个样本
`x[i]`
,计算集合
`kNN(x[i])`
。 此时,给定另一个样本
`x[j]`
,权重计算如下:
...
...
@@ -68,7 +68,7 @@ Example of a graph: Point x[0] is the only one that is connected to x[1]
![](
img/48336cf2-f566-4d38-bb63-ba3c12267595.png
)
Bidimensional RBFs as functions of the distance between x and 0 computed for γ = 0.1, 1.0, and
5.0
二维 RBF,作为
`x`
和 0 之间的距离的函数,
`γ = 0.1`
、1.0 和
5.0
当
`γ = 0.1`
时,
`x = 1`
(相对于 0.0)的权重约为 0.9。 对于
`γ = 1.0`
,该值约为 0.5;对于
`γ = 5.0`
,该值几乎为零。 因此,在调整频谱聚类模型时,考虑
`γ`
的不同值并选择产生最佳性能的值(例如,使用第 2 章,“聚类基础知识”)。 一旦创建了图,就可以使用对称
**亲和矩阵**
`W = {w[ij]}`
来表示。 对于 KNN,
`W`
通常比较稀疏,可以使用专门的库进行有效地存储和操作。 相反,对于 RBF,它始终是密集的,并且如果
`X ∈ R^(N×M)`
,则它需要存储
`N^2`
个值 。
...
...
@@ -76,7 +76,7 @@ Bidimensional RBFs as functions of the distance between x and 0 computed for γ
![](
img/48005b95-043f-414c-b315-0e673fbc01c5.png
)
Example of a connected component extracted from a graph
从图中提取的连通组件的示例
在原始空间中,点
`x[0]`
,
`x[2]`
和
`x[3]`
通过
`x[1]`
连接到
`x[n]`
,
`x[m]`
和
`x[q]`
。 这可以表示非常简单的非凸几何,例如半月形。 实际上,在这种情况下,凸度假设对于最佳分离不再是必需的,因为,正如我们将要看到的那样,这些分量被提取并投影到具有平坦几何形状的子空间中(可通过诸如此类的算法轻松管理) 以 K 均值表示)。
...
...
@@ -115,7 +115,7 @@ data = np.concatenate([data_0, data_1], axis=0)
![](
img/004e9580-699d-4995-b7ec-1ec7119c6e6e.png
)
A sinusoidal dataset for the spectral clustering example
谱聚类示例的正弦数据集
我们尚未指定任何基本事实; 但是,目标是将两个正弦曲线分开(非正弦曲线)。 很容易检查捕获正弦曲线的球是否还会包含许多属于另一个正弦曲线子集的样本。 为了显示纯 K 均值和频谱聚类之间的差异(scikit-learn 实现 Shi-Malik 算法,然后进行 K 均值聚类),我们将训练两个模型,后者使用 RBF(
`affinity`
参数,其中
`γ = 2.0`
(
`gamma`
参数)。 当然,我邀请读者也测试其他值和 KNN 相似性。 以下片段显示了基于 RBF 的解决方案:
...
...
@@ -133,7 +133,7 @@ Y_pred_sc = sc.fit_predict(data)
![](
img/12b75552-ecb4-4d0c-9600-18f9c56e6040.png
)
Original dataset (left). Spectral clustering result (center). K-means result (right)
原始数据集(左)。 谱聚类结果(中心)。 K 均值结果(右)
如您所见,K 均值将数据集沿
`x`
轴划分为两个球,而光谱聚类成功地正确分离了两个正弦曲线。 只要簇的数量和
`X`
的维数都不太大(在这种情况下,拉普拉斯算子的本征分解会变得非常昂贵),该算法就非常强大。 此外,由于该算法基于图形
*切割*
程序,因此,当簇数为偶数时,它非常适合。
...
...
@@ -187,7 +187,7 @@ data = np.concatenate([data_1, data_2, data_3], axis=0)
![](
img/e081689d-97bc-4ef5-833e-17ddcc48e51d.png
)
Sample dataset for the MeanShift algorithm example
MeanShift 算法示例的样本数据集
在这种情况下,我们知道基本事实,但是我们想测试不同的带宽并比较结果。 由于生成高斯粒子彼此非常接近,因此可以将某些
*外部*
区域识别为簇。 为了将研究重点放在最佳参数上,我们可以观察到平均方差(考虑不对称性)为 1,因此可以考虑值
`h = 0.9`
,
`1.0`
,
`1.2`
和
`1.5`
。 此时,我们可以实例化 scikit-learn 类
`MeanShift`
,将
`h`
值通过参数
`bandwidth`
传递,如下所示:
...
...
@@ -210,7 +210,7 @@ for b in bandwidths:
![](
img/9fddf7e1-0071-485e-bd33-c60a17b29d14.png
)
MeanShift
clustering results for different bandwidths
MeanShift
在不同带宽下的聚类结果
如您所见,带宽的微小差异会导致群集数量不同。 在我们的情况下,最佳值为
`h=1.2`
,它产生的结果是确定了三个不同的区域(以及一个包含潜在异常值的额外聚类)。 最大聚类的质心大致对应于实际均值,但是聚类的形状与任何高斯分布都不相似。 这是可以通过采用其他方法解决的缺陷(在第 5 章 , “软聚类和高斯混合模型”中进行了讨论)。 实际上,均值偏移适用于局部邻域,并且
`p_data`
不被认为属于特定分布。 因此,最终结果是将数据集非常准确地分割为高度密集的区域(注意不再需要最大分隔),这也可以从多个标准分布的叠加中得出。 没有任何先前的假设,我们不能期望结果非常规则,但是,将该算法与 VQ 进行比较,很容易注意到分配是基于找到每个密集 Blob 的最佳代表的想法。 因此,由高斯
`N(μ, Σ)`
产生的一些点以低概率分配给质心比
`μ`
更具代表性的另一个聚类。
...
...
@@ -232,7 +232,7 @@ MeanShift clustering results for different bandwidths
![](
img/01b82f74-374a-45b3-b789-3cb5d7d9e745.png
)
The point x[2] is density-reachable from x[0] if n[min] = 4
如果
`n[min] = 4`
,则点
`x[2]`
从
`x[0]`
密度可达
如果我们将样本的最小数量设置为等于 4,则
`x[0]`
,
`x[1]`
和
`x[2]`
是核心点,
`x[1]`
从
`x[0]`
**直接密度可达**
。
`x[2]`
从
`x[1]`
直接密度可达。 因此,
`x[2]`
从
`x[0]`
密度可达。 换句话说,这意味着可以从
`x[0]`
开始并以
`x[2]`
结尾,定义一系列重叠的密集球
`N(·) ≥ n[min]`
。 通过添加更多定义,可以将此概念扩展到属于球的所有其他点:给定点
`x[k]`
,点
`x[i]`
和
`x[j]`
是密度连通的,如果
`x[i]`
和
`x[j]`
从
`x[k]`
密度可达。
...
...
@@ -354,7 +354,7 @@ dff = pd.concat([cdf, df_tsne], axis=1)
![](
img/dbcdbb62-2632-4b58-b8ab-fcecec940d5d.png
)
t-SNE bidimensional representation of the Absenteeism at Work dataset
旷工数据集的 t-SNE 二维表示
在进行任何考虑之前,重复一下 t-SNE 产生最佳的低维表示很重要,但是始终必须在原始数据集上测试算法,以检查 t-SNE 标识的邻居是否对应于实际的聚集体。 特别是,考虑到 DBSCAN 的结构,考虑到 t-SNE 表示形式,ε值可能是合理的,但是当移至更高维度的空间时,这些球不再能够捕获相同的样本。 但是,先前的图显示了被空白空间包围的密集区域的存在。 不幸的是,密度极不可能是均匀的(这是 DBSCAN 的建议要求之一,因为
`ε`
和
`n[min]`
不能改变,但是在这种情况下,我们假设所有斑点的密度都是恒定的。
...
...
@@ -362,7 +362,7 @@ t-SNE bidimensional representation of the Absenteeism at Work dataset
![](
img/2e0b2920-1c6a-414b-b922-8b19c762b6c6.png
)
Evaluation metrics as functions of ε
评估指标作为
`ε`
的函数
Silhouette 和 Calinski-Harabasz 均基于凸簇的假设(例如,色散显然是一种假设样本围绕质心呈放射状分布的度量),因此在非凸情况下其期望值通常较小 。 但是,我们要最大化两个分数(轮廓
`→ 1`
和 Calinski-Harabasz
`→ ∞`
),同时避免大量聚类。 考虑到我们的最初目标(寻找以一组特定特征为特征的凝聚聚类),我们选择了
`ε = 25`
和 Minkowski 度量,其中
`p = 12`
, 这会产生合理数量的群集(13)和 22 个噪声点。 在第 2 章,“聚类基本原理”中,我们证明了,当
`p → ∞`
时(但效果对于
`p > 2`
已经可见),距离趋向于最大的特征差异。
...
...
@@ -400,7 +400,7 @@ Calinski-Harabaz score: 129.860
![](
img/bb182b6f-ada9-4a14-a2a9-6183d443158b.png
)
Clustering result for the Absenteeism at Work dataset
旷工数据集的聚类结果
如您所见(我建议运行代码以便获得更好的视觉确认),已成功检测出大多数孤立区域(即使在 t-SNE 图中没有内聚力),并且已将样本分配给了相同区域 簇。 我们还可以观察到两个基本结果:在 t-SNE 表示中,噪声点(带有叉号的标记)不是孤立的,并且某些群集被部分拆分。 这不是算法的失败,而是降维的直接结果。 在原始空间中,所有噪声点实际上都没有与任何其他样本紧密连接,但在 t-SNE 图中它们可能看起来重叠或接近某些斑点。 但是,我们对高密度和准粘结的非凸区域感兴趣,幸运的是,它们在二维图中也显示为连通。
...
...
@@ -415,7 +415,7 @@ print(sdff[sdff.columns[0:10]].describe())
![](
img/df4d9058-6795-4cb7-a86a-d2a4cc46aa79.png
)
Statistical measures corresponding to the subdataset x < -45
对应于子数据集
`x < -45`
的统计量度
有两个因素可以立即引起我们的注意:运输费用(这似乎标准化为 179 的值)和子孙的数量(考虑到平均值和标准差,对于大多数样本而言,其为 0)。 我们还考虑服务时间和从住所到工作的距离,这可以帮助我们找到群集的语义标签。 所有其他参数的判别力都较小,因此在此简要分析中将它们排除在外。 因此,我们可以假设这样的子集群包含大约 40 岁的没有孩子的人,服务时间较长,居住在离办公室很远的地方(我请读者检查总体统计数据以确认这一点),并且交通费用标准化( 例如一次性支出汽车)。
...
...
@@ -430,7 +430,7 @@ print(sdff[sdff.columns[0:10]].describe())
![](
img/21f51b34-043b-4238-8312-2a42582de788.png
)
Statistical measures corresponding to the subdataset -20 < x < -20 and y < 20
对应于子数据集
`-20 < x < -20`
和
`y < 20`
的统计量度
在这种情况下,运输费用会更大,而从住所到工作的距离大约是前一个示例的一半(还要考虑标准差)。 此外,平均儿子数为 1,雇员中有两个孩子的雇员比例适中,服务时间约为 12,标准差为 3.6。 我们可以推断出,该集群包含所有年龄在(28-58)之间有家庭的(已婚)人的所有样本,这些人有家庭,办公室相对较近,但旅行费用较高(例如,由于使用出租车服务)。 这样的员工倾向于避免加班,但是他们的平均工作量几乎与前面示例中观察到的相同。 即使没有正式的确认,我们也可以假设这样的员工通常效率更高,而第一批员工包含生产型员工,但是他们需要更多的时间来实现他们的目标(例如,由于旅行时间更长)。
...
...
@@ -519,7 +519,7 @@ for eps in np.arange(5.0, 31.0, 1.5):
![](
img/cb3a0724-e734-4782-a2dc-aa7ecfe5abda.png
)
Example of centroid selection (left) and medoid selection (right)
质心选择(左)和中心点选择(右)的示例
K 中心点的提出(在《基于 L1 范数和相关方法的统计数据分析》中),最初是为了缓解对异常值的缺乏鲁棒性的问题(在原始论文中,该算法仅设计用于曼哈顿度量标准),但后来设计了不同版本,以允许使用任何度量标准 (尤其是任意的 Minkowski 指标)。 与 K 均值的主要区别在于质心的选择,在这种情况下,质心是始终属于数据集的示例性样本(称为
**中心点**
)。 该算法本身与标准 K 均值非常相似,并且替代了中心点的定义
`μ[i] = x[i] ∈X`
分配给聚类
`C[i]`
的所有其他样本的平均或总距离),然后将样本重新分配给具有最接近中心点的聚类。
...
...
@@ -610,7 +610,7 @@ Adjusted Rand score K-Medoids: 0.4761670824763849
![](
img/4f1d33c8-b0db-47c7-aa13-07185fdef096.png
)
Ground truth (left), K-means (center), and K 中心点(right)
真实情况(左),K 均值(中心)和 K 中心点(右)
如您所见,基本事实包含两个非常难以聚类的重叠区域。 在此特定示例中,我们对解决此问题不感兴趣,而是对展示两种方法的不同行为感兴趣。 如果考虑前两个 Blob(左上角),则 K 均值将整个区域分为两部分,而 K 均值将所有元素分配给同一簇。 在不知道基本事实的情况下,后一个结果可能比第一个更连贯。 实际上,观察第一张图,可能会发现密度差并不足以完全证明分裂的合理性(但是,在某些情况下这是合理的)。 由于该区域非常密集且与邻近区域分开,因此单个群集很可能是预期的结果。 此外,几乎不可能根据差异来区分样本(错误地分配了靠近分离线的大多数样本),因此,K 中心点
*的攻击性*
比 K 均值少,并且显示出更好的权衡性。 相反,两个算法几乎以相同的方式管理第二个重叠区域(右下)。 这是由于以下事实:K 均值将质心放置在非常接近某些实际样本的位置。 在这两种情况下,算法需要在 0 和 4 之间创建几乎水平的间隔,因为否则无法分割区域。 这种行为是所有基于标准球的方法所共有的,在这种特殊情况下,这是极其复杂的几何体的正常结果(许多相邻点具有不同的标签)。 因此,我们可以通过说 K 中心点对异常值更健壮,并通过避免不必要的分离而有时比 K 均值更好地表现出结论。 另一方面,在非常密集的区域中没有异常值时,这两种算法(尤其是采用相同度量时)是等效的。 作为练习,我邀请读者使用其他指标(包括余弦距离)并比较结果。
...
...
@@ -658,7 +658,7 @@ Ground truth (left), K-means (center), and K 中心点(right)
![](
img/3a61d3c9-22b9-482c-a79f-95b35685736e.png
)
Example of a simple CF-Tree with a binary repartition
具有二元分区的简单 CF-Tree 的示例
在上图中,点代表指向子节点的指针。 因此,每个非终端节点都与指向其所有子节点的指针
`(CF[i], p[i])`
一起存储,而终端节点是纯 CF。 为了讨论插入策略,必须考虑另外两个元素。 第一个称为
**分支因子**
`B`
,而第二个称为
**阈值**
`T`
。 此外,每个非终端节点最多可以包含
`B`
个元组。 通过减少存储的数据量和计算数量,设计了此策略,以最大程度地提高仅依赖于主内存的流处理过程的性能。
...
...
@@ -692,7 +692,7 @@ X, Y = make_blobs(n_samples=nb_samples, n_features=2, centers=nb_clusters,
![](
img/c79cce09-3214-4f88-90af-bd1485460604.png
)
Bidimensional dataset for a comparison between mini-batch K-means and
BIRCH
二维数据集,用于比较小批量 K 均值和
BIRCH
在执行在线聚类之前,评估标准 K 均值的调整后的兰德得分非常有用,如下所示:
...
...
@@ -754,7 +754,7 @@ Adjusted Rand score BIRCH: 0.767304858161472
![](
img/54ea0ef1-87a0-4c51-b761-14700f6c18b4.png
)
Incremental adjusted Rand scores as functions of the batches (number of samples)
调整后的兰德评分增量作为批次(样本数量)的函数
如您所见,小批量 K 均值很快就达到最大值,所有随后的振荡都是由于重新分配。 相反,BIRCH 的性能总是较差,且呈负趋势。 出现这种差异的主要原因是由于策略不同。 实际上,小批量 K 均值可以在几次批处理后纠正质心的初始猜测,并且重新分配不会显着改变配置。 另一方面,BIRCH 执行的合并数受样本数影响。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录