# 沃德结构层次聚类的浣熊脸图像的演示
# A demo of structured Ward hierarchical clustering on a raccoon face image
import time as time
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
from sklearn.feature_extraction.image import grid_to_graph
from sklearn.cluster import AgglomerativeClustering
from sklearn.utils.testing import SkipTest
from sklearn.utils.fixes import sp_version
if sp_version < (0, 12):
raise SkipTest("Skipping because SciPy version earlier than 0.12.0 and"
"thus does not include the scipy.misc.face() image.")
# 创建数据
try:
face = sp.face(gray=True)
except AttributeError:
# 较新版本的 scipy 的 face 函数放在 misc 中
# Newer versions of scipy have face in misc
from scipy import misc
face = misc.face(gray=True)
# 调整到原始尺寸的 10%,以加快处理
# Resize it to 10% of the original size to speed up the processing
face = sp.misc.imresize(face, 0.10) / 255.0 # 为什么要除以 255
X = np.reshape(face, (-1, 1))
# 定义数据的结构,连接到他们相邻的像素
# Define the structure A of the data, Pixels connected to their neighbors
connectivity = grid_to_graph(*face.shape)
# 计算聚类
print "Compute structured hierarchical clustering..."
st = time.time()
n_clusters = 15 # 区域的数量
# 此处传入的参数 connectivity 的作用是什么?不加入的话则运行时间要长得多,且图像效果也跟加入的差别很大
ward = AgglomerativeClustering(n_clusters=n_clusters, linkage="ward", connectivity=connectivity)
ward.fit(X)
label = np.reshape(ward.labels_, face.shape)
print "Elapsed time: ", time.time() - st
print "Number of pixels: ", label.size
print "Number of clusters: ", np.unique(label).size
# 将结果绘制在图上
# Plot the results on an image
plt.figure(figsize=(5, 5))
plt.imshow(face, cmap=plt.cm.gray)
for cluster_num in range(n_clusters):
plt.contour(label == cluster_num, contours=1, colors=[plt.cm.spectral(cluster_num / float(n_clusters)), ])
plt.xticks(())
plt.yticks(())
plt.show()
『sklearn学习』沃德结构层次聚类的浣熊脸图像的演示
最新推荐文章于 2023-01-05 06:30:00 发布