Эта модель переоснащается или качество данных плохое?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Эта модель переоснащается или качество данных плохое?

Сообщение Anonymous »

Сейчас я работаю над проектом по машинному обучению. Это проблема контролируемого обучения. Моя цель - предсказать по заданным данным животного (содержание, размер, вес и т. д.) ингредиенты (энергия, витамины и т. д.). Сначала я очистил данные и закодировал категориальные функции с помощью LabelEncoding. Я выбираю случайный лес в качестве алгоритма, потому что читал, что деревья хороши для смешанных данных (категориальных и непрерывных). Итак, я обучил модель нескольким параметрам и заметил, что получаю отличные результаты обучения, но очень плохие результаты тестов. На мой взгляд, это указывает на переоснащение. Модель изучает шум. Я знаю, что у меня есть два варианта: больше данных и уменьшение сложности модели. Но я попробовал PCA, удалил некоторые функции, изменил гиперпараметр (max_length на 15). Но ни одно из этих действий не помогло. Я уменьшил max_глубину, но затем получил более высокую ошибку обучения, но по-прежнему огромную ошибку теста.
Так в чем же может быть проблема? Эта модель не подходит или данные слишком зашумлены?

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

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.neural_network import MLPRegressor
from sklearn.decomposition import KernelPCA

param_grid = {
'n_estimators': [i for i in range(50, 500, 50)],
'max_depth': [i for i in range(5, 20, 5)],
}

estimator = RandomForestRegressor()
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.1, random_state=52)
X_train,scalerX = normalize(X_train)
Y_train,scalerY = normalize(Y_train)
X_test = scalerX.transform(X_test)
Y_test = scalerY.transform(Y_test)

gridModel = GridSearchCV(estimator=estimator,param_grid=param_grid,n_jobs=4,cv=5,scoring='neg_mean_squared_error')
gridModel.fit(X_train,Y_train)

print(gridModel.best_params_)
best_params: {'max_length': 15, 'n_estimators': 150
при изменении сетки на [i для i в диапазоне (5, 50, 5)], затем best_params: {'max_length': 30, 'n_estimators': 50

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

y_pred_test = gridModel.predict(X_test)
test_r2_score = r2_score(y_pred=y_pred_test,y_true=Y_test)

y_pred_train = gridModel.predict(X_train)
train_r2_score = r2_score(y_pred=y_pred_train,y_true=Y_train)

print("Result Test:",test_r2_score)
print("Result Train:",train_r2_score)
{'max_length': 15, 'n_estimators': 150
{'max_length': 15, 'n_estimators': 150
Результат теста: -2,952394644421328e+31
Последовательность результатов: 0,8043381537451035
{' max_глубина': 30, 'n_estimators': 50.Результат теста: -7.37835882483847e+30
Последовательность результатов: 0,9286384515560636

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

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

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

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

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

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

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