Понимание показателей точности Top N для задач классификации на несколько классов

Точность является наиболее распространенной метрикой оценки для моделей классификации из-за ее простоты и интерпретации. Но когда у вас есть проблема классификации нескольких классов, скажем, с 15 различными целевыми классами, рассмотрение стандартной точности модели может ввести в заблуждение. Здесь могут быть полезны «N высших» значений точности, и в этом посте я проведу вас через базовую интуицию и реализацию на Python N высших точности.

Прежде чем мы перейдем к максимальной точности N, сделаем небольшое напоминание о метрике стандартной точности:

Что такое точность?

Точность - это доля от общего числа записей, которая правильно спрогнозирована моделью. Точность = (Количество правильно спрогнозированных записей / Общее количество записей) или Точность = (TP + TN) / (TP + TN + FP + FN)

Почему точность не является идеальным средством для решения мультиклассовых задач?

Когда у вас много разных классов, модель классификации может быть не в состоянии точно предсказать правильный класс. Это особенно становится проблемой в случаях НЛП, таких как классификация текста, когда у вас есть огромное количество функций, а данные неадекватно сгруппированы по классам. Поэтому взгляд на стандартную метрику точности иногда может ввести в заблуждение. Как я сказал ранее, измерение максимальной точности N может помочь в решении этой проблемы.

Что такое максимальная точность N?

Точность наивысших N - это не какая-то другая метрика, это просто стандартная точность того, что истинный класс равен любому из N наиболее вероятных классов, предсказанных классификационной моделью.

Первая точность - это точность, при которой истинный класс совпадает с наиболее вероятными классами, предсказанными моделью, что соответствует нашей стандартной точности.

Топ 2 точности - это точность, при которой истинный класс совпадает с любым из 2 наиболее вероятных классов, предсказанных моделью.

Топ-3 точности - это точность, при которой истинный класс совпадает с любым из 3-х наиболее вероятных классов, предсказанных моделью.

Таким же образом мы можем измерить 4, 5, 6 и т. Д.

Позвольте мне показать вам пример, чтобы лучше понять. Рассмотрите возможность классификации записей по соответствующим животным (собака, кошка, лев, тигр и слон). В таблице показан истинный класс и прогнозируемый класс из 6 записей.

Отсюда мы получим точность 50%, что не очень приятно. Теперь давайте выясним две основные точности решения этой проблемы. В таблице показан истинный класс и 2 наиболее вероятных класса для одного и того же набора записей.

Таким образом, мы получаем точность 83%, что является значительным увеличением по сравнению с предыдущим. Это основная интуиция при нахождении максимальных N значений точности.

Надеюсь, вы поняли важность измерения максимальной точности N. Даже если модель классификации не может предсказать точный класс, просмотр двух или трех верхних значений точности может быть полезен во многих ситуациях, особенно если существует много разных классов, таких как 15 или 20.

Теперь я покажу вам некоторый код для поиска N высших точности с использованием python. К сожалению, в sci-kit learn для этого нет встроенной функции. Итак, я определил здесь функцию, которую вы можете напрямую скопировать и использовать в своих задачах.

После импорта необходимых библиотек и предварительной обработки данных запустите предоставленную функцию.

def top_n_accuracy(X,y,n,classifier):
  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
  vectorizer = TfidfVectorizer(min_df=2)
  X_train_sparse = vectorizer.fit_transform(X_train)
  feature_names = vectorizer.get_feature_names()
  test = vectorizer.transform(X_test)
  clf = classifier
  clf.fit(X_train_sparse,y_train)
  predictions = clf.predict(test)
  probs = clf.predict_proba(test)
  topn = np.argsort(probs, axis = 1)[:,-n:]
  y_true = np.array(y_test)
  return np.mean(np.array([1 if y_true[k] in topn[k] else 0 for k in range(len(topn))]))

Вы можете вызвать функцию, указав следующие параметры:

  1. X = переменные функции
  2. y = целевой класс
  3. n = верхние N, которые вы хотите измерить (например, n = 2 для верхних 2)
  4. Классификатор = модель классификации, которую вы хотите использовать (пример LogisticRegression ())

Я определил эту функцию для классификации текста, но вы можете просто удалить строки с экземпляром векторизатора и использовать его для стандартной классификации.