编程语言
首页 > 编程语言> > python – sklearn:计算测试数据集上k-means的准确度分数

python – sklearn:计算测试数据集上k-means的准确度分数

作者:互联网

我正在对具有2个簇的30个样本的集合进行k-means聚类(我已经知道有两个类).我将我的数据分成训练和测试集,并尝试计算我的测试集上的准确度分数.但是有两个问题:首先我不知道我是否可以实际为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)print(k_means.labels_ [:]))和y_test标签(print(k_means.labels_ [:]))的k-means标签时,我得到的标签与我安装X-train时的标签相同,而不是为X-test生成的标签.知道我在这里做错了什么吗?我正在做什么来评估k-means的表现是否正确?
谢谢!

解决方法:

在评估准确性方面.您应该记住k-means不是分类工具,因此分析准确性不是一个好主意.你可以做到这一点,但这不是k-means的用途.它应该找到最大化群集间距离的数据分组,它不会使用您的标签进行训练.因此,像k-means这样的东西通常会用RandIndex和其他聚类指标来测试.为了最大化准确性,您应该适合实际的分类器,如kNN,逻辑回归,SVM等.

就代码本身而言,k_means.predict(X_test)返回标签,它不会更新内部标签_字段,你应该做

print(k_means.predict(X_test))

此外,在python中,您不必(也不应该)使用[:]来打印数组,就这样做

print(k_means.labels_)
print(y_test)

标签:python,k-means,scikit-learn
来源: https://codeday.me/bug/20190713/1449164.html