Как увеличить истинный позитив в вашей модели машинного обучения? - PullRequest
0 голосов
/ 24 сентября 2019

Я новичок в машинном обучении. У меня есть набор данных, который имеет сильно несбалансированные классы (преобладают отрицательные классы) и содержит более 2K числовых функций, а цель - [0,1].Я обучил логистической регрессии, хотя я получаю точность 89%, но из матрицы путаницы было обнаружено, что модель Истинный позитив очень низок.Ниже приведены оценки моей модели

Оценка точности: 0,8965989500114129

Точность: 0,3333333333333333

Оценка отзыва: 0,029545454545454545

F1 Оценка: 0,054279749980333333

Как я могу увеличить свои истинные позитивы?Должен ли я использовать другую классификационную модель?

Я попробовал PCA и представил свои данные в 2-х компонентах, это повысило точность модели до 90% (приблизительно), однако истинные положительные результаты снова уменьшились

Ответы [ 4 ]

2 голосов
/ 24 сентября 2019

Есть несколько способов сделать это:

  • Вы можете изменить свою модель и проверить, работает ли она лучше или нет
  • Вы можете исправить другой порог прогнозирования: здесь, я думаю,вы прогнозируете 0, если результат вашей регрессии <0,5, вы можете изменить <code>0.5 на 0.25, например.Это повысило бы ваш уровень истинного положительного результата, но, конечно, ценой еще нескольких ложных положительных результатов.
  • Вы можете продублировать каждый положительный пример в вашем тренировочном наборе, чтобы у вашего классификатора было ощущение, что классы действительно сбалансированы.
  • Вы можете изменить потерю классификатора, чтобы штрафовать больше ложных отрицательных значений (на самом деле это довольно близко к дублированию ваших положительных примеров в наборе данных)

Я уверен, что многиедругие хитрости могут применяться, вот только мой любимый шорт-лист.

0 голосов
/ 24 сентября 2019

Вы можете попробовать много разных решений.

Если у вас достаточно много точек данных.Например, у вас есть 2k 1s и 20k 0s.Вы можете попробовать просто сбросить эти лишние 0, оставив только 2k 0.Тогда тренируй это.А также вы можете попробовать использовать другой набор 2k 0s и тот же набор 2k 1s.Тренировать несколько моделей.И принимать решения на основе нескольких моделей.

Вы также можете попробовать добавить веса на выходном слое.Например, у вас есть 10 раз 0, чем 1 с.Попробуйте умножить 10 на значение прогнозирования 1с.

Возможно, вы также можете попытаться увеличить отсев?

И т. Д.

0 голосов
/ 24 сентября 2019

Каков размер вашего набора данных? Сколько строк мы говорим здесь?

Ваш набор данных не сбалансирован, и это своего рода нормальное явление для простого алгоритма классификации, который большую часть времени предсказывает «мажоритарный класс» и дает вам точность 90%.Можете ли вы собрать больше данных, в которых будет больше положительных примеров.

Или просто попробуйте избыточную выборку / недостаточную выборку.посмотрим, поможет ли это.

Вы также можете использовать штрафную версию алгоритма для наложения штрафа, когда прогнозируется неправильный класс.Это может помочь.

0 голосов
/ 24 сентября 2019

Я предполагаю, что ваша цель - получить модель с хорошей точностью классификации для некоторого набора тестов, независимо от формы этой модели.В этом случае, если у вас есть доступ к вычислительным ресурсам, попробуйте Gradient-Boosted Trees.Это ансамблевый классификатор, использующий несколько деревьев решений для подмножеств ваших данных, а затем ансамбль голосования для прогнозирования.Насколько я знаю, это может дать хорошие результаты с несбалансированным количеством классов.

SciKitLearn имеет функцию sklearn.ensemble.GradientBoostingClassifier для этого.Я не использовал этот конкретный вариант, но я часто использую регрессионную версию, и это кажется хорошим.Я почти уверен, что у MATLAB это тоже есть как пакет, если у вас есть доступ.

Функции 2k могут быть сложными для алгоритма SKL - я не знаю, никогда не пробовал.

...