Вопрос или проблема
Недавно я смог обучить простой классификационный алгоритм (мой первый ML-проект) и даже получил довольно удовлетворительную точность.
Теперь я ищу способ проверить, какие данные в моем train_data были ошибочно классифицированы. Моя основная идея была примерно такой:
Если y_train != y_pred Затем:
(получить индексы y_train)
(посмотреть данные в моем csv и попытаться найти шаблон)
Моя основная проблема в том, что функция train_test_split
предоставляет мне подмножество y_test
примерно такое:
print(y_test):
28886 0
23319 0
8913 1
25770 0
А y_pred
— это список примерно такой:
print(y_pred):
[0 0 1 ... 0 1 0]
Поскольку в y_test
уже есть существующий индекс, я не могу просто сравнить y_test[2]
с y_pred[2]
. Мне кажется, что y_test[2]
не предоставляет третий элемент y_test
. Скорее, он предоставляет третий элемент моего оригинального набора данных.
Я ищу способ сравнить позицию n
моего подмножества y_test
с позицией n
y_pred
, чтобы я мог получить индексы всех ошибочно классифицированных.
Питон-код, который я использовал, чтобы получить этот результат:
x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X,Y, test_size=0.2)
clf = KNeighborsClassifier(n_neighbors=13)
clf.fit(x_train,y_train)
y_pred = clf.predict(x_test)
acc = metrics.accuracy_score(y_test,y_pred)
print(acc)
Спасибо за ваш ответ. Я, на самом деле, только что нашел способ сделать это:
y_test_indexes = y_test.index
for i in range(0,len(y_test_indexes)):
value = y_test_indexes[i]
if y_test[value] != y_pred[i]:
print(value,y_test[value],y_pred[i])
Вы можете преобразовать серии в список и выполнить сравнение, порядок в любом случае должен остаться прежним.
Или, если вы хотите сохранить ссылку, вы можете преобразовать список в серию, используя
pd.Series(list, index= y_test.index)
Ответ или решение
Как инспектировать неправильно классифицированные данные в модели машинного обучения
Обучение алгоритма классификации — это захватывающий этап в области машинного обучения. Если вы достигли хорошего уровня точности, следующим важным шагом станет анализ причин неверных классификаций. Это не только поможет улучшить вашу модель, но и даст уникальное понимание предметной области.
Задача
Вы столкнулись с проблемой неправильной классификации в процессе выполнения вашего проекта. У вас есть предсказанные значения (y_pred
) и тестовые значения (y_test
), однако индексы в этих массивах отличаются. Поскольку y_test
представляет собой сокращённый вариант оригинального набора данных, вам необходимо найти способ сопоставить индексы и определить, какие данные были неправильно классифицированы.
Решение
Вот шаги, которые помогут вам успешно выполнить инспекцию:
-
Сопоставление индексов:
Чтобы сопоставить ваши предсказания с истинными метками, вы можете использовать индексы, которые предоставляетy_test
. Убедитесь, что вы проверяете каждое значение вy_test
с соответствующим индексом вy_pred
.y_test_indexes = y_test.index for i in range(len(y_test_indexes)): value = y_test_indexes[i] if y_test[value] != y_pred[i]: print(f"Индекс: {value}, Истинное значение: {y_test[value]}, Предсказанное значение: {y_pred[i]}")
-
Использование pandas:
Если ваши данные находятся в формате pandas, вы можете конвертировать список предсказаний в серию с теми же индексами, которые у вас есть вy_test
. Это упростит сравнение.y_pred_series = pd.Series(y_pred, index=y_test.index) ошибочные = (y_test != y_pred_series) неверные_данные = y_test[ошибочные] print("Неправильно классифицированные данные:") for index, value in неверные_данные.items(): print(f"Индекс: {index}, Истинное значение: {value}, Предсказанное значение: {y_pred_series[index]}")
-
Анализ ошибок:
После того как вы нашли неверно классифицированные данные, следующим шагом будет их анализ. Попробуйте выявить общие закономерности — возможно, в данных присутствуют какие-то признаки, которые являются «шумом», или определённые классы данных воспринимаются вашей моделью затруднительно. -
Улучшение модели:
На основании анализа ошибок вы можете корректировать модель. Рассмотрите возможность применения других методов (например, более сложных алгоритмов, переобучения, настройки гиперпараметров) или предобработки данных. -
Обновление оценки модели:
После улучшения модели не забудьте заново оценить её производительность с использованием террестирующих метрик.
Заключение
Анализ неправильно классифицированных данных — ключевая часть процесса обучения моделей. Ваша способность выявлять и исправлять ошибки не только улучшит точность вашей модели, но и подарит вам уверенность в её применении в реальных условиях. Помните, что путь к совершенствованию — это бесконечный процесс, который включает в себя постоянный анализ и адаптацию. Удачи в ваших дальнейших исследованиях в области машинного обучения!