在此页面上,W3schools.com 与纽约数据科学院,为我们的学生提供数字培训内容。
层次聚类是一种对数据点进行聚类的无监督学习方法。该算法通过测量数据之间的差异来构建聚类。无监督学习意味着模型不必经过训练,我们也不需要 "target" 变量。该方法可用于任何数据,以可视化和解释各个数据点之间的关系。
在这里,我们将使用层次聚类对数据点进行分组,并使用树状图和散点图可视化聚类。
我们将使用聚合聚类,这是一种遵循自下而上方法的层次聚类。我们首先将每个数据点视为其自己的簇。然后,我们将距离最短的簇连接在一起,以创建更大的簇。重复这一步骤,直到形成包含所有数据点的一个大簇。
层次聚类要求我们决定距离和链接方法。我们将使用欧几里德距离和 Ward 连接方法,该方法试图最小化簇之间的方差。
首先可视化一些数据点:
import numpy as np
import matplotlib.pyplot as plt
x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]
plt.scatter(x, y)
plt.show()
广告
现在我们使用欧几里德距离计算病房链接,并使用树状图将其可视化:
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]
data = list(zip(x, y))
linkage_data = linkage(data, method='ward', metric='euclidean')
dendrogram(linkage_data)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]
data = list(zip(x, y))
hierarchical_cluster = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='ward')
labels = hierarchical_cluster.fit_predict(data)
plt.scatter(x, y, c=labels)
plt.show()
导入您需要的模块。
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.cluster import AgglomerativeClustering
您可以在我们的中了解 Matplotlib 模块《Matplotlib 教程。
您可以在我们的中了解 SciPy 模块SciPy 教程。
NumPy 是一个用于在 Python 中处理数组和矩阵的库,您可以在我们的文章中了解 NumPy 模块NumPy 教程。
scikit-learn 是一个流行的机器学习库。
创建类似于数据集中两个变量的数组。请注意,虽然我们在这里只使用两个变量,但此方法适用于任意数量的变量:
x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]
将数据转换为一组点:
data = list(zip(x, y))
print(data)
结果:
[(4, 21), (5, 19), (10, 24), (4, 17), (3, 16), (11, 25), (14, 24), (6, 22), (10, 21), (12, 21)]
计算所有不同点之间的联系。在这里,我们使用简单的欧几里德距离度量和沃德链接,其目的是最小化聚类之间的方差。
linkage_data = linkage(data, method='ward', metric='euclidean')
最后,将结果绘制在树状图中。该图将向我们显示从底部(单个点)到顶部(由所有数据点组成的单个簇)的簇层次结构。
plt.show()
让我们可视化树状图,而不仅仅是原始链接数据。
dendrogram(linkage_data)
plt.show()
结果:
scikit-learn 库允许我们以不同的方式使用层次聚类。首先,我们初始化AgglomerativeClustering
具有 2 个簇的类,使用相同的欧几里德距离和 Ward 连接。
hierarchical_cluster = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='ward')
这个.fit_predict
可以对我们的数据调用方法,以使用我们选定数量的集群中定义的参数来计算集群。
labels = hierarchical_cluster.fit_predict(data) print(labels)
结果:
[0 0 1 0 0 1 1 0 1 1]
最后,如果我们绘制相同的数据并使用分层聚类方法分配给每个索引的标签为点着色,我们可以看到每个点分配到的集群:
plt.scatter(x, y, c=labels)
plt.show()
结果:
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!