Как рассчитать коэффициент успеха в задаче классификации с многокомпонентными заданиями - PullRequest
0 голосов
/ 12 января 2012

В моей задаче можно наблюдать N разных классов, и моя задача - определить, какие из них произошли в момент времени t (из T кадров). Я создал actualLabels и predictedLabels двоичные матрицы размером NxT. Я наблюдал за данными и заполнил actualLabels от руки. actualLabels(n,t) равно 1, если экземпляр в момент времени t включает n-й класс, в противном случае он равен 0. Это служит моими основными данными истинности. Затем я запускаю свой алгоритм на данных и прогнозирую наблюдаемые классы. Метки найдены автоматически и сохранены в predictedLabels.

Мой вопрос заключается в том, как я могу вычислить значение успеха, используя эти матрицы? Есть ли популярный способ сделать это?

Пример: Пусть будет 4 класса и T = 5. Пусть данные будут

actualLabels    = 0 0 0 0 1
                  1 1 0 1 0
                  0 1 0 0 1
                  0 0 0 0 1

predictedLabels = 0 0 0 0 1
                  0 0 1 1 0
                  0 1 0 0 0
                  0 1 0 0 0

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

Путаница матрица передает много информации. Я хотел бы видеть аналогичную таблицу, которая помогает мне увидеть, где часто происходят ошибки, общий успех и т. Д.

Подробности: У меня есть некоторые wav-данные, и я хочу сделать полифоническое отслеживание высоты тона. В каждом временном интервале может быть любое количество сыгранных нот, которые образуют метки, которые я хочу предсказать.

Примечание: В Википедии есть некоторые показатели для классификации по нескольким меткам. Я был бы счастлив узнать любую другую метрику или сюжет.

Ответы [ 3 ]

1 голос
/ 13 января 2012

Чтобы измерить успех, вам нужно определить его.Выберите допустимую погрешность, которую вы готовы принять (возможно, ноль), и посчитайте, сколько прогнозов (с расстояниями Хэмминга) падают ниже его, чтобы получить ваш процент.

Если ваши тренировочные матрицы редкие (в основном нули)это может ввести в заблуждение, поскольку модель, которая всегда предсказывает нулевую матрицу, будет успешной.Здесь вы можете посмотреть на точность и вспомнить .Они образуют естественный компромисс, и поэтому обычно невозможно максимизировать оба одновременно.Чтобы объединить их в одну метрику, рассмотрим f-оценка .Опять же, если ваши тренировочные данные не разреженные, тогда простой процент точности, вероятно, будет лучшим.

Наконец, если вы измеряете точность для выбора из нескольких возможных моделей (называемых валидацией)), затем остерегайтесь повторного использования данных тренировки для этого шага.Вместо этого разделите свои данные на данные обучения и данные перекрестной проверки .Проблема в том, что ваши модели уже склонны к данным, на которых они были обучены;только то, что они хорошо справляются с , означает, что не означает, что они будут обобщать то, что они могут видеть в реальном приложении.Для получения дополнительной информации см. Статью вики перекрестной проверки.

1 голос
/ 20 января 2012

Подобно тому, что ответил @phs, вы должны учитывать расстояния Хемминга предсказаний до фактических меток, однако нет необходимости подсчитывать количество предсказаний, которые подпадают под заданный порог (если вы действительно не верите, что предсказания под указанным порог - префект, а те, что выше - мусор). Если вместо этого вы полагаете, что в более «гладкой» потере, т. Е. Прогноз с расстоянием Хэмминга, равным 0 от фактического значения, лучше, чем прогноз с расстоянием Хемминга с 1, что лучше, чем прогноз с расстоянием Хэмминга с 2 и т. д. Тогда хорошая функция потерь - это просто среднее расстояние Хемминга ваших прогнозов до фактического значения. Еще одна возможность взять экспоненту расстояний Хэмминга, если вы считаете, что прогнозы, которые были относительно близки, намного лучше, чем прогнозы, которые относительно не близки (нелинейно).

Что касается матрицы путаницы, кажется, что вы действительно делаете 88 классификаций одновременно на кадр, где каждый classifier_i классифицирует, играет ли note_i. Таким образом, вы можете посмотреть матрицу путаницы для каждой заметки или пару заметок и т. Д. Как вы уже упоминали, просмотр матрицы путаницы, включающей 2 ^ 88 классов, был бы невозможен. Другая возможность состоит в том, чтобы сделать кластеризацию на метках, а затем сделать матрицу путаницы, используя кластер прогнозов против фактического кластера.

1 голос
/ 12 января 2012

Одним из решений является то, что вы можете преобразовать 4 не взаимоисключающих двоичных класса в 16 взаимоисключающих классов и построить матрицу смешения Если у вас достаточно количества кадров и достаточно мало двоичных классов, это наиболее подходящее решение.

Еще один более простой подход состоит в том, чтобы вычислять отзыв и точность для каждого из классов в отдельности.

...