Pandas 中如何使用 Scikit-learn 进行层次聚类以获取聚类“中心”
在本文中,我们将介绍如何使用 Pandas 和 Scikit-learn 进行层次聚类,并获取聚类“中心”。
阅读更多:Pandas 教程
什么是层次聚类?
层次聚类是一种将样本分组的无监督机器学习方法。其中,每个样本都被认为是一个单独的组,并且在聚类处理期间,样本逐渐合并到更高层组。这种方法可以通过树状图形式表示,根祖先代表所有样本,而叶节点代表单独样本。
具体地说,有两种类型的层次聚类——聚合和分裂。在此处,我们将关注聚合版本,即从单独的点开始并合并成更高层次结构的方法。
如何实现层次聚类
Scikit-learn 中提供了两种执行层次聚类的算法——凝聚层次聚类和分裂层次聚类。在此处,我们将使用 Scikit-learn 中的凝聚层次聚类方法。
首先,需要安装 Scikit-learn:
pip install -U scikit-learn
经过安装后,需要导入 Pandas 和 Scikit-learn:
import pandas as pd
from sklearn.cluster import AgglomerativeClustering
凝聚聚类可以通过在每次迭代期间将最相邻的点合并到一个组中来实现。在 Scikit-learn 中,可以使用 AgglomerativeClustering
类来实现此过程。
然后,我们需要准备一个数据集。在这里,我们将使用“鸢尾花”数据集:
from sklearn.datasets import load_iris
iris = load_iris() # load iris dataset
X = pd.DataFrame(iris.data, columns=iris.feature_names) # create a pandas dataframe
现在我们准备好了数据,可以使用 AgglomerativeClustering
来进行层次聚类:
clustering = AgglomerativeClustering(n_clusters=3).fit(X)
在这里,n_clusters
是我们想要创建的群集数。然后,您可以将 fit_predict
方法用于数据来执行群集分配:
X["cluster"] = clustering.fit_predict(X)
此时,每个样本都被分配到一个小组中。我们可以看一下最终的小组如何分布:
X["cluster"].value_counts()
这应该返回和打印出每个小组中的样本数。
如何获取聚类“中心”
我们已经成功地将数据集划分成了三个群集。现在,我们想要了解每个群集的“中心”位置,以便能够更好地理解您的数据。
在 Scikit-learn 中,可以使用 linkage
方法和 dendrogram
方法可视化或者进行计算。下面是一个可视化 dendrogram
的例子:
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
linked = linkage(X, 'single')
dendrogram(linked, orientation='top', distance_sort='descending', show_leaf_counts=True)
plt.show()
这将返回一个树状图,显示每个点的合并过程。更重要的是,您可以从中了解到群集的“中心”。
另外,可以使用 AgglomerativeClustering
对象:
print(clustering.cluster_centers_)
输出每个群集的中心。
总结
在本文中,我们学习了如何使用 Pandas 和 Scikit-learn 进行凝聚层次聚类,以及如何从聚类中获取“中心”。层次聚类是一种很强大的机器学习方法,可以帮助我们对未知数据进行分类和分组。同时,聚类的结果还可以通过中心的位置来探索数据结构和特征的分布,以便进行更深入的分析。
在使用 Scikit-learn 进行层次聚类时,我们需要掌握几个重要的概念,比如如何准备数据,如何进行聚类操作,以及如何获取“中心”信息。同时,我们还需要对每个概念进行实践,才能让自己更加熟练地掌握这些方法。
在未来的工作中,如果需要进行聚类分析,可以使用 Pandas 和 Scikit-learn 的组合来实现约定。此外,还可以继续深入探索 Scikit-learn 中的其他聚类算法,以便更好地理解聚类过程和方法。
总之,层次聚类是一种十分有用的机器学习方法,可以帮助我们对数据进行分组和分类。通过使用 Pandas 和 Scikit-learn,可以很容易地实现聚类操作和获取“中心”信息。