2017-11-05 4 views
0

私は次のタスクを与えられました:
フィールドセンサーの量を20に減らしたいと思います。前の質問から、すべてのロードベクトル(pca.components_)主成分ごとに1つのベクトル、137個の要素(各センサごとに1つ)。クラスタリングを使用して、同じように動作するセンサーをグループ化します。Kはクラスタの列を意味します

私のデータ: は、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

データマトリックス – GWW

答えて

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() 
関連する問題