【问题标题】:K means cluster columnsK 表示簇列
【发布时间】:2018-04-17 19:23:59
【问题描述】:

我被赋予了以下任务:
您希望将场传感器的数量减少到 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()

现在我将所有行都聚集在一起。我该如何改变这一点,对每一列进行聚类,这样我就可以从每个聚类中选择一个传感器?
而对于选择,我应该只取每个集群的中心吗?

【问题讨论】:

  • 你可以转置你的数据矩阵

标签: python k-means


【解决方案1】:

我不确定 data['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()

【讨论】:

    猜你喜欢
    • 2017-12-29
    • 2015-05-28
    • 2012-06-19
    • 2016-12-18
    • 2017-06-09
    • 2014-02-20
    • 2015-01-05
    • 2016-04-14
    • 2023-03-30
    相关资源
    最近更新 更多