使用 Silhouette Score

Using Silhouette Score

我有一个数据集,每个数据点有 9 个 类。对于属于数据集的每个图像,我将其传递给 ResNet50 并通过稍后切碎最后一个来提取 2048 特征向量。我已经按照与我的 csv 文件相同的顺序,将一个数据点的每一行 ResNet50 特征向量保存在一个 txt 文件中。

我想计算数据集中每个 类 的 Silouhette 分数。我不确定如何继续我的设置。我没有太多代码,但这是一个入门者:

import pandas as pd
from sklearn.metrics import pairwise_distances
from sklearn import cluster, datasets, preprocessing, metrics
from sklearn.cluster import KMeans
df = pd.read_csv("master.csv")
labels = df['Q3 Theme1']
X = open('entire_dataset__resnet50_feature_vectors.txt')
X_Data = X.read()
print('Silhouette Score:', metrics.silhouette_score(X_Data, labels,
                                                    metric='cosine'))

我得到这个作为输出:https://pastebin.com/raw/hk2axdWL

如何修复此代码以便打印单个剪影乐谱?

Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

Process finished with exit code 1

我在这里粘贴了一行我的特征向量文件(.txt 文件):https://pastebin.com/raw/hk2axdWL(由 space 分隔的 2048 个数字组成)

我认为问题出在您想阅读 X 的那一行。我稍微更改了您的代码。

from sklearn.metrics import pairwise_distances
from sklearn import cluster, datasets, preprocessing, metrics
from sklearn.cluster import KMeans
df = pd.read_csv("master.csv")
labels = df['Q3 Theme1']
X = open('entire_dataset__resnet50_feature_vectors.txt')
X_Data = X.read()
print('Silhouette Score:', metrics.silhouette_score(X_Data, labels, 
metric='euclidean'))

您忘记阅读文件了。

该方法需要一个数组作为输入,而不是文件句柄。

这是正确答案,至少对我有用:

import pandas as pd
from sklearn import metrics


df = pd.read_csv("master.csv")
labels = list(df['Q3 Theme1'])
X = open('entire_dataset__resnet50_feature_vectors.txt')
#X_Data = X.read()

fv = []
for line in X:
    line = line.strip("\n")
    tmp_arr = line.split(' ')
    print(tmp_arr)
    fv.append(tmp_arr)

print(fv)
print('Silhouette Score:', metrics.silhouette_score(fv, labels,
                                                    metric='cosine'))