这些命令在数字数据集聚类演示中起什么作用?
what do these commands do in the digits dataset clustering demonstration?
我一直在研究 Python 教程 here 上的将数字数据集拟合到 k 均值聚类的方法,其中一些代码让我感到困惑。
我理解这部分,我们需要使用 10 个集群来训练我们的模型。
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
kmeans = KMeans(n_clusters=10, random_state=0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
下面向我们展示了控制台上 10 个簇质心的输出。
它首先创建有两行的图形和轴,每行有 5 个轴子图 return 图形和
(8,3) 是控制台上显示的图形的大小。
但在那之后我就是不明白该命令如何在 for 循环中显示簇质心的输出。
fig, ax = plt.subplots(2, 5, figsize=(8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks=[], yticks=[])
axi.imshow(center, interpolation='nearest', cmap=plt.cm.binary)
此外,这部分是为了检查聚类在查找数据中的相似数字时的准确性。我知道我们需要创建一个标签,其大小与填充零的集群相同,以便我们可以将预测的标签放在那里。
但同样,我只是不明白他们是如何在 for 循环中实现它的。
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]
有人可以解释一下每一行命令的作用吗?谢谢。
问题 1:代码如何绘制质心?
重要的是要看到每个质心都是特征中的一个点 space。换句话说,质心看起来像训练样本之一。在这种情况下,每个训练样本都是一个 8 × 8 的图像(尽管它们已经被展平成具有 64 个元素的行(因为 sklearn
总是希望输入 X
是一个 two-dimensional 数组) .所以每个质心也代表一个8×8的图像
循环跨越轴(一个 2 × 5 矩阵)和质心(kmeans.cluster_centers_
一起。zip
的目的是确保对于每个 Axes
对象是对应的center
(这是将一堆n的东西绘制成一堆n的子图的常用方法)。 centroids 已被重塑为 10 × 8 × 8 数组,因此 10 个 centroids 中的每一个都是我们期望的 8 × 8 图像。
由于每个质心现在都是一个二维数组,您可以使用 imshow
绘制它。
问题2:代码是如何分配标签的?
最简单的方法可能是将代码拆开,然后 运行 自行分解代码。例如,看看 clusters == 0
。这是一个布尔数组。您可以使用布尔数组来索引相同形状的其他数组。循环中的第一行代码将这个数组分配给 mask
所以我们可以使用它。
然后我们使用布尔数组(试试吧!)对 labels
进行索引,“将这些值更改为标签向量相应元素的众数平均值,即 digits.target
。 “由于 scipy.stats.mode()
函数 returns(再次尝试),索引 [0]
是必需的。
我一直在研究 Python 教程 here 上的将数字数据集拟合到 k 均值聚类的方法,其中一些代码让我感到困惑。
我理解这部分,我们需要使用 10 个集群来训练我们的模型。
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
kmeans = KMeans(n_clusters=10, random_state=0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
下面向我们展示了控制台上 10 个簇质心的输出。 它首先创建有两行的图形和轴,每行有 5 个轴子图 return 图形和 (8,3) 是控制台上显示的图形的大小。 但在那之后我就是不明白该命令如何在 for 循环中显示簇质心的输出。
fig, ax = plt.subplots(2, 5, figsize=(8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks=[], yticks=[])
axi.imshow(center, interpolation='nearest', cmap=plt.cm.binary)
此外,这部分是为了检查聚类在查找数据中的相似数字时的准确性。我知道我们需要创建一个标签,其大小与填充零的集群相同,以便我们可以将预测的标签放在那里。 但同样,我只是不明白他们是如何在 for 循环中实现它的。
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]
有人可以解释一下每一行命令的作用吗?谢谢。
问题 1:代码如何绘制质心?
重要的是要看到每个质心都是特征中的一个点 space。换句话说,质心看起来像训练样本之一。在这种情况下,每个训练样本都是一个 8 × 8 的图像(尽管它们已经被展平成具有 64 个元素的行(因为 sklearn
总是希望输入 X
是一个 two-dimensional 数组) .所以每个质心也代表一个8×8的图像
循环跨越轴(一个 2 × 5 矩阵)和质心(kmeans.cluster_centers_
一起。zip
的目的是确保对于每个 Axes
对象是对应的center
(这是将一堆n的东西绘制成一堆n的子图的常用方法)。 centroids 已被重塑为 10 × 8 × 8 数组,因此 10 个 centroids 中的每一个都是我们期望的 8 × 8 图像。
由于每个质心现在都是一个二维数组,您可以使用 imshow
绘制它。
问题2:代码是如何分配标签的?
最简单的方法可能是将代码拆开,然后 运行 自行分解代码。例如,看看 clusters == 0
。这是一个布尔数组。您可以使用布尔数组来索引相同形状的其他数组。循环中的第一行代码将这个数组分配给 mask
所以我们可以使用它。
然后我们使用布尔数组(试试吧!)对 labels
进行索引,“将这些值更改为标签向量相应元素的众数平均值,即 digits.target
。 “由于 scipy.stats.mode()
函数 returns(再次尝试),索引 [0]
是必需的。