Я пытаюсь использовать случайную левую регрессию sklearn для примера игрушки. Я создал 500 равномерных случайных чисел от 1 до 100 в качестве переменных-предикторов, а затем взял их журналы и добавил гауссовский шум для формирования переменных ответа.Случайная регрессия леса сильно перечеркивает отдельные переменные данные
Я слышал, что случайные леса, как правило, хорошо работает из коробки, так что я ожидал, что разумный ищут кривой, но это то, что я получил:
Я не понимаю, почему случайный лес похоже, попадает в каждую точку данных. Из-за мешков в каждом дереве отсутствует некоторая часть данных, поэтому, когда все деревья усредняются, кажется, что кривая должна быть более сглажена, а не ударять по выбросам.
Буду признателен за любую помощь в понимании, почему эта модель настолько переделает.
Вот код, который я использовал для создания сюжета:
from sklearn.ensemble import RandomForestClassifier
import numpy as np
import matplotlib.pyplot as plt
def create_design_matrix(x_array):
return x_array.reshape((x_array.shape[0],1))
N = 1000
x_array = np.random.uniform(1, 100, N)
y_array = np.log(x_array) + np.random.normal(0, 0.5, N)
model = RandomForestClassifier(n_estimators=100)
model = model.fit(create_design_matrix(x_array), y_array)
test_x = np.linspace(1.0, 100.0, num=10000)
test_y = model.predict(create_design_matrix(test_x))
plt.plot(x_array, y_array, 'ro', linewidth=5.0)
plt.plot(test_x, test_y)
plt.show()
Спасибо!
Для регрессии следует использовать метод RandomForestRegressor. И вам нужно настроить параметры, например. 'max_depth', чтобы избежать переобучения. – yangjie
Ах, блестящий! Не могу поверить, что я случайно использовал классификатор. Использование RandomForestRegressor и установка max_depth на 5 дает разумную перспективную модель. Спасибо за помощь! – Site