2016-06-15 10 views
0

私は2つのクラスターを持つ30個のサンプルのセットに対してk-meansクラスタリングを行っています(私は既に2つのクラスがあることを知っています)。データをトレーニングとテストセットに分け、テストセットの精度スコアを計算しようとします。しかし、2つの問題があります。まず、k-meansクラスタリングのために実際にこれを実行できるかどうかはわかりません(テストセットの精度スコア)。第二に、もし私がこれを行うことが許されていれば、私の実装が苦労しているか間違っているか。sklearn:テストデータセットのk-meansの精度スコアを計算する

df_hist = pd.read_csv('video_data.csv') 

y = df_hist['label'].values 
del df_hist['label'] 
df_hist.to_csv('video_data1.csv') 
X = df_hist.values.astype(np.float) 

X_train, X_test,y_train,y_test = cross_validation.train_test_split(X,y,test_size=0.20,random_state=70) 
k_means = cluster.KMeans(n_clusters=2) 
k_means.fit(X_train) 
print(k_means.labels_[:]) 
print(y_train[:]) 

score = metrics.accuracy_score(y_test,k_means.predict(X_test)) 
print('Accuracy:{0:f}'.format(score)) 

k_means.predict(X_test) 
print(k_means.labels_[:]) 
print(y_test[:]) 

しかし、私は、印刷時にテストセットのラベル(k_means.predict(X_test)プリント(k_means.labels_の[:])を)kは、意味:ここで私が試したものですし、最後の3行にy_testのラベル(print(k_means.labels_ [:]))を貼り付けたとき、X-train用に作成されたラベルではなく、テスト。私がここで間違っているかもしれないどんな考え? k-meansのパフォーマンスを評価するために私がやっていることはまったく正しいですか? ありがとうございました!

答えて

7

精度の点では、 k-means は分類ツールではないことを覚えておく必要があります。したがって、精度の分析はあまり良い考えではありません。あなたはこれをすることができますが、これはk-meansが何であるかではありません。クラスター間の距離を最大にするデータのグループを見つけるはずですが、訓練するためにラベルを使用しません。その結果、k-meansのようなものは通常、RandIndexやその他のクラスタリングメトリックなどでテストされます。精度の最大化のためにあなたは、コード自体の面ではなどのkNN、ロジスティック回帰、SVMなど

k_means.predict(X_test)戻りラベルを実際の分類子に合わせなければならない、それはあなたが行う必要があり、内部labels_フィールドを更新しません

print(k_means.predict(X_test)) 

さらに、Pythonであなたが(といけない)する必要はありませんが、アレイを印刷する[:]を使用して、ちょうど

print(k_means.labels_) 
print(y_test) 
+0

あなたはlejlotありがとうございます! – Miranda

関連する問題