Как повысить точность мультиклассовой классификации случайных лесов? - PullRequest
0 голосов
/ 05 декабря 2018

Я работаю над многоклассовой классификацией для сегментирования клиентов на 3 разных класса в зависимости от их покупательского поведения и демографических характеристик.Я не могу раскрыть набор данных полностью, но в целом он содержит около 300 объектов и 50000 строк.Я пробовал следующие методы, но мне не удалось достичь точности выше 50%:

  1. Настройка гиперпараметров (я использую настроенные гиперпараметры после выполнения GridSearchCV)
  2. Нормализация набора данных и затемзапуск моих моделей
  3. Опробовал разные методы классификации: OneVsRestClassifier, RandomForestClassification, SVM, KNN и LDA
  4. Я также удалил ненужные функции и попытался запустить мои модели
  5. Мои классы были несбалансированными, поэтому я также попытался использовать class_weight = сбалансированный, передискретизацию с использованием SMOTE, понижающую и передискретизацию.

Есть ли что-то еще, что я могу попытаться улучшить свою точность (и под точностью я имею в виду f-оценка, точностьи вспомнить).

Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

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

0 голосов
/ 13 декабря 2018

Попробуйте настроить параметры ниже

n_estimators

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

max_features

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

  • Авто / Нет: это просто примет все функции, которые имеют смысл
    в каждом дереве. Здесь мы просто не накладываем никаких ограничений на отдельное дерево,

    sqrt: эта опция будет получать квадратный корень от общего числа объектов в отдельном прогоне.Например, если общее количество переменных равно 100, мы можем взять только 10 из них в отдельном дереве. ”Log2 ″ - другой аналогичный тип опции для max_features.

    0.2: эта опция позволяет случайному лесувзять 20% переменных в индивидуальном прогоне.Мы можем назначить и определить значение в формате «0.x», где мы хотим, чтобы x% объектов рассматривалось.

min_sample_leaf

Лист является конечным узломДрево решений.Меньший лист делает модель более склонной к улавливанию шума в данных поезда.Вы можете начать с некоторого минимального значения, такого как 75, и постепенно увеличивать его.Посмотрите, какое значение ваша точность будет высока.

0 голосов
/ 05 декабря 2018

Как проходит обучение?Я предполагаю, что ваш акк - это ваша проверка.Если ваша тренировка слишком высока, возможно, вам подойдут обычные тренировки.Случайный лес обычно очень хорошо справляется с перегрузкой.

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

Примечание:помните, что подгонка SVM является квадратичной по количеству точек, что сокращает ваши данные до 10-20000 для настройки параметров, а затем подгоняет SVM к полному набору данных с оптимальным параметром для подмножества, также может ускорить процесс,Также не забудьте попробовать разные ядра для SVM.

...