2016-06-15 105 views
0

我正在对具有2个聚类的30个样本集(我已经知道有两个类)的集合进行k均值聚类。我将数据分成训练和测试集,并尝试计算我测试集的准确性分数。但是有两个问题:首先我不知道我是否可以为k均值聚类实际做到这一点(测试集上的准确性分数)。第二:如果允许我这样做,不管我的实现是写还是错。以下是我已经试过:sklearn:计算测试数据集上k-均值的准确性得分

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-装置的测试组标签(k_means.predict(X_test)打印(k_means.labels_ [:]))和y_test标签(print(k_means.labels_ [:]))在最后三行中,我得到的标签与我在拟合X-train时的标签相同,而不是为X-测试。任何想法,我可能在这里做错了吗?我所做的评估k-means的性能是否正确? 谢谢!

回答

7

就评估的准确性而言。您应该记住,k-means 不是分类工具,因此分析准确性并不是一个好主意。你可以做到这一点,但这不是k-means的用途。它应该找到一组数据,以最大化群集间距离,它不会使用您的标签进行训练。因此,像k-means这样的东西通常用RandIndex和其他聚类度量标准进行测试。对于精度的最大化,你应该符合实际的分类,如k近邻,logistic回归SVM等

在代码本身而言,k_means.predict(X_test)回报标签,它不更新内部labels_场,你应该做的

print(k_means.predict(X_test)) 

此外,在Python中,你不必(也不应该)使用[:]打印一个数组,只是做

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

谢谢lejlot! – Miranda