K_means聚类中的这些代码行意味着什么



我正在学习K-means聚类。对plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label = 'Cluster 1')的工作很困惑,X[y_kmeans == 0, 0], X[y_kmeans == 0, 1]在代码中的用途是什么?

此处为完整代码

#k-means
#importing libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
#importing the dataset
dataset = pd.read_csv("mall_customers.csv")
X = dataset.iloc[:,[3,4]].values
#using the elbow method to find the optimal number of clusters
from sklearn.cluster import KMeans
wcss = [] #Within-Cluster Sum of Square
for i in range(1,11):
kmeans = KMeans(n_clusters = i, init = 'k-means++',max_iter = 300,n_init=10,random_state = 0)
kmeans.fit(X)
wcss.append(kmeans.inertia_)
plt.plot(range(1,11),wcss)
plt.title("The elbow method")
plt.xlabel("Number of cluster")
plt.ylabel('Wcss') 
plt.show()    
#applying kmeans to all dataset
kmeans = KMeans(n_clusters = 5,init = 'k-means++', max_iter=300,n_init=10,random_state=0)
y_kmeans = kmeans.fit_predict(X)
#Visualising the cluster
plt.scatter(X[y_kmeans == 0,0],X[y_kmeans == 0,1],s=100,c = 'red' ,label='Cluster1')
plt.scatter(X[y_kmeans == 1,0],X[y_kmeans == 1,1],s=100,c='blue', label='Cluster2')
plt.scatter(X[y_kmeans == 2,0],X[y_kmeans == 2,1],s=100,c='green',label='Cluster3')
plt.scatter(X[y_kmeans == 3,0],X[y_kmeans == 3,1],s=100, c ='cyan',label = 'CLuster4')
plt.scatter(X[y_kmeans == 4, 0], X[y_kmeans == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5')
plt.scatter(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],s=300, c = 'yellow', label ='Centroids')
plt.title('Clusters of customers')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()

我添加了输出图像以供参考肘曲线图,最终集群图像

这是一个过滤器。CCD_ 3选择CCD_ 4等于0的那些元素。CCD_ 5选择X的元素,其中对应的CCD_。

最初由tim roberts 回答

这里的X[y_hc ==1,0]0表示模型在x平面中,X[y_hc == 0,1]表示模型在y平面中。其中,as 1表示[i]的值或簇值。

X[y_kmeans == 0, 0] :

这是一个类似于切片策略的过滤器(X[start_rows:end_rows,selected column](。这就像是从数据集X中从给定的行号到特定的给定行号选择样本,在选择这些行之后,只使用列0。如果我们的样本是连续的,这将非常有效。不幸的是,事实并非如此,因为我们希望根据y中包含的模型所生成的聚类来选择行。

解释如下:

记住y包含您的集群模型的结果,其中我们有5个集群表示为集群0、集群1。。。集群4。

首先,y_kmeans==0将选择y==0的元素,这意味着分类为集群0的元素,因此y==0返回布尔值列表,对于属于集群0的那些元素为True,对于其他元素为false。结果现在将是X[[True,False,etc..],0],括号中的第一个元素表示上面提到的布尔值列表,第二个元素(0(表示列(或特征。Iris数据集的分隔长度示例(。此外,记住要制作散点图,在虹膜数据集的情况下,我们需要两个值(x和y(,x可以是萼片长度,y可以是萼片宽度。

所以第一行X[y_kmeans == 0,0],X[y_kmeans == 0,1]将被评估为X[[True,False…],0]和X[[True、False],1]此处粗体的值表示原始数据集中的列值。每个布尔值都映射到数据集中对应的行,如果该值为True,则选择该行并选择其列值(对应于括号中粗体部分(。所以你会有这样的东西:

x[[False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False,  True,  True, False,  True,
True,  True,  True,  True,  True,  True,  True,  True,  True,
True,  True,  True,  True,  True,  True,  True,  True,  True,
True,  True,  True,  True,  True, False,  True,  True,  True,
True,  True,  True,  True,  True,  True,  True,  True,  True,
True,  True,  True,  True,  True,  True,  True,  True,  True,
True, False,  True, False, False, False, False,  True, False,
False, False, False, False, False,  True,  True, False, False,
False, False,  True, False,  True, False,  True, False, False,
True,  True, False, False, False, False, False,  True, False,
False, False, False,  True, False, False, False,  True, False,
False, False,  True, False, False,  True],0]

请注意,数据集中的行数或X必须等于y中的元素数。

最新更新