Множественные случайные леса с разделением признаков | Sklearn

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

Что вам нужно?

Это так просто. Вам понадобится записная книжка jupyter со следующими импортированными библиотеками.

  1. Numpy
  2. Панды
  3. Sklearn

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

Обычно наша практика заключается в том, чтобы начать с логистической регрессии и посмотреть, как она работает с набором данных. В этом случае мы смогли получить точность 0,781 на тестовой выборке. Затем мы попробовали SVM с помощью sklearn-python, и с его помощью мы смогли получить точность 0,891. Однако на начальных этапах даже со случайным лесом или нейронной сетью мы не можем получить точность выше 0,900.

Почему точность не превышает 0,900?

Когда мы наблюдали за набором обучающих данных, мы четко определили, что набор данных смещен в сторону «0» доходов. Это фактически влияет на любую модель, которую мы использовали для обучения и прогнозирования. Самая большая проблема заключалась в том, что даже несмотря на то, что все модели имели более высокую точность для прогнозирования доходов "0", точность прогнозирования доходов "1" была очень низкой. Фактически, это было очень ясно, когда мы рассчитали классовую точность.

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

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

Несколько случайных лесов с разделением объектов

Из всех моделей, которые мы пробовали, случайный лес смог дать максимальную точность перекрестной проверки по тестовым данным. Следовательно, мотивом было использовать несколько случайных лесов и обучить их путем разделения функций на группы, и мы предположили, что это повысит точность перекрестной проверки. В этом случае мы использовали два случайных классификатора леса и обучили их разным наборам функций. Затем, используя результаты этих двух случайных лесов и все начальные функции, был обучен другой случайный лес для получения окончательного результата. Всего три случайных леса работали вместе, чтобы предсказать доходы.

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

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

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

Хотя в большинстве случаев достаточно одного случайного леса, в некоторых случаях несколько случайных лесов могут быть полезны для повышения точности. Если у вас есть функции, которые можно четко идентифицировать как два или более отдельных набора, то использование нескольких случайных лесов с разделением функций может улучшить ваши результаты. Разделение объектов с учетом корреляции с метками также является хорошей практикой, но будьте осторожны, это может привести к чрезмерной подгонке. Однако лучший способ - разделить функции, учитывая их техническое значение в зависимости от поля.

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