我接到了以下任务:
您希望将场传感器的数量减少到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()
现在我最终得到了所有被聚集的行。如何更改此项,以对每列进行聚类,以便我可以从每个聚类中选择一个传感器? 为了选择,我应该只占据每个集群的中心吗?
答案 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()