Для сложных нелинейных данных

Случайный лес — это тип контролируемого алгоритма машинного обучения, который можно использовать как для задач регрессии, так и для задач классификации. В качестве краткого обзора: регрессионная модель предсказывает выход с непрерывным значением (например, цена, рост, средний доход), а модель классификации предсказывает выход с дискретным значением (например, класс 0 или 1, тип цвета — красный, синий). , Зеленый).

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

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

Я не буду объяснять принципы работы случайных лесов. Сегодня больше внимания будет уделяться практическому использованию случайных лесов для построения регрессионной модели. Вы получите практический опыт работы с кодом Python. Однако, если вы также хотите узнать, как случайные леса работают за кулисами, вы можете прочитать следующий пост, написанный мной. Это также является обязательным условием для сегодняшнего поста.



О данных, которые мы используем

Мы построим модель регрессии случайного леса на популярном наборе данных о ценах на жилье в Калифорнии, который содержит данные, собранные в ходе переписи населения США 1990 года. Вот некоторые полезные детали набора данных.

  • Источник набора данных: вы можете скачать набор данных здесь.
  • Лицензия на набор данных. Этот набор данных предоставляется под лицензией CC0: Public Domain. Более подробную информацию об этом типе лицензии вы можете найти здесь.
  • Ссылка на набор данных: Пейс, Р. Келли и Рональд Барри, Разреженные пространственные авторегрессии, Статистические и вероятностные письма, 33 (1997) 291–297.
  • Описание набора данных. Этот набор данных содержит в общей сложности 9 переменных, включая целевую. Описание каждой переменной можно найти здесь.

Давайте посмотрим на обзор всего набора данных.

import pandas as pd
df = pd.read_csv('cali_housing.csv')
df.head()

df.shape

Это возвращает (20640, 9). Набор данных содержит 20640 наблюдений и всего 9 переменных, включая цель. Целевой столбец — «MedHouseVal», выраженный в 100 000 долларов.

df.isnull().sum().sum()

Это возвращает 0. Это означает, что в наборе данных нет пропущенных значений.

Визуализируйте наши данные

Не все переменные в наборе данных используются для нашего анализа. Нам интересно увидеть взаимосвязь между стоимостью дома и его местоположением. Единой переменной для местоположения дома не существует. Вместо этого мы используем переменные «Широта» и «Долгота» в наборе данных. Они обозначают расположение домов. Стоимость дома является целевой переменной. Мы используем «MedHouseVal» в качестве целевой переменной. Следовательно, наша матрица признаков X содержит значения переменных «Широта» и «Долгота», а целевой вектор Y содержит значения переменной «MedHouseVal».

X = df[['Latitude', 'Longitude']]
Y = df['MedHouseVal']

Эта нотация предназначена для машинного обучения. Когда мы визуализируем данные, мы просто обозначаем наши 3 переменные как x, y и z.

x=df['Latitude']
y=df['Longitude']
z=df['MedHouseVal']

Используя эти 3 переменные, мы можем создать трехмерную диаграмму рассеяния, чтобы увидеть взаимосвязь между стоимостью дома и его местоположением.

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

Построить базовую модель

Сначала мы создадим экземпляр (модель) класса RandomForestRegressor(), который доступен в подмодуле ансамбля Scikit-learn. Затем мы обучаем нашу модель с помощью X и Y, как мы определили ранее.

При создании нашей модели мы будем использовать следующие значения для наиболее важных гиперпараметров в классе RandomForestRegressor().

  • n_estimators=100 (количество деревьев в ансамбле)
  • max_depth=2 (это определяет размер дерева)
  • min_samples_split=2
  • random_state=1

С этими значениями мы не можем ожидать идеальной модели. Это потому, что мы еще не настроили ни одного гиперпараметра. Следовательно, приведенные выше значения не являются оптимальными значениями гиперпараметров модели. Здесь мы создаем только базовую модель, которую можно использовать для сравнения с настроенной моделью (подробнее об этом чуть позже).

Визуализируйте базовую модель

Давайте посмотрим, как наша модель соответствует данным.

Как вы можете видеть на диаграмме рассеяния, наша базовая модель плохо согласуется с данными. Это потому, что мы еще не настроили ни одного гиперпараметра. Итак, есть возможность улучшить нашу модель, настроив гиперпараметры (подробнее об этом чуть позже).

Визуализируйте отдельное дерево в лесу

Наш базовый случайный лес содержит 100 деревьев решений (оценщиков). Мы можем получить доступ к каждому дереву, используя следующие обозначения.

rf.estimators_[index]

Здесь индекс отсчитывается от нуля. 0 представляет первое дерево решений.

rf.estimators_[0] #First tree

Теперь мы визуализируем первое дерево в нашей модели случайного леса.

Поскольку мы использовали max_depth=2,дерево не является сложным. Когда вы увеличиваете значение max_depth, дерево будет сложным, а модель будет иметь тенденцию к переобучению данных.

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

Настройте гиперпараметры модели

Существует несколько методов настройки гиперпараметров модели машинного обучения. Здесь мы используем популярную технику под названием случайный поиск вместе с к-кратной перекрестной проверкой.

Здесь мы рассматриваем два гиперпараметра для настройки.

  • max_depth:1–15 (14 различных значений)
  • min_samples_split:2–50(48 различных значений)

Наше пространство поиска двумерно. Всего существует 672 (14x48) различных комбинаций значений гиперпараметров. Если мы используем поиск по сетке для настройки гиперпараметров, процесс выполнения займет много времени. Мы используем случайный поиск, который рассматривает только случайно выбранную небольшую выборку комбинаций гиперпараметров. Размер выборки указывается в n_iter. Здесь мы используем n_iter=10.

Перестройте модель, используя оптимальные значения гиперпараметров

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

Визуализируйте настроенную модель

Теперь мы создаем диаграмму рассеяния с настроенной моделью.

Как вы можете видеть на диаграмме рассеяния, на этот раз наша настроенная модель хорошо соответствует данным, возможно, с переоснащением!

Визуализируйте важность функций

Мы не использовали все переменные в наборе данных о ценах на жилье в Калифорнии для нашего анализа. Поскольку нас интересует, как местоположение дома влияет на цену дома, мы используем только переменные «Широта» и «Долгота» в наборе данных для нашего анализа. Однако другие переменные в наборе данных также влияют на цену дома.

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

Затем мы визуализируем важность функций.

Как мы видим на гистограмме, переменные, которые мы выбрали ранее, имеют большее значение, чем некоторые другие переменные. Однако наибольшее значение для модели имеют «MedInc» и «AveOccup». Это означает, что на стоимость дома сильно влияют «MedInc» и «AveOccup». Следовательно, эти две переменные также должны быть включены в нашу модель. В целях визуализации мы выбрали для анализа только две функции («Широта» и «Долгота»).

Краткое содержание

Полученные нами результаты могут существенно различаться в зависимости от следующих факторов.

  • random_stateзначение класса RandomForestRegressor()
  • random_stateзначение функции train_test_split()

Основываясь на значениях, которые мы предоставляем для random_state, оптимальные значения гиперпараметров, значение RMSE и важность функций могут значительно различаться. Это связано с случайностью, связанной с созданием деревьев и разделением набора данных на обучающие и тестовые разделения. Используйте положительное целое значение для random_state, чтобы получить статические результаты при различных запусках.

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

Спасибо за прочтение!

Подпишитесь на мою рассылку

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



Становиться участником

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



До встречи в следующей статье! Как всегда всем приятного обучения!

Рукшан Прамодита
08.03.2022