Использование Silhouette Score - PullRequest
0 голосов
/ 13 мая 2019

У меня есть набор данных, который имеет 9 классов для каждого из его точек данных.Для каждого из изображений, принадлежащих к набору данных, я передаю его в ResNet50 и извлекаю векторный элемент 2048, обрезая последнее позже.Я сохранил векторы функций ResNet50 для каждой строки для одной точки данных в текстовом файле в том же порядке, что и мой CSV-файл.

Я хочу рассчитать оценку 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 (состоит из 2048 чисел, разделенных пробелом)

Ответы [ 3 ]

1 голос
/ 13 мая 2019

Я думаю, что проблема в том, что вы хотите прочитать 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'))
0 голосов
/ 14 мая 2019

Вот правильный ответ, по крайней мере у меня это сработало:

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'))
0 голосов
/ 13 мая 2019

Вы забыли прочитать свой файл.

Метод требует ввода массива, а не дескриптора файла.

...