Переоснащение линейных данных случайного лесаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Переоснащение линейных данных случайного леса

Сообщение Anonymous »

RF всегда переоснащается для моих линейных данных. Я попробовал оптимизацию гиперпараметров. Это общая проблема?

Код: Выделить всё

   intercept=2
subscript_numbers = ['\u2081', '\u2082', '\u2083', '\u2084', '\u2085', '\u2086']
column_names = [f'x{subscript_numbers[i]}' for i in range(6)]
coefficients = np.array([1.5, -0.5, -1.5, 1.0, 0.0, 0.0])

n_simulations = 1000
Daten = 1000
cov_matrix = np.array([
[1.0, 0.3, 0.0, 0.0, 0.0, 0.0],  # x1
[0.3, 1.0, 0.0, 0.0, 0.0, 0.0],  # x2
[0.0, 0.0, 1.0, 0.0, 0.0, 0.0],  # x3
[0.0, 0.0, 0.0, 1.0, 0.3, 0.0],  # x4
[0.0, 0.0, 0.0, 0.3, 1.0, 0.0],  # x5
[0.0, 0.0, 0.0, 0.0, 0.0, 1.0]   # x6
])

train_r2_scores = []
test_r2_scores = []

for seed in range(n_simulations):
np.random.seed(seed)
X = np.random.multivariate_normal(np.zeros(6), cov_matrix, size=Daten)
y = intercept + np.dot(X, coefficients) + np.random.randn(Daten)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=seed)

rf = RandomForestRegressor(n_estimators=100, random_state=seed, max_features=2)
rf.fit(X_train, y_train)

y_train_pred = rf.predict(X_train)
y_test_pred = rf.predict(X_test)

train_r2 = r2_score(y_train, y_train_pred)
test_r2 = r2_score(y_test, y_test_pred)

train_r2_scores.append(train_r2)
test_r2_scores.append(test_r2)

average_train_r2 = np.mean(train_r2_scores)
average_test_r2 = np.mean(test_r2_scores)

results_df = pd.DataFrame({
"Simulation": np.arange(n_simulations),
"Train R2": train_r2_scores,
"Test R2": test_r2_scores
})

print(results_df)

print(f'Average Train R2: {average_train_r2}')
print(f'Average Test R2: {average_test_r2}')`

RF всегда переоснащается для моих линейных данных. Я попробовал оптимизацию гиперпараметров.
из sklearn.model_selection import train_test_split, RandomizedSearchCV
Daten=1000

Код: Выделить всё

   cov_matrix = np.array([
[1.0, 0.0, 0.0, 0.0, 0.0, 0.0],  # x1
[0.0, 1.0, 0.0, 0.0, 0.0, 0.0],  # x2
[0.0, 0.0, 1.0, 0.0, 0.0, 0.0],  # x3
[0.0, 0.0, 0.0, 1.0, 0.0, 0.0],  # x4
[0.0, 0.0, 0.0, 0.0, 1.0, 0.0],  # x5
[0.0, 0.0, 0.0, 0.0, 0.0, 1.0]   # x6
])

param_distributions = {
'max_depth': [5, 6, 7, 8, 9, 10],
'min_samples_split': [2, 3, 4, 5, 6],
'min_samples_leaf': [2, 3, 4, 5, 6],
'max_features': [2],
'min_impurity_decrease': [0.01, 0.02]
}

np.random.seed(1)
X = np.random.multivariate_normal(np.zeros(6), cov_matrix, size=Daten)
y = intercept + np.dot(X, coefficients) + np.random.randn(Daten)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

rf = RandomForestRegressor(random_state=1)
rf_random = GridSearchCV(estimator=rf, param_grid=param_distributions, cv=3)
rf_random.fit(X_train, y_train)

best_params = rf_random.best_params_
print("Beste Hyperparameter:", best_params)

Я смоделировал набор данных с линейной зависимостью. Процесс генерации данных включает в себя определение точки пересечения и коэффициентов для шести признаков, генерацию данных признаков с использованием многомерного нормального распределения и вычисление целевой переменной с добавленным случайным шумом. Несмотря на использование GridSearchCV для оптимизации гиперпараметров, модель RF показывает высокие оценки R2 в обучающих данных, но низкие оценки R2 в тестовых данных, что указывает на переобучение.

Подробнее здесь: https://stackoverflow.com/questions/786 ... inear-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»