From 48313feaeae0e54a415d518fd312a0b513a536d4 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Sat, 12 Dec 2020 11:26:43 +0800 Subject: [PATCH] 2020-12-12 11:26:43 --- new/handson-unsup-learn-py/02.md | 2 +- new/handson-unsup-learn-py/04.md | 62 ++++++++++++++++---------------- new/handson-unsup-learn-py/06.md | 4 +-- new/intel-mobi-proj-tf/05.md | 2 +- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/new/handson-unsup-learn-py/02.md b/new/handson-unsup-learn-py/02.md index 5ace0d2e..fb179ca9 100644 --- a/new/handson-unsup-learn-py/02.md +++ b/new/handson-unsup-learn-py/02.md @@ -484,7 +484,7 @@ print(sdff[['perimeter_mean', 'area_mean', 'smoothness_mean', ![](img/b8423040-7648-4750-b1cf-f050766763e9.png) -很容易理解,当`H(Y[pred] | Y[true]) → 0`* 时, `Y[true]`减少了预测的不确定性,因此,`c → 1`。 这等同于说所有具有相同真实标签的样本都分配给同一群集。 相反,当`H(Y[pred] | Y[true]) → H(Y[pred])`,这意味着真实情况没有提供任何信息,可以减少预测的不确定性,`c → 0`。 +很容易理解,当`H(Y[pred] | Y[true]) → 0`时, `Y[true]`减少了预测的不确定性,因此,`c → 1`。 这等同于说所有具有相同真实标签的样本都分配给同一群集。 相反,当`H(Y[pred] | Y[true]) → H(Y[pred])`,这意味着真实情况没有提供任何信息,可以减少预测的不确定性,`c → 0`。 当然,良好的聚类的特征是`c → 1`。 对于乳腺癌威斯康星州数据集,使用 scikit-learn 函数`completenss_score()`(也适用于文本标签)和`K = 2`计算**完整性评分**( 与地面真相相关的唯一配置)如下: diff --git a/new/handson-unsup-learn-py/04.md b/new/handson-unsup-learn-py/04.md index 6f44f7d5..90d2c477 100644 --- a/new/handson-unsup-learn-py/04.md +++ b/new/handson-unsup-learn-py/04.md @@ -54,7 +54,7 @@ ![](img/543602f0-e890-481e-9ebd-28453d15217b.png) -在前面的示例中,群集`C[i]`和`C[j]`合并为`C[k]`; 因此,我们在第二步中获得 *n-1* 簇。 该过程继续进行,直到剩下的两个群集合并为一个包含整个数据集的单个块。 相反,**除法**方法(由 Kaufman 和 Roussew 最初提出,使用 DIANA 算法)在相反的方向上操作,从`X`开始,最后以每个群集包含一个 单个样本: +在前面的示例中,群集`C[i]`和`C[j]`合并为`C[k]`; 因此,我们在第二步中获得`n-1`个簇。 该过程继续进行,直到剩下的两个群集合并为一个包含整个数据集的单个块。 相反,**除法**方法(由 Kaufman 和 Roussew 最初提出,使用 DIANA 算法)在相反的方向上操作,从`X`开始,最后以每个群集包含一个 单个样本: ![](img/ed6383c7-bc83-46ba-9f2c-9282e9b7a8bd.png) @@ -74,11 +74,11 @@ ![](img/07f5f198-bcf4-4f91-811d-a5bc867600af.png) -两个特定情况对应于 *p = 2* 和 *p = 1* 。 在前一种情况下,当 *p = 2* 时,我们获得标准**欧几里德距离**(等于`L[2]`范数): +两个特定情况对应于`p = 2`和`p = 1`。 在前一种情况下,当`p = 2`时,我们获得标准**欧几里德距离**(等于`L[2]`范数): ![](img/be525080-5382-4146-9d15-6f26830f8970.png) -当 *p = 1* 时,我们获得**曼哈顿**或**城市街区**距离(等于`L[1]`范数 ): +当`p = 1`时,我们获得**曼哈顿**或**城市街区**距离(等于`L[1]`范数 ): ![](img/d851736e-2e48-4de6-b798-6fd828d24c42.png) @@ -86,13 +86,13 @@ ![](img/f6f3bba1-aaea-4d25-85a7-a5c056ec4320.png) -余弦距离的应用非常特殊(例如**自然语言处理**(**NLP**)),因此,这不是一个常见的选择。 但是,我建议您使用一些样本向量(例如[ *0、1* 、、 [ *1、0* ]和( *0.5、0.5* ),因为它可以解决许多现实生活中的问题(例如,在 word2vec 中,可以通过检查它们的余弦相似度来轻松评估两个单词的相似度)。一旦定义了距离度量,定义[ **接近矩阵**,`P`: +余弦距离的应用非常特殊(例如**自然语言处理**(**NLP**)),因此,这不是一个常见的选择。 但是,我建议您使用一些样本向量(例如`(0, 1), (1, 0)`和`(0.5, 0.5)`,因为它可以解决许多现实生活中的问题(例如,在 word2vec 中,可以通过检查它们的余弦相似度来轻松评估两个单词的相似度)。一旦定义了距离度量,定义**邻接矩阵**,`P`: ![](img/3e160312-31e8-4484-bd90-4697761fa04f.png) -`P`是对称的,所有对角元素均为空。 因此,某些应用程序(例如 SciPy 的`pdist`函数)会产生一个压缩矩阵`P[c]`,这是一个仅包含矩阵上三角部分的向量`P[c]`的 *ij*^(th) 元素对应于 *d(x [i] ,x [j] )*。 +`P`是对称的,所有对角元素均为空。 因此,某些应用程序(例如 SciPy 的`pdist`函数)会产生一个压缩矩阵`P[c]`,这是一个仅包含矩阵上三角部分的向量`P[c]`的第`ij`元素对应于`d(x[i], x[j])`。 -下一步是定义合并策略,在这种情况下,该策略称为**链接**。 链接方法的目标是找出必须在层次结构的每个级别合并为单个群集的群集。 因此,它必须与代表群集的通用样本集一起使用。 在这种情况下,假设我们正在分析几个群集( *C [a] ,C [b]* ),并且我们需要找到哪个索引`a`或`b`对应于将要合并的对。 +下一步是定义合并策略,在这种情况下,该策略称为**链接**。 链接方法的目标是找出必须在层次结构的每个级别合并为单个群集的群集。 因此,它必须与代表群集的通用样本集一起使用。 在这种情况下,假设我们正在分析几个群集`(c[a], c[b])`,并且我们需要找到哪个索引`a`或`b`对应于将要合并的对。 @@ -106,7 +106,7 @@ ![](img/468320c4-2db4-4977-8a96-3eb224ae5111.png) -单链接方法选择包含最接近的样本对的样本对(每个样本属于不同的簇)。 下图显示了此过程,其中选择了 **C1** 和 **C2** 进行合并: +单链接方法选择包含最接近的样本对的样本对(每个样本属于不同的簇)。 下图显示了此过程,其中选择了`C1`和`C2`进行合并: ![](img/ba15026b-5a5e-445b-b800-b80c546f59e8.png) @@ -118,13 +118,13 @@ ![](img/08986d3c-687c-4832-b1c2-fc5d8442702a.png) -这种链接方法的目的是使属于合并簇的最远样本之间的距离最小。 在下图中,有一个完整链接的示例,其中已选择 *`C[1]`* 和 *`C[3]`* : +这种链接方法的目的是使属于合并簇的最远样本之间的距离最小。 在下图中,有一个完整链接的示例,其中已选择`C[1]`和`C[3]`: ![](img/5630c46a-e57c-4099-bcf2-bc30a9ed942e.png) 完全链接的示例。 选择`C[1]`和`C[3]`进行合并 -该算法选择 *`C[1]`* 和`C`**[3]** 为了增加内部凝聚力。 实际上,很容易理解,考虑所有可能的组合,完全链接会导致群集密度最大化。 在上图所示的示例中,如果所需的簇数为两个,则合并 *`C[1]`* 和 *`C[2]`* 或 *`C[2]`* 和 *`C[3]`* 会产生具有较小内聚的最终构型,这通常是不希望的结果。 +该算法选择`C[1]`和`C[3]`为了增加内部凝聚力。 实际上,很容易理解,考虑所有可能的组合,完全链接会导致群集密度最大化。 在上图所示的示例中,如果所需的簇数为两个,则合并`C[1]`和`C[2]`或`C[2]`和`C[3]`会产生具有较小内聚的最终构型,这通常是不希望的结果。 @@ -138,13 +138,13 @@ ![](img/4fc15787-cd87-42b0-85ce-5ca51d3e66f9.png) -这个想法与完全链接非常相​​似,但是在这种情况下,考虑每个群集的平均值,并且目标是考虑所有可能的对( *C [a] ,C [b]* )。 下图显示了平均链接的示例: +这个想法与完全链接非常相​​似,但是在这种情况下,考虑每个群集的平均值,并且目标是考虑所有可能的对`(c[a], c[b])`。 下图显示了平均链接的示例: ![](img/c960034e-9433-4aa2-9418-3442cd67dac3.png) 平均链接的示例。 选择`C[1]`和`C[2]`进行合并。 突出显示的点是平均值。 -平均链接在生物信息学应用程序(定义分层聚类的主要环境)中特别有用。 对其属性的数学解释是不平凡的,我鼓励您查看原始论文(*一种评估系统关系的统计方法,Sokal R.,Michener C。, 堪萨斯大学科学 1958 年第 38 号公告*),以获取更多详细信息。 +平均链接在生物信息学应用程序(定义分层聚类的主要环境)中特别有用。 对其属性的数学解释是不平凡的,我鼓励您查看原始论文(《一种评估系统关系的统计方法》),以获取更多详细信息。 @@ -154,7 +154,7 @@ -我们要讨论的最后一种方法称为 **Ward 链接**(以其作者命名,最初是在*分层分组以优化目标函数的过程中提出的,Ward Jr JH, 美国统计协会。58(301),1963 年*。 它基于欧几里得距离,其正式定义如下: +我们要讨论的最后一种方法称为 **Ward 链接**(以其作者命名,最初是在《用于优化目标函数的分层分组过程》中提出的。 它基于欧几里得距离,其正式定义如下: ![](img/5680453f-6f08-4ff1-ac72-e1fe210b77f6.png) @@ -172,7 +172,7 @@ 出于教学目的,最好显示与非常小的数据集`X`相对应的树状图,但是我们将要讨论的所有概念都可以应用于任何情况。 但是,对于较大的数据集,通常需要应用一些截断法以更紧凑的形式可视化整个结构。 -让我们考虑一个小的数据集`X`,它由`4`高斯分布生成的`12`二维样本组成,平均向量的范围为( *-1,1* )×([ *-1,1* ): +让我们考虑一个小的数据集`X`,它由`4`高斯分布生成的`12`二维样本组成,平均向量的范围为`(01, 1) × (-1, 1)`: ```py from sklearn.datasets import make_blobs @@ -264,17 +264,17 @@ plt.show() -可以使用前面各章中介绍的任何方法来评估层次集群性能。 但是,在这种特定情况下,可以采用特定措施(不需要基本事实)。 给定一个近似矩阵`P`和一个链接`L`,几个样本`x[i]`和 *x [j] ∈X* 始终分配给特定层次级别的同一群集。 当然,重要的是要记住,在团聚的情况下,我们从`n`个不同的簇开始,最后以一个等于`X`的单个簇结束。 此外,由于两个合并的群集成为一个群集,因此属于一个群集的两个样本将始终继续属于同一*放大的*群集,直到该过程结束。 +可以使用前面各章中介绍的任何方法来评估层次集群性能。 但是,在这种特定情况下,可以采用特定措施(不需要基本事实)。 给定一个近似矩阵`P`和一个链接`L`,几个样本`x[i]`和`x[j] ∈ X`始终分配给特定层次级别的同一群集。 当然,重要的是要记住,在团聚的情况下,我们从`n`个不同的簇开始,最后以一个等于`X`的单个簇结束。 此外,由于两个合并的群集成为一个群集,因此属于一个群集的两个样本将始终继续属于同一*放大的*群集,直到该过程结束。 -考虑到上一节中显示的第一个树状图,样本{ 1 }和{ 3 }立即合并; 然后添加样本{ 2 },然后添加{ 11 }。 此时,整个簇将与另一个块合并(包含样本{ 0 },{ 9 },{ 4 }和{ 10 })。 在最后一级,将剩余的样本合并以形成单个最终群集。 因此,命名相似度`DL[0]`,`DL[1]`,...和`DL[k]`,样本{ 1 }和{ 3 }在`DL[1]`处开始属于同一簇。 例如,在`DL[6]`的同一簇中发现{ 2 }和{ 1 }。 +考虑到上一节中显示的第一个树状图,样本`{1}`和`{3}`立即合并; 然后添加样本`{2}`,然后添加`{11}`。 此时,整个簇将与另一个块合并(包含样本`{0}, {9}, {4}, {10}`)。 在最后一级,将剩余的样本合并以形成单个最终群集。 因此,命名相似度`DL[0]`,`DL[1]`,...和`DL[k]`,样本`{1}`和{ 3 }在`DL[1]`处开始属于同一簇。 例如,在`DL[6]`的同一簇中发现`{2}`和`{1}`。 -此时,我们可以将`DL[ij]`定义为`x[i]`和`x[j]`首次属于同一簇,并且将**同义** **矩阵** 在以下( *n×n* )矩阵中作为 *CP* : +此时,我们可以将`DL[ij]`定义为`x[i]`和`x[j]`首次属于同一簇,并且将以下`n×n`**对称矩阵**作为`CP`: ![](img/5a3b29f5-fbf7-4acd-abfb-849ff081295e.png) -换句话说,`CP[ij]`元素是观察`x[i]`和 *x [j 所需的最小差异 同一群集中的]* 。 可以证明`CP[ij]`是`x[i]`和 *x [j] 之间的距离度量* ,; 因此, *CP* 与`P`类似,并且具有与邻近矩阵相同的属性(例如,所有对角元素为空)。 特别是,我们对它们的相关性感兴趣(在`-1`和`1`范围内标准化)。 这样的值(**色相关系数**(**CPC**)表示`P`和 *CP* 之间的一致性程度,并且可以很容易地计算出, 如以下等式所示。 +换句话说,`CP[ij]`元素是观察同一群集中`x[i]`和`x[j]`所需的最小差异。 可以证明`CP[ij]`是`x[i]`和`x[j]`之间的距离度量; 因此,`CP`与`P`类似,并且具有与邻近矩阵相同的属性(例如,所有对角元素为空)。 特别是,我们对它们的相关性感兴趣(在`-1`和`1`范围内标准化)。 这样的值(**色相关系数**(**CPC**)表示`P`和`CP`之间的一致性程度,并且可以很容易地计算出, 如以下等式所示。 -由于`P`和 *CP* 均为( *n×n* )对称矩阵且对角元素为空,因此可以仅考虑下三角 部分(不包括对角线,表示为`Tril(·)`),包含 *n(n-1)/ 2* 值。 因此,平均值如下: +由于`P`和`CP`均为`n×n`对称矩阵且对角元素为空,因此可以仅考虑下三角 部分(不包括对角线,表示为`Tril(·)`),包含`n (n-1) / 2`值。 因此,平均值如下: ![](img/d7e30ca9-4bbe-45de-a1ee-1f98624ceced.png) @@ -286,9 +286,9 @@ plt.show() ![](img/2ff0529a-5715-44fc-8b52-347801de1a6b.png) -前面的方程式基于以下假设:如果`x[i]`,`x[j]`和`x[p]`的距离,例如 *d(x [i] ,x [j] )< d(x [i] , x [p] )*,可以合理预期`x[i]`和`x[j]`在`x[i]`和`x`[`p`] 之前合并在同一群集中(即,对应于`x[i]`和`x`[`j`] 的合并 低于`x[i]`和`x`*[p]* )。 因此, *CPC→1* 表示链接生成了一个最佳层次结构,该层次结构反映了基础几何结构。 另一方面, *CPC* *→-1* 表示完全不同意,并且潜在的聚类结果与几何形状不一致。 毋庸置疑,给定一个问题,我们的目标是找到一个最大化 *CPC* 的指标和链接。 +前面的方程式基于以下假设:如果`x[i]`,`x[j]`和`x[p]`的距离,例如`d(x[i], x[j]) < d(x[i], x[p])`,可以合理预期`x[i]`和`x[j]`在`x[i]`和`x[p]`之前合并在同一群集中(即,对应于`x[i]`和`x[j]`的合并 低于`x[i]`和`x[p]`)。 因此,`CPC → 1`表示链接生成了一个最佳层次结构,该层次结构反映了基础几何结构。 另一方面,`CPC → -1`表示完全不同意,并且潜在的聚类结果与几何形状不一致。 毋庸置疑,给定一个问题,我们的目标是找到一个最大化`CPC`的指标和链接。 -考虑到第 3 章,“高级聚类”中描述的示例,我们可以使用 SciPy 函数`cophenet`计算与不同链接(假设欧几里得距离)相对应的同位矩阵和 CPC 。 此函数需要将链接矩阵作为第一个参数,将接近度矩阵作为第二个参数,并返回同义矩阵和 CPC(`dm` 变量是先前计算出的压缩接近度矩阵): +考虑到第 3 章,“高级聚类”中描述的示例,我们可以使用 SciPy 函数`cophenet`计算与不同链接(假设欧几里得距离)相对应的同位矩阵和 CPC 。 此函数需要将链接矩阵作为第一个参数,将接近度矩阵作为第二个参数,并返回同义矩阵和 CPC(`dm`变量是先前计算出的压缩接近度矩阵): ```py from scipy.cluster.hierarchy import linkage, cophenet @@ -327,7 +327,7 @@ CPC Average linkage: 0.794 -现在,让我们考虑一个更大的数据集上的更详细的问题(在本章开头的*技术要求*部分中提供了下载说明),其中包含 527 个样本,其中有 38 个化学和物理变量描述了状态 水处理厂。 正如同一作者( Bejar,Cortes 和 Poch)所述,该域的结构较差,需要仔细分析。 同时,我们的目标是使用不可知论的方法找到最佳的聚类。 换句话说,我们将不考虑语义标记过程(需要领域专家),而仅考虑数据集的几何结构以及通过聚集算法发现的关系。 +现在,让我们考虑一个更大的数据集上的更详细的问题(在本章开头的“技术要求”部分中提供了下载说明),其中包含 527 个样本,其中有 38 个化学和物理变量描述了状态 水处理厂。 正如同一作者( Bejar,Cortes 和 Poch)所述,该域的结构较差,需要仔细分析。 同时,我们的目标是使用不可知论的方法找到最佳的聚类。 换句话说,我们将不考虑语义标记过程(需要领域专家),而仅考虑数据集的几何结构以及通过聚集算法发现的关系。 下载后,可以使用 Pandas 加载 CSV 文件(称为`water-treatment.data`)(当然,必须更改术语``才能指向文件的确切位置)。 第一列是与特定植物相关的索引,而所有其他值都是数字,可以转换为`float64`。 缺少的值用`'?'` 字符表示,并且由于我们没有其他信息,因此将每个属性的均值设置为: @@ -340,7 +340,7 @@ df = pd.read_csv(data_path, header=None, index_col=0, na_values='?').astype(np.f df.fillna(df.mean(), inplace=True) ``` -由于单个变量的大小存在很大差异(我邀请读者使用 DataFrame 上的`describe`函数检查此语句),因此最好在范围( *-1,1* )内对其进行标准化,以保持 原始差异: +由于单个变量的大小存在很大差异(我邀请读者使用 DataFrame 上的`describe`函数检查此语句),因此最好在范围`(-1, 1)`内对其进行标准化,以保持 原始差异: ```py from sklearn.preprocessing import StandardScaler @@ -367,7 +367,7 @@ dff = pd.concat([df, df_tsne], axis=1) 水处理厂数据集的 t-SNE 图 -该图显示了潜在的非凸几何形状,其中有许多小的*小岛*(密集区域),这些小岛由空白空间隔开。 但是,如果没有任何域信息,则很难确定哪些斑点可以被视为同一群集的一部分。 我们可以决定施加的唯一*伪约束*(考虑到所有植物都以相似的方式运行)是具有中等或较小的最终簇数。 因此,假设欧氏距离并使用 scikit-learn `AgglomerativeClustering` 类,类,我们可以计算所有链接以及`4`,`6`,`8`和 `10`集群数: +该图显示了潜在的非凸几何形状,其中有许多小的*小岛*(密集区域),这些小岛由空白空间隔开。 但是,如果没有任何域信息,则很难确定哪些斑点可以被视为同一群集的一部分。 我们可以决定施加的唯一*伪约束*(考虑到所有植物都以相似的方式运行)是具有中等或较小的最终簇数。 因此,假设欧氏距离并使用 scikit-learn `AgglomerativeClustering`类,我们可以计算所有链接以及`4`,`6`,`8`和 `10`集群数: ```py import numpy as np @@ -419,7 +419,7 @@ for i, l in enumerate(linkages): 此外,树状图显示在大约 17,000 的水平上有两个主要的不均匀聚集,因此我们可以推断出粗粒度分析突出显示了主要行为的存在(从顶部观察图),并且使用了次要行为 由少量的植物。 特别是,较小的组非常稳定,因为它将以大约 50,000 的相异度级别合并到最终的单个群集中。 因此,我们应该期待伪异常值的存在,这些伪异常值被分组为更多的孤立区域(t-SNE 图也证实了这一点)。 -切割级别在 4,000÷6,000(对应于大约八个簇)的范围内,较大的块比较小的块更密集。 换句话说,离群值群集将包含比其他群集少得多的样本。 这不足为奇,因为,如在专门针对树状图的*分析树状图*部分中所讨论的那样,最远的簇通常在完全链接中合并得很晚。 +切割级别在 4,000÷6,000(对应于大约八个簇)的范围内,较大的块比较小的块更密集。 换句话说,离群值群集将包含比其他群集少得多的样本。 这不足为奇,因为,如在专门针对树状图的“分析树状图”部分中所讨论的那样,最远的簇通常在完全链接中合并得很晚。 至此,我们终于可以执行聚类并检查结果了。 Scikit-learn 的实现不会计算整个树状图,而是会在达到所需簇数时停止该过程(除非`compute_full_tree` 参数不是`True`): @@ -441,7 +441,7 @@ pdff = pd.concat([dff, df_pred], axis=1) 水处理厂数据集的聚类结果(八个群集) -不出所料,群集是不均匀的,但是它们与几何形状非常一致。 此外,孤立的簇(例如,在 *x∈(-40,-20)*和 *y > 60* 的区域中)非常小,很可能包含真实的 异常值,其行为与大多数其他样本有很大不同。 我们将不分析语义,因为问题非常具体。 但是,可以合理地认为 *x∈(-40,40)*和 *y∈(-40,-10)* -凸,代表合适的基线。 相反,其他大块(在该簇的极端)对应于具有特定特性或行为的植物,这些植物具有足够的扩散性,可以视为标准的替代实践。 当然,如开始时所述,这是不可知的分析,应该有助于理解如何使用分层聚类。 +不出所料,群集是不均匀的,但是它们与几何形状非常一致。 此外,孤立的簇(例如,在`x ∈ (-40. -20)`和`y > 60`的区域中)非常小,很可能包含真实的 异常值,其行为与大多数其他样本有很大不同。 我们将不分析语义,因为问题非常具体。 但是,可以合理地认为`x ∈ (-40, 40)`和`y ∈ (-40, -10)`,代表合适的基线。 相反,其他大块(在该簇的极端)对应于具有特定特性或行为的植物,这些植物具有足够的扩散性,可以视为标准的替代实践。 当然,如开始时所述,这是不可知的分析,应该有助于理解如何使用分层聚类。 作为最后一步,我们希望以大约 35,000(对应于两个聚类)的相似度水平切割树状图。 结果显示在以下屏幕截图中: @@ -449,7 +449,7 @@ pdff = pd.concat([dff, df_pred], axis=1) 水处理厂数据集的聚类结果(两个群集) -在此级别上,树状图显示出属于簇和剩余较小块的样本数量很大。 现在我们知道,这样的次级区域对应于 *x∈(-40,10)*和 *y > 20* 。 同样,结果并不令人惊讶,因为 t-SNE 图表明,这些样本是唯一具有 *y > 20÷25* 的样本(而较大的簇,即使有很大的空白区域,也覆盖了 几乎所有范围)。 +在此级别上,树状图显示出属于簇和剩余较小块的样本数量很大。 现在我们知道,这样的次级区域对应于`x ∈ (-40, 10)`和`y > 20`。 同样,结果并不令人惊讶,因为 t-SNE 图表明,这些样本是唯一具有`y > 20÷25`的样本(而较大的簇,即使有很大的空白区域,也覆盖了 几乎所有范围)。 因此,我们可以说这些样本代表具有*极端*行为的非常不同的植物,如果将新样本分配给该群集,则可能是非标准植物(假设一个标准植物 具有与大多数同行相似的行为)。 作为练习,我鼓励您测试其他数量的类和不同的链接(尤其是单个链接,这非常特殊),并尝试验证或拒绝某些样本,先前的假设(它们在物理上没有必要被接受) )。 @@ -461,7 +461,7 @@ pdff = pd.concat([dff, df_pred], axis=1) -聚集层次聚类的一个重要特征是可以包括连通性约束以强制合并特定样本。 在邻居之间有很强关系的情况下,或者当我们知道某些样本由于其固有属性而必须属于同一类时,这种先验知识非常普遍。 为了实现此目标,我们需要使用**连接矩阵** *A∈{0,1}^(n×n)* : +聚集层次聚类的一个重要特征是可以包括连通性约束以强制合并特定样本。 在邻居之间有很强关系的情况下,或者当我们知道某些样本由于其固有属性而必须属于同一类时,这种先验知识非常普遍。 为了实现此目标,我们需要使用**连接矩阵**`A ∈ {0, 1}^(n×n)`: ![](img/132f7bce-0b7b-4715-bc63-c055335c291c.png) @@ -484,7 +484,7 @@ X, Y = make_blobs(n_samples=nb_samples, n_features=2, center_box=[-1, 1], center 连接约束的数据集示例 -从图中可以看出,样本 18 和 31 ( *x [0] ∈(-2,-1)*和 *x [1] ∈`(1, 2)`*)非常接近; 但是,我们不希望将它们合并,因为样本 18 在较大的中央斑点中有更多邻居,而点 31 被部分隔离,应视为一个自治簇。 我们还希望样本 33 形成单个簇。 这些要求将迫使算法合并不再考虑基础几何(根据高斯分布)的聚类,而是考虑现有知识。 +从图中可以看出,样本 18 和 31 (`x[0] ∈ (-2, -1)`和`x[1] ∈ (1, 2)`非常接近; 但是,我们不希望将它们合并,因为样本 18 在较大的中央斑点中有更多邻居,而点 31 被部分隔离,应视为一个自治簇。 我们还希望样本 33 形成单个簇。 这些要求将迫使算法合并不再考虑基础几何(根据高斯分布)的聚类,而是考虑现有知识。 为了检查聚类的工作原理,现在让我们使用欧几里德距离和平均链接计算树状图(截短为 20 片叶子): @@ -550,7 +550,7 @@ Y_pred = ag.fit_predict(X) 当需要复杂的约束条件(给定距离和链接)时,通常有必要同时调整连接矩阵和所需的群集数量。 当然,如果期望的结果是通过特定数目的聚类实现的,则也将使用较大的值来实现,直到相异性下界为止(也就是说,合并过程会减少聚类的数量;因此,如果相异性很大 足够,所有现有约束将仍然有效)。 例如,如果三个样本被约束为属于同一群集,则通常无法在初始合并阶段之后获得此结果。 -但是,如果所有三个样本的合并都在某个不同的级别上发生(例如,对应于 30 个群集的 2.0),则它对于 *n < 30* 群集以及具有 *DL > 2.0* 。 因此,如果我们从 5 个聚类开始,则可以轻松增加此数字,同时注意其相异度级别大于与约束所施加的最后合并对应的相异程度。 建议您与其他数据集一起测试此方法,并尝试定义可以在聚类过程之后轻松验证的先前约束。 +但是,如果所有三个样本的合并都在某个不同的级别上发生(例如,对应于 30 个群集的 2.0),则它对于`n < 30`个群集以及具有`DL > 2.0`。 因此,如果我们从 5 个聚类开始,则可以轻松增加此数字,同时注意其相异度级别大于与约束所施加的最后合并对应的相异程度。 建议您与其他数据集一起测试此方法,并尝试定义可以在聚类过程之后轻松验证的先前约束。 @@ -577,12 +577,12 @@ Y_pred = ag.fit_predict(X) 1. 凝聚法和分裂法有什么区别? -2. 给定两个簇 *a:[(-1,-1),`(0, 0)`]* 和 *b:[[1,1),`(1, 0)`]* ,什么 是否考虑欧几里得距离的单一和完整联系? +2. 给定两个簇`a: [(-1, -1), (0, 0)]`和`b: [(1, 1), (1, 0)]`,什么 是否考虑欧几里得距离的单一和完整联系? 3. 树状图表示给定数据集的不同链接结果。 它是否正确? 4. 在聚集聚类中,树状图的底部(初始部分)包含单个聚类。 它是否正确? 5. 聚集聚类中树状图的`y`轴是什么意思? 6. 合并较小的群集时,相异性降低。 它是否正确? -7. 显色矩阵的元素 *C(i,j)*报告相异度,其中两个对应元素`x[i]`和 *x [ [j]* 首次出现在同一群集中。 它是否正确? +7. 显色矩阵的元素`C(i, j)`报告相异度,其中两个对应元素`x[i]`和`x[j]`首次出现在同一群集中。 它是否正确? 8. 连接约束的主要目的是什么? diff --git a/new/handson-unsup-learn-py/06.md b/new/handson-unsup-learn-py/06.md index 4171942d..a0d5c3a1 100644 --- a/new/handson-unsup-learn-py/06.md +++ b/new/handson-unsup-learn-py/06.md @@ -666,7 +666,7 @@ p = 0.00000 - High risk 线性单类 SVM 方案:训练集与原点分开,具有最大的边距 -训练模型以找出使距原点的距离最大的超平面参数。 超平面一侧的所有样本均应为离群值,输出标签为 **+1** ,而其余所有样本均被视为离群值,并且输出标签为 *`-1`* 。 此标准似乎有效,但仅适用于线性可分离的数据集。 标准 SVM 通过将数据集(通过函数`$1`)投影到特征空间 D 上来解决此问题,在该特征空间 D 中,它获得了这样的属性: +训练模型以找出使距原点的距离最大的超平面参数。 超平面一侧的所有样本均应为离群值,输出标签为 **+1** ,而其余所有样本均被视为离群值,并且输出标签为`-1`。 此标准似乎有效,但仅适用于线性可分离的数据集。 标准 SVM 通过将数据集(通过函数`$1`)投影到特征空间 D 上来解决此问题,在该特征空间 D 中,它获得了这样的属性: ![](img/7fde64b8-0a5e-4248-b156-7ac3ec831820.png) @@ -698,7 +698,7 @@ p = 0.00000 - High risk 支持向量机中的决策过程 -权向量正交于分离超平面。 样本`x`[`i`] 被确定为一个惯常值,因为点积为正且大于阈值*ρ*。 相反, *`x[j]`* 被标记为异常值,因为决策函数的符号为负。 术语*ξ [i] (ξ [i] ≥0)*被称为松弛变量,它们的引入是为了使异常值和 内线 实际上,如果这些变量都等于零(并且为简单起见, *ρ= 1* ),则优化问题的条件变为: +权向量正交于分离超平面。 样本`x`[`i`] 被确定为一个惯常值,因为点积为正且大于阈值*ρ*。 相反,`x[j]`被标记为异常值,因为决策函数的符号为负。 术语*ξ [i] (ξ [i] ≥0)*被称为松弛变量,它们的引入是为了使异常值和 内线 实际上,如果这些变量都等于零(并且为简单起见, *ρ= 1* ),则优化问题的条件变为: ![](img/5a35ab70-84af-4bd0-aec6-dc88a81ec8ad.png) diff --git a/new/intel-mobi-proj-tf/05.md b/new/intel-mobi-proj-tf/05.md index 662144cc..f3257aa5 100644 --- a/new/intel-mobi-proj-tf/05.md +++ b/new/intel-mobi-proj-tf/05.md @@ -635,7 +635,7 @@ $ grep 'REGISTER.*"DecodeWav"' tensorflow/core/kernels/*.cc tensorflow/core/kernels/decode_wav_op.cc:REGISTER_KERNEL_BUILDER(Name("DecodeWav").Device(DEVICE_CPU), DecodeWavOp); ``` -在 TensorFlow 1.4 的 `tf_op_files.txt`文件中,已经有一行文本`tensorflow/core/kernels/decode_wav_op.cc`,但可以肯定的是`tensorflow/core/ops/audio_ops.cc`丢失了。 我们需要做的就是在`tf_op_files.txt`文件中的任意位置添加一行`tensorflow/core/ops/audio_ops.cc`,并像在第 3 章,“检测对象及其位置”中一样运行`tensorflow/contrib/makefile/build_all_ios.sh`* ,以重建 TensorFlow iOS 库。 然后再次运行 iOS 应用,并继续轻按启动按钮,然后说出语音命令以识别或误解,直到您无聊为止。 +在 TensorFlow 1.4 的 `tf_op_files.txt`文件中,已经有一行文本`tensorflow/core/kernels/decode_wav_op.cc`,但可以肯定的是`tensorflow/core/ops/audio_ops.cc`丢失了。 我们需要做的就是在`tf_op_files.txt`文件中的任意位置添加一行`tensorflow/core/ops/audio_ops.cc`,并像在第 3 章,“检测对象及其位置”中一样运行`tensorflow/contrib/makefile/build_all_ios.sh`,以重建 TensorFlow iOS 库。 然后再次运行 iOS 应用,并继续轻按启动按钮,然后说出语音命令以识别或误解,直到您无聊为止。 本章将重点介绍如何解决`Not found: Op type not registered`错误的过程,因为将来在其他 TensorFlow 模型上工作时,可以节省大量时间。 -- GitLab