Я не могу увеличить мой R² выше 70% [Python]

Вопрос или проблема

Я пробовал RandomForest, LGBM, Knneighbors, Polynomial Regression в качестве алгоритмов и кросс-валидацию, разделение на обучающую и тестовую выборки и стандартное масштабирование, ничего, кажется, не дает результат выше 70%. В датафрейме есть только числовые признаки. Я не знаю, достаточно ли этого, чтобы четко обозначить проблему, но я могу прокомментировать больше деталей, если это необходимо.

Моя последняя попытка (r2: 70,94…):

df = pd.read_csv(path)
df_cleaned = df.dropna(subset=[target_column])

target_column = 'gas_consumed'
X = df.drop(columns=[target_column])
y = df[target_column]

X_train, X_test, y_train, y_test = train_test_split(X, y,random_state=122)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

regressor_campeao = lgb.LGBMRegressor()
regressor_campeao.fit(X_train, y_train, eval_metric="root_mean_squared_error")
previsao = regressor_campeao.predict(X_test)


r2_score(y_test, previsao)

Ответ или решение

Конечно, вы столкнулись с классической задачей повышения коэффициента детерминации (R^2) в модели машинного обучения. В вашем случае вы имеете дело с регрессией, где (R^2) определяется как мера того, насколько хорошо ваша модель предсказывает зависимую переменную на основе выбранных предикторов. Вы уже попробовали использовать несколько алгоритмов, таких как RandomForest, LGBM, KNeighbors и полиномиальная регрессия, а также применили методы перекрестной проверки, разбиения на обучающую и тестовую выборки и стандартизации данных. Чтобы улучшить результаты, рассмотрим несколько шагов, которые могут помочь поднять производительность вашей модели за пределы 70%.

Теория

  1. Качество данных

    • Данные являются критическим фактором успеха любой модели машинного обучения. Качество анализа напрямую зависит от полноты, точности и релевантности информации в датасете.
  2. Инженерия признаков

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

    • Хотя вы уже использовали различные алгоритмы, многие модели требуют тщательной настройки гиперпараметров. Одного и того же алгоритма, настроенного различными способами, может быть достаточно, чтобы изменить производительность.
  4. Недо- и переобучение

    • Очень важно оценить, не страдает ли ваша модель недо- или переобучением, так как это может повлиять на общее поведение модели в прогнозах.

Пример

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

Применение

Шаг 1: Анализ данных

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

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv(path)
df_cleaned = df.dropna(subset=[target_column])

# Быстрый анализ данных
print(df_cleaned.describe())
df_cleaned[target_column].hist()
plt.show()

Шаг 2: Инженерия признаков

Попробуйте добавить новые признаки, такие как полиномиальные признаки или взаимодействия. Это может быть эффективно для структуры, которая не захвачена в текущих переменных.

from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)

# Теперь используем X_poly вместо X в последующей обработке
X_train, X_test, y_train, y_test = train_test_split(X_poly, y, random_state=122)

Шаг 3: Изменение модели и гиперпараметров

Хорошо, что вы использовали LightGBM, так как это мощный инструмент. Однако, стоит поэкспериментировать с его гиперпараметрами. Примените сеточный (GridSearch) или случайный (RandomSearch) поиск для получения более эффективных параметров.

from sklearn.model_selection import GridSearchCV
import lightgbm as lgb

params = {
    'num_leaves': [31, 50],
    'learning_rate': [0.1, 0.01],
    'n_estimators': [100, 500],
}

grid = GridSearchCV(estimator=lgb.LGBMRegressor(), param_grid=params, cv=5)
grid.fit(X_train, y_train)

print(f'Лучшие параметры: {grid.best_params_}')

Шаг 4: Оценка и метрики

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

from sklearn.metrics import mean_squared_error, r2_score

previsao_train = grid.predict(X_train)
previsao_test = grid.predict(X_test)

print(f'R2 на обучающей выборке: {r2_score(y_train, previsao_train)}')
print(f'R2 на тестовой выборке: {r2_score(y_test, previsao_test)}')
print(f'RMSE на тестовой выборке: {mean_squared_error(y_test, previsao_test, squared=False)}')

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

Внедряя данные стратегии, вы существенно повысите жизнестойкость и производительность вашей модели, и вполне вероятно выйдете за 70% ограничение по метрике (R^2). Желаю удачи в вашем проекте по улучшению качества модели!

Оцените материал
Добавить комментарий

Капча загружается...