任务描述
本关任务: 1.k-means聚类; 2.hcluster聚类。
相关知识
分类&聚类
分类
- 有监督学习。
- 通过有标签样本学习分类器。
聚类
- 无监督学习。
- 通过观察学习,将数据分割成多个簇。
测定聚类质量
外在方法:有监督的
- 用某种聚类质量度量对聚类结果和基准进行比较。
- 基准:一种理想的聚类,由专家构建
内在方法:无监督的
- 通过考察簇的分离情况和簇的紧凑情况来评估聚类。
- 例:轮廓系数
编程要求
根据提示,在右侧编辑器补充的相关函数代码,对鸢尾花数据集做KMeans聚类和HCluster聚类。
KMeans函数介绍
kmeans = KMeans(n_clusters=5, random_state=3)
n_clusters 为簇的个数,即你想聚成几类;random_state 是随机状态,没有设定输出结果会不确定,评测确定答案一致设定随机状态。
AgglomerativeClustering函数介绍
AgglomerativeClustering(linkage='ward', n_clusters=2)
链接算法 ward,聚2类。
linkage:一个字符串,用于指定链接算法
—— ‘ward’:单链接single-linkage,采用dmindmin。
—— ‘complete’:全链接complete-linkage算法,采用dmaxdmax。
—— ‘average’:均连接average-linkage算法,采用davgdavg。
测试说明
平台会对你编写的代码进行测试:
测试输入:略; 预期输出:
K-means: [1 2 2 0 0 0 0 1 2 0 2 2 0 0 1 2 1 1 1 0 1 1 0 1 1 0 2 1 2 2 2 2 2 1 1 1 1
1 0 0 1 1 1 0 0 1 0 1 0 1 0 2 2 0 2 1 1 1 1 2 2 1 1 1 2 1 0 1 1 0 0 2 0 1
1 0 2 2 2 1 0 2 2 2 1 0 2 2 2 0 1 2 0 0 1 0 0 1 2 0 0 2 0 2 0 0 0 0 2 0 1
2 0 1 0 2 2 0 0 2]
hcluster: [0 2 0 1 1 1 1 0 2 1 2 2 1 1 0 2 0 0 0 1 0 0 1 0 0 1 2 0 2 2 2 2 2 0 0 0 0
0 1 1 0 0 0 1 1 0 1 0 1 0 1 2 2 1 2 0 0 0 0 2 2 0 0 0 2 0 1 0 0 1 1 2 1 0
0 1 2 2 2 0 1 2 2 2 0 1 2 2 2 1 0 2 1 1 0 1 1 0 2 1 1 2 1 2 1 1 1 1 2 1 0
2 1 0 1 2 2 1 1 2]
源代码:
from sklearn.cluster import KMeans
from sklearn.cluster import AgglomerativeClustering
import pandas as pd
def Kmeans(data_url):
"""k-means"""
df1 = pd.read_csv(data_url)
X1 = df1.iloc[:, 1:5]
# 构造k-means聚类器,类别为3,随机状态为9
#####Begin#####
estimator = KMeans(n_clusters=3, random_state=9)
#####End#####
return estimator.fit_predict(X1)
def Hcluster(data_url):
"""hcluster"""
df2 = pd.read_csv(data_url)
X2 = df2.iloc[:, 1:5]
# 构造hcluster聚类器,类别为3
#####Begin#####
clustering = AgglomerativeClustering(n_clusters=3)
#####End#####
return clustering.fit_predict(X2)
if __name__ == '__main__':
data_url = "src/step1/data/iris_train.csv"
result1 = Kmeans(data_url)
print('K-means:', result1)
result2 = Hcluster(data_url)
print('hcluster:', result2)