Могу ли я использовать строковые значения в качестве зависимой переменной в модели машинного обучения KNN?

#python #machine-learning #scikit-learn #image-classification

#python #машинное обучение #scikit-learn #изображение-классификация

Вопрос:

Итак, у меня есть данные со 128 кодировками лиц, метка которых является именем человека, а столбец с именами в нем является моим целевым столбцом. Я, очевидно, использовал labelbinarisation для бинаризации зависимой переменной (столбец name). Когда я использовал KNN для подгонки и прогнозирования имени пользователя, это ничего не предсказывает.

Это должно быть что-то вроде этого:

введите описание изображения здесь

Но вместо этого я получил это:

введите описание изображения здесь

Из-за этого моим первым сомнением было, могу ли я использовать строковое значение в качестве зависимой или целевой переменной или нет. Приветствуется любая помощь. Спасибо

Для бинаризации я использовал это

 #Binarising the labels
labelBinarised = LabelBinarizer()
Y_train=labelBinarised.fit_transform(Y_train)
Y_test = labelBinarised.fit_transform(Y_test)
  

Комментарии:

1. Пожалуйста, добавьте код с fit и predict.

2. Это scikit-learn вопрос, который на самом деле не имеет ничего общего с pandas — пожалуйста, не спамите нерелевантными тегами (отредактировано).

Ответ №1:

Вы можете использовать строковые значения в качестве целевой переменной, поскольку в документации указано, что целевой переменной должна быть {array-like, sparse matrix} Target values of shape = [n_samples] or [n_samples, n_outputs] , они не упоминали, что она должна быть только числовой. ваши функции должны быть числовыми, поскольку они используются для вычисления расстояния, но вашей целью может быть строка.

Как и в приведенном ниже примере, целевым значением является строка, и оно работает нормально:

 X = [[0], [1], [2], [3]]
y = ['zero', 'zero', 'one', 'one']

from sklearn.neighbors import KNeighborsClassifier

neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(X, y)

print(neigh.predict([[3]]))

#output
#array(['one'], dtype='<U4')