Page 75 - 高中 信息技术 选择性必修4 人工智能初步
P. 75
3.3 聚类
Scikit-learn为我们提供了封装好的K-Means聚类算法,这里仅仅演示怎么使用封装好
的K-Means聚类算法来进行聚类,并使用Matplotlib库绘制聚类结果以便直观感受。
(1)首先调用Scikit-learn中的K-Means聚类算法和数据集,然后加载Iris数据集。
from sklearn.cluster import KMeans
from sklearn import datasets
iris = datasets.load_iris( ) # 加载鸢尾花数据集Iris
X = iris.data
y = iris.target
广东教育出版社
(2)初始化三个不同的K-Means聚类模型。对第三个模型,将参数“n_init”固定为
1,减少算法用不同簇心运行的次数而只运行一次,默认连续运行10次输出最佳结果。
estimators = [('k_means_iris_8', KMeans(n_clusters=8)),
('k_means_iris_3', KMeans(n_clusters=3)),
('k_means_iris_bad_init', KMeans(n_clusters=3, n_init=1, init='random'))]
(3)可视化三个模型的聚类结果,并进行比较。
fignum = 1
titles = ['8个簇', '3个簇', '3个簇, 随机初始化较差']
for name, est in estimators:
fig = plt.figure(fignum, figsize=(4, 3))
ax = Axes3D(fig, rect=[0, 0, .95, 1], elev=48, azim=134)
est.fit(X)
labels = est.labels_
ax.scatter(X[:, 3], X[:, 0], X[:, 2],c=labels.astype(np.float), edgecolor='k')
ax.w_xaxis.set_ticklabels([])
ax.w_yaxis.set_ticklabels([])
ax.w_zaxis.set_ticklabels([])
ax.set_xlabel('花瓣宽度')
ax.set_ylabel('萼片长度')
ax.set_zlabel('花瓣长度')
ax.set_title(titles[fignum - 1])
ax.dist = 12
fignum = fignum + 1
67 67
21Y3228.indd 67 2019/10/10 14:23:56