sklearn:在测试数据集上计算k均值的准确性得分

发布于 2021-01-29 14:11:01

我正在对30个带有2个聚类的样本进行k均值聚类(我已经知道有两个类)。我将数据分为训练集和测试集,并尝试计算测试集的准确性得分。但是有两个问题:首先,我不知道我是否真的可以针对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-means标签( k_means.predict(X_test)
print(k_means.labels [:]) )和y_test标签( _print(k_means.labels [:])_ )时,与安装X-
train时得到的标签相同,而不是为X测试生成的标签。知道我在这里做错了什么吗?我在评估k均值性能时所做的一切对吗?谢谢!

关注者
0
被浏览
128
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

    print(k_means.predict(X_test))
    

    此外,在python中,您不必(也不应该)用于[:]打印数组,只需执行

    print(k_means.labels_)
    print(y_test)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看