K表示群集列

时间:2017-11-05 15:27:00

标签: python k-means

我接到了以下任务:
您希望将场传感器的数量减少到20.您现在应该从前一个问题得到一个包含所有加载向量(pca.components_)的数组,每个主要组件一个向量,137个元素(每个传感器一个)。使用群集对行为相同的传感器进行分组。

我的数据: 由137个不同的传感器和8784个线组成。

在我标准化数据之后,我看到16列的标准差为0,因此将它们删除(这意味着它们每次都测量相同,对吧?)

我运行以下代码:

from sklearn.decomposition import PCA

# Do your PCA here.
pca = PCA(n_components=120)
pca.fit(data['std'])

from sklearn.cluster import KMeans
X_pca = pca.transform(data['std'])

# Apply your clustering here
km = KMeans(n_clusters=20, init='k-means++',n_init=10, verbose=0);
km.fit(X_pca);
cluster_pred = km.predict(X_pca);

plt.figure(figsize=(10,5))
plt.scatter(X_pca[:,0], X_pca[:,1], c=cluster_pred, s=20, cmap='viridis')
plt.show()

现在我最终得到了所有被聚集的行。如何更改此项,以对每列进行聚类,以便我可以从每个聚类中选择一个传感器? 为了选择,我应该只占据每个集群的中心吗?

1 个答案:

答案 0 :(得分:0)

我不确定数据[' std']的样子,所以我无法运行您的代码。无论如何,按照你的说法,你的问题可以通过如下转置你的数据来解决:

from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import numpy as np

transposed_data = np.transpose(data['std']) 
# In case it doesnt work, try with np.transpose(np.asarray(data['std']))

# Do your PCA here.
pca = PCA(n_components=120)
pca.fit(transposed_data)

X_pca = pca.transform(transposed_data)

# Apply your clustering here
km = KMeans(n_clusters=20, init='k-means++',n_init=10, verbose=0);
km.fit(X_pca);
cluster_pred = km.predict(X_pca);

plt.figure(figsize=(10,5))
plt.scatter(X_pca[:,0], X_pca[:,1], c=cluster_pred, s=20, cmap='viridis')
plt.show()