提交 8f2496a2 编写于 作者: W wizardforcel

2020-12-12 11:33:08

上级 48313fea
......@@ -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 章,“软聚类和高斯混合模型”)。 但是,当我们尝试将概率空间(和相应的样本)划分为内聚组时,我们可以假设两种可能的策略:
可以假设`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] = ∅`。 我们将要讨论的大多数算法都属于这一类。 在这种情况下,问题可以表示为将聚类分配给每个输入样本的参数化函数:
......@@ -118,7 +118,7 @@ for i in range(1, distances.shape[0] + 1):
![](img/251ae7ce-ea13-446d-a7ea-8c372fbc9cf0.png)
在先前的公式中,`C[p]`是取决于`p`的常数。 当`p → ∞`时,期望值 *E [D [max]^p -D [min]^p ]* i 在边界 *k [1] C [p] d^(1 / p- 1/2)**(M-1)C [p] d^(1 / p-1 / 2)* 。 当 *p > 2**d→∞时,术语 *d^(1 / p-1 / 2) →0** ,最大和最小距离之差的期望值收敛到`0`。 这意味着,独立于样本,当维数足够高且`p > 2`时,几乎不可能使用 Minkowski 距离来区分两个样本。 当我们发现距离函数的相似性时,该定理警告我们选择`d >> 1`时选择`p`较大的值。 当`d >> 1`(即使`p = 1`是最佳选择)时,欧几里德度量标准的常用选择也相当可靠 组件的重量(可以假定它们具有相同的重量),并保证在高维空间中的可区分性。 相反,高维空间中的`p >> 2`对于所有最大分量保持固定而所有其他分量都被修改的样本,则产生无法区分的距离(例如,如果`x = (5, 0) → (5, a)`,其中`|a| < 5`),如以下示例所示 :
在先前的公式中,`C[p]`是取决于`p`的常数。 当`p → ∞`时,期望值`E[D[max]^p - D[min]^p] * i`在边界`k[1] C[p] d^(1 / p- 1/2)``(M-1) C[p] d^(1 / p-1 / 2)`。 当`p > 2``d → ∞`时,项`d^(1 / p-1 / 2) → 0`,最大和最小距离之差的期望值收敛到`0`。 这意味着,独立于样本,当维数足够高且`p > 2`时,几乎不可能使用 Minkowski 距离来区分两个样本。 当我们发现距离函数的相似性时,该定理警告我们选择`d >> 1`时选择`p`较大的值。 当`d >> 1`(即使`p = 1`是最佳选择)时,欧几里德度量标准的常用选择也相当可靠 组件的重量(可以假定它们具有相同的重量),并保证在高维空间中的可区分性。 相反,高维空间中的`p >> 2`对于所有最大分量保持固定而所有其他分量都被修改的样本,则产生无法区分的距离(例如,如果`x = (5, 0) → (5, a)`,其中`|a| < 5`),如以下示例所示 :
```py
import numpy as np
......@@ -154,7 +154,7 @@ Std(distances) = 0.042885311128215066
**K 均值**是最大分离和最大内部凝聚力原理的最简单实现。 假设我们有一个数据集 *X∈^(M×N)* (即 *MN* 维样本),我们希望将其拆分为`K`簇和一组`K`**重心**,它们对应于分配给每个簇`K[j]`的样本均值:
**K 均值**是最大分离和最大内部凝聚力原理的最简单实现。 假设我们有一个数据集`X ∈ R^(M×N)`(即`MN`维样本),我们希望将其拆分为`K`簇和一组`K`**重心**,它们对应于分配给每个簇`K[j]`的样本均值:
![](img/02e9a6e4-5321-44f8-b545-b0e6cd0bf18f.png)
......@@ -170,7 +170,7 @@ Std(distances) = 0.042885311128215066
![](img/2654403d-f595-446f-a602-b22518cc792f.png)
重复该过程,直到质心停止变化为止(这也意味着序列 *S(0)>* *S(1)> ... > S(t [末端])*)。 读者应该立即了解到,计算时间受初始猜测的影响很大。 如果 *M^((0))* 非常接近 *M^((t [端]))* ,则可以找到一些迭代 最佳配置。 相反,当 *M^((0))* 纯粹是随机的时,无效初始选择的概率接近`1`(也就是说,每个初始均匀随机选择为 在计算复杂度方面几乎相等)。
重复该过程,直到质心停止变化为止(这也意味着序列`S(0) > S(1) > ... > S(t[end])`)。 读者应该立即了解到,计算时间受初始猜测的影响很大。 如果`M^(0)`非常接近`M^t[end]`,则可以找到一些迭代 最佳配置。 相反,当`M^(0)`纯粹是随机的时,无效初始选择的概率接近`1`(也就是说,每个初始均匀随机选择为 在计算复杂度方面几乎相等)。
......@@ -186,7 +186,7 @@ Std(distances) = 0.042885311128215066
![](img/7a396ec7-a6d1-4776-8bfb-cb03028f76a7.png)
`D(·)`表示样本 *x∈X* 与已选择的质心之间的最短距离。 一旦函数被计算,就可以如下确定概率分布 *G(x)*
`D(·)`表示样本`x ∈ X`与已选择的质心之间的最短距离。 一旦函数被计算,就可以如下确定概率分布`G(x)`
![](img/c5c5330a-28ea-4610-b18e-e25a45a3d399.png)
......@@ -194,7 +194,7 @@ Std(distances) = 0.042885311128215066
![](img/3ad9f4df-5b14-4473-8e60-6c6a94113d0d.png)
由于通过更好的选择降低了`S`,因此先前的公式设置了与`log K`大致成比例的期望值`E[S]`的上限。 例如,对于`K = 10``E[S] <= S [opt]`,并且对于`K = 3``E[S] <= 12.87 * S[opt]` *K = 3* 。 该结果揭示了两个重要因素。 第一个是当`K`不太大时,KMeans++ 的性能会更好;第二个(可能也是最重要的)是,单个 KMeans++ 初始化不足以获取最佳配置。 因此,常见的实现(例如 scikit-learn)执行可变数量的初始化,并选择初始惯量最小的初始化。
由于通过更好的选择降低了`S`,因此先前的公式设置了与`log K`大致成比例的期望值`E[S]`的上限。 例如,对于`K = 10``E[S] <= S [opt]`,并且对于`K = 3``E[S] <= 12.87 * S[opt]``K = 3`。 该结果揭示了两个重要因素。 第一个是当`K`不太大时,KMeans++ 的性能会更好;第二个(可能也是最重要的)是,单个 KMeans++ 初始化不足以获取最佳配置。 因此,常见的实现(例如 scikit-learn)执行可变数量的初始化,并选择初始惯量最小的初始化。
......@@ -269,7 +269,7 @@ dff = pd.concat([df, df_tsne], axis=1)
乳腺癌威斯康星州数据集的二维 t-SNE 图
该图是高度非线性的(别忘了这是从*ℜ^(30)**ℜ^2* 的投影)) 恶性样本中的一半在半平面 *y < 0* 中。 不幸的是,在该区域中也有适度的良性样本,因此我们不期望使用 *K = 2* 进行完美分离(在这种情况下,很难理解真实的几何形状,但是 t- SNE 保证二维分布的 Kullback-Leibler 散度与原始高维散度最小。 现在,我们以 *K = 2* 进行初始聚类。 我们将使用`n_clusters=2``max_iter=1000`创建`KMeans` scikit-learn 类的实例(`random_state`始终设置为等于`1000`)。
该图是高度非线性的(别忘了这是从`ℜ^30``ℜ^2`的投影),恶性样本中的一半在半平面`y < 0`中。 不幸的是,在该区域中也有适度的良性样本,因此我们不期望使用`K = 2`进行完美分离(在这种情况下,很难理解真实的几何形状,但是 t- SNE 保证二维分布的 Kullback-Leibler 散度与原始高维散度最小。 现在,我们以`K = 2`进行初始聚类。 我们将使用`n_clusters=2``max_iter=1000`创建`KMeans` scikit-learn 类的实例(`random_state`始终设置为等于`1000`)。
其余参数为默认参数(使用 10 次尝试的 KMeans++ 初始化),如下所示:
......@@ -368,7 +368,7 @@ for i in range(2, 51):
惯性,作为乳腺癌威斯康星州数据集的簇数的函数
在这种情况下,基本事实表明,我们应该根据诊断将其分为两组。 但是,该图显示了急剧下降,下降到 *K = 8* 并以较低的斜率继续,直到大约 *K = 40* 为止。 在初步分析过程中,我们已经看到二维投影由具有相同诊断的许多孤立的斑点组成。 因此,我们可以决定采用例如 *K = 8* 并分析与每个群集相对应的特征。 由于这不是分类任务,因此可以将真实情况用作主要参考,但是正确的探索性分析可以尝试理解子结构的组成,以便为技术人员(例如,医生)提供更多详细信息。
在这种情况下,基本事实表明,我们应该根据诊断将其分为两组。 但是,该图显示了急剧下降,下降到`K = 8`并以较低的斜率继续,直到大约`K = 40`为止。 在初步分析过程中,我们已经看到二维投影由具有相同诊断的许多孤立的斑点组成。 因此,我们可以决定采用例如`K = 8`并分析与每个群集相对应的特征。 由于这不是分类任务,因此可以将真实情况用作主要参考,但是正确的探索性分析可以尝试理解子结构的组成,以便为技术人员(例如,医生)提供更多详细信息。
现在,我们在乳腺癌威斯康星州数据集上对八个聚类进行 K 均值聚类,以描述两个样本组, 的结构,如下所示
......@@ -390,7 +390,7 @@ kmdff = pd.concat([dff, df_km], axis=1)
乳腺癌威斯康星州数据集的 K 均值聚类(`K = 8`)结果
现在,让我们考虑位于图底部的子群集( *-25 < x < 30**-60 < y < -40* )[ , 如下:
现在,让我们考虑位于图底部的子群集(`-25 < x < 30``-60 < y < -40` , 如下:
```py
sdff = dff[(dff.x > -25.0) & (dff.x < 30.0) & (dff.y > -60.0) & (dff.y < -40.0)]
......@@ -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,9 +454,9 @@ 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`值仍然保持清晰,则意味着几何形状与对称度量不完全兼容(例如,簇非常拉伸),应考虑其他方法。
如果我们不了解基本事实,则应同时考虑`K = 2``K = 8`(甚至更大)。 实际上,在第一种情况下,我们可能会丢失许多细粒度的信息,但是我们正在确定一个强大的细分领域(假设由于问题的性质,一个集群的凝聚力不是很高)。 另一方面,在`K > 8`的情况下,簇明显更小,具有适度的内聚性,它们代表具有某些共同特征的亚组。 正如我们在上一节中讨论的那样,最终的选择取决于许多因素,这些工具只能提供一般的指示。 此外,当聚类是非凸的或它们的方差未在所有特征之间均匀分布时,K 均值将始终产生次优性能,因为所得聚类将包含较大的空白空间。 如果没有特定的方向,则群集的最佳数量与包含均匀(宽度大致相同)的圆形图的图相关联。 如果形状对于任何`K`值仍然保持清晰,则意味着几何形状与对称度量不完全兼容(例如,簇非常拉伸),应考虑其他方法。
......@@ -466,7 +466,7 @@ print(sdff[['perimeter_mean', 'area_mean', 'smoothness_mean',
此措施(以及从现在开始讨论的所有其他措施)是基于对基本事实的了解。 在引入索引之前,定义一些常用值会很有帮助。 如果我们用`Y[true]`表示包含真实分配的集合,而`Y[pred]`则表示预测的集合(均包含 *[M* 个值和`K`个簇),我们可以估计以下概率:
此措施(以及从现在开始讨论的所有其他措施)是基于对基本事实的了解。 在引入索引之前,定义一些常用值会很有帮助。 如果我们用`Y[true]`表示包含真实分配的集合,而`Y[pred]`则表示预测的集合(均包含`M`个值和`K`个簇),我们可以估计以下概率:
![](img/f96440cf-9941-469f-8e59-c4db459c0097.png)
......
......@@ -232,7 +232,7 @@ d = l[:l.shape[0]-1] - l[1:]
每个主成分的特征值差异
可以看出,第一主成分的差异非常大,与第四主成分( *λ [4] -λ [3]* ); 但是,下一个差异仍然很高,虽然对应`$1[$2]`突然下降。 在这一点上,趋势几乎是稳定的(除了一些残余振荡),直到`$1[$2]`为止,然后趋势开始迅速下降,趋于趋于零 。 由于我们仍然希望获得正方形图像,因此我们将选择 *k = 16* (相当于将每一边除以四)。 在另一个任务中,您可以选择 *k = 15* ,甚至 *k = 8* ; 但是,为了更好地理解降维导致的误差,也将有助于分析所解释的方差。 因此,让我们从执行 PCA 开始:
可以看出,第一主成分的差异非常大,与第四主成分( *λ [4] -λ [3]* ); 但是,下一个差异仍然很高,虽然对应`$1[$2]`突然下降。 在这一点上,趋势几乎是稳定的(除了一些残余振荡),直到`$1[$2]`为止,然后趋势开始迅速下降,趋于趋于零 。 由于我们仍然希望获得正方形图像,因此我们将选择`k = 16`(相当于将每一边除以四)。 在另一个任务中,您可以选择`k = 15`,甚至`k = 8`; 但是,为了更好地理解降维导致的误差,也将有助于分析所解释的方差。 因此,让我们从执行 PCA 开始:
```py
from sklearn.decomposition import PCA
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册