一、基本代码
sklearn.cluster.AgglomerativeClustering(n_clusters=2, *, affinity='euclidean',memory=None, connectivity=None, compute_full_tree='auto', linkage='ward',distance threshold=None, compute_distances=False)
参数说明
(1)n_clusters:聚类结果中簇的个数,默认值为2;
(2)affinity:表示距离度量的字符串,默认值为'euclidean';
(3)linkage:选用的距离标准,{'ward','complete','average''single'},:'wrad'指按照最小方差合并簇,'complete','average','single'分别代表按照最大距离、平均距离和最小距离计算簇之间的距离。
属性说明
(1)n_clusters _: int,算法得出的簇的数目。
(2) labels _: ndarray of shape(n_samples),每一个点的簇标记。
(3) n_leaves _: int, Number of leaves in the hierarchical tree.
举例:鸢尾花
from sklearn import datasets
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import pandas as pd
# 加载鸢尾花数据集
iris = datasets.load_iris()
irisdata = iris.data # 取出数据部分
# 使用AgglomerativeClustering进行聚类
clustering = AgglomerativeClustering(linkage='ward', n_clusters=3) # 创建聚类器,使用ward链接方法,设定聚类为3个簇
res = clustering.fit(irisdata) # 对数据进行聚类
# 输出每个簇的样本数目
print("各个簇的样本数目:")
print(pd.Series(clustering.labels_).value_counts()) # 将聚类结果转化为Series并统计每个簇的样本数目
# 输出聚类结果的混淆矩阵
print("聚类结果:")
print(confusion_matrix(iris.target, clustering.labels_)) # 计算并输出混淆矩阵
# 可视化聚类结果
plt.figure()
# 绘制第一个簇的数据点
d0 = irisdata[clustering.labels_ == 0]
plt.plot(d0[:, 0], d0[:, 1], 'r.', label='Cluster 0') # 用红色的点表示第一个簇
# 绘制第二个簇的数据点
d1 = irisdata[clustering.labels_ == 1]
plt.plot(d1[:, 0], d1[:, 1], 'go', label='Cluster 1') # 用绿色的圆圈表示第二个簇
# 绘制第三个簇的数据点
d2 = irisdata[clustering.labels_ == 2]
plt.plot(d2[:, 0], d2[:, 1], 'b*', label='Cluster 2') # 用蓝色的星号表示第三个簇
# 设置图形的标签和标题
plt.xlabel("Sepal.Length") # X轴标签
plt.ylabel("Sepal.Width") # Y轴标签
plt.title("AGNES Clustering") # 图形标题
plt.legend() # 显示图例
plt.show() # 展示图形