Автор оригинала: Pankaj Kumar.
Случайная регрессия лесов: полная ссылка
Добро пожаловать в эту статью о случайной лесной регрессии. Позвольте мне быстро идти по смыслу регрессии.
Оглавление
- Что такое регрессия в изучении машины?
- Что такое случайная регрессия лесов?
- Шаги для выполнения случайной регрессии леса
- Реализация случайной регрессии лесов в Python
- 1. Импорт набора данных
- 2. Предварительная обработка данных
- 3. Установка случайной регрессии лесов к набору данных
- 4. Визуализация результата
- 5. Интерпретация вышеуказанного графика
- 6. Восстановление модели на 100 деревьев
- 7. Создание графика на 100 деревьев
- 8. Восстановление модели на 300 деревьев
- 9. График для 300 деревьев
- Полный код Python для реализации случайной регрессии леса
- Заключение
Что такое регрессия в изучении машины?
Регрессия – это техника машинного обучения, которая используется для прогнозирования ценностей в определенном диапазоне. Давайте увидим понимаю эту концепцию с примером, рассмотрим зарплату работников и их опыт в течение многих лет.
Модель регрессии на эти данные может помочь в прогнозировании зарплаты работника, даже если этот год не имеет соответствующей зарплаты в наборе данных.
Что такое случайная регрессия лесов?
Случайная регрессия лесов – это метод обучения ансамбля. Но что такое обучение ансамбля?
В исследовании ансамбля вы принимаете несколько алгоритмов или тот же алгоритм несколько раз и собрать модель, которая более мощной, чем оригинал.
Прогноз на основе деревьев более точнее, потому что он учитывает много прогнозов. Это связано с использованием среднего значения. Эти алгоритмы более стабильны, потому что любые изменения в наборе данных могут повлиять на одно дерево, но не лес деревьев.
Шаги для выполнения случайной регрессии леса
Это процесс четырех шагов, и наши шаги следующие:
- Выберите случайные точки данных K от набора тренировок.
- Создайте дерево решений, связанные с этими k точек данных.
- Выберите номер n деревьев деревьев, которые вы хотите создать и повторять шаги 1 и 2.
- Для новой точки данных сделать каждый из ваших деревьев NTREE предсказать значение y для точки данных в вопросе, и назначить новую точку данных в среднем по всем предсказанным значениям y.
Реализация случайной регрессии лесов в Python
Наша цель здесь состоит в том, чтобы построить команду деревьев решений, каждый из которых предпринимает прогноз в зависимости от зависимой переменной и конечным прогнозированием случайного леса – это среднее значение прогнозов всех деревьев.
Для нашего примера мы будем использовать набор наборов заработной платы, который предсказует зарплату на основе прогнозирования.
Используемый набор данных можно найти в https://github.com/content-anu/dataSet-polynomial-Regression
1. Импорт набора данных
Мы будем использовать Numpy, Pandas и библиотеки MATPLOTLIB для реализации нашей модели.
import pandas as pd import numpy as np import matplotlib.pyplot as plt dataset = pd.read_csv('Position_Salaries.csv') dataset.head()
Снимок набора данных выглядит следующим образом:
2. Предварительная обработка данных
У нас не будет много данных для предварительной обработки данных. Нам просто нужно будет определить матрицу функций и векторизованного массива.
X = dataset.iloc[:,1:2].values y = dataset.iloc[:,2].values
3. Установка случайной регрессии лесов к набору данных
Мы импортируем RankyForestregressor из ансамбльской библиотеки Sklearn. Мы создаем объект регресса с использованием конструктора класса RFR. Параметры включают в себя:
- n_eStimators: количество деревьев в лесу.)
- Критерий: по умолчанию – MSE IE означает ошибку в квадрате. Это была также часть дерева решений.
- Random_State.
from sklearn.ensemble import RandomForestRegressor regressor = RandomForestRegressor(n_estimators = 10, random_state = 0) regressor.fit(X,y)
Линия регресса выглядит следующим образом:
Мы просто сделаем прогноз теста следующим образом:
y_pred=regressor.predict([[6.5]]) y_pred
4. Визуализация результата
#higher resolution graph X_grid = np.arange(min(X),max(X),0.01) X_grid = X_grid.reshape(len(X_grid),1) plt.scatter(X,y, color='red') #plotting real points plt.plot(X_grid, regressor.predict(X_grid),color='blue') #plotting for predict points plt.title("Truth or Bluff(Random Forest - Smooth)") plt.xlabel('Position level') plt.ylabel('Salary') plt.show()
Произведенная графика, как показано ниже:
5. Интерпретация вышеуказанного графика
Мы получаем много шагов на этом графике, чем с одним валом решений. У нас намного больше интервалов и разбитых. Мы получаем больше шагов на нашей лестнице.
Каждый прогноз основан на 10 голосов (мы предприняли 10 деревьев решений). Случайный лес рассчитывает много средних для каждого из этих интервалов.
Чем больше деревьев мы включаем, больше – это точность, потому что многие деревья сходятся к тому же среднему среднему.
6. Восстановление модели на 100 деревьев
from sklearn.ensemble import RandomForestRegressor regressor = RandomForestRegressor(n_estimators = 100, random_state = 0) regressor.fit(X,y)
Уравнение регресса, сформированное для вышеуказанных 100 деревьев, заключается в следующем:
7. Создание графика на 100 деревьев
#higher resolution graph X_grid = np.arange(min(X),max(X),0.01) X_grid = X_grid.reshape(len(X_grid),1) plt.scatter(X,y, color='red') plt.plot(X_grid, regressor.predict(X_grid),color='blue') plt.title("Truth or Bluff(Random Forest - Smooth)") plt.xlabel('Position level') plt.ylabel('Salary') plt.show()
Шаги графика не увеличиваются в 10 раз как количество деревьев в лесу. Но прогноз будет лучше. Давайте предскащим результат того же переменной.
y_pred=regressor.predict([[6.5]]) y_pred
8. Восстановление модели на 300 деревьев
from sklearn.ensemble import RandomForestRegressor regressor = RandomForestRegressor(n_estimators = 300, random_state = 0) regressor.fit(X,y)
Выход для вышеуказанного кодового фрагмента создает следующий регресс:
9. График для 300 деревьев
#higher resolution graph X_grid = np.arange(min(X),max(X),0.01) X_grid = X_grid.reshape(len(X_grid),1) plt.scatter(X,y, color='red') #plotting real points plt.plot(X_grid, regressor.predict(X_grid),color='blue') #plotting for predict points plt.title("Truth or Bluff(Random Forest - Smooth)") plt.xlabel('Position level') plt.ylabel('Salary') plt.show()
Приведенный выше код производит следующий график:
Теперь давайте сделаем прогноз.
y_pred=regressor.predict([[6.5]]) y_pred
Выход для вышеуказанного кода выглядит следующим образом:
Полный код Python для реализации случайной регрессии леса
import pandas as pd import numpy as np import matplotlib.pyplot as plt dataset = pd.read_csv('Position_Salaries.csv') dataset.head() X = dataset.iloc[:,1:2].values y = dataset.iloc[:,2].values # for 10 trees from sklearn.ensemble import RandomForestRegressor regressor = RandomForestRegressor(n_estimators = 10, random_state = 0) regressor.fit(X,y) y_pred=regressor.predict([[6.5]]) y_pred #higher resolution graph X_grid = np.arange(min(X),max(X),0.01) X_grid = X_grid.reshape(len(X_grid),1) plt.scatter(X,y, color='red') #plotting real points plt.plot(X_grid, regressor.predict(X_grid),color='blue') #plotting for predict points plt.title("Truth or Bluff(Random Forest - Smooth)") plt.xlabel('Position level') plt.ylabel('Salary') plt.show() # for 100 trees from sklearn.ensemble import RandomForestRegressor regressor = RandomForestRegressor(n_estimators = 100, random_state = 0) regressor.fit(X,y) #higher resolution graph X_grid = np.arange(min(X),max(X),0.01) X_grid = X_grid.reshape(len(X_grid),1) plt.scatter(X,y, color='red') plt.plot(X_grid, regressor.predict(X_grid),color='blue') plt.title("Truth or Bluff(Random Forest - Smooth)") plt.xlabel('Position level') plt.ylabel('Salary') plt.show() y_pred=regressor.predict([[6.5]]) y_pred # for 300 trees from sklearn.ensemble import RandomForestRegressor regressor = RandomForestRegressor(n_estimators = 300, random_state = 0) regressor.fit(X,y) #higher resolution graph X_grid = np.arange(min(X),max(X),0.01) X_grid = X_grid.reshape(len(X_grid),1) plt.scatter(X,y, color='red') #plotting real points plt.plot(X_grid, regressor.predict(X_grid),color='blue') #plotting for predict points plt.title("Truth or Bluff(Random Forest - Smooth)") plt.xlabel('Position level') plt.ylabel('Salary') plt.show() y_pred=regressor.predict([[6.5]]) y_pred
Выход вышеуказанного кода будет графики и значения прогнозирования. Ниже приведены графики:
Заключение
Как вы наблюдали, модель 10 деревьев предсказала зарплату за 6,5 лет опыта, чтобы быть 167 000 человек. Модель 100 деревьев предсказала 158 300, а модель 300 деревьев предсказала 160,333,33. Следовательно, больше количество деревьев, тем точнее наш результат.