Я пытаюсь построить простую модель линейной регрессии с помощью RFE, используя sklearn. Я получил 49 выбранных функций. Когда я проверил коэффициенты, я обнаружил, что некоторые из них очень большие, а другие - нули. Данные представляют собой временные ряды спроса на энергию, и некоторые функции, которые должны влиять на прогнозы, получают нулевые коэффициенты, как показано на графиках. Ценю вашу помощь.
Вот код RFECV:
regr_cv = RFECV(estimator=regr,
cv=tscv,
scoring='neg_mean_squared_error',
verbose=2,
n_jobs=-1)
и результат подгонки
Pipeline(memory=None, steps=[('onehot', OneHotEncoder(categorical_features=[2, 3, 4], dtype=<class 'numpy.float64'>, handle_unknown='error', n_values='auto', sparse=False)), ('rfecv', RFECV(cv=TimeSeriesSplit(max_train_size=None, n_splits=3),
estimator=LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False), n_jobs=-1, scoring='neg_mean_squared_error', step=1, verbose=2))])
Результаты перекрестной проверки
cv_results = pd.DataFrame.from_dict({'cv_score':
regr_pipe.named_steps['rfecv'].grid_scores_})
cv_results['mean_squared_error'] = cv_results['cv_score']
plt.figure(figsize=(15, 5))
plt.plot(cv_results.index, cv_results['mean_squared_error'])
plt.xlabel('number of features')
plt.title('CV negative mean squared error')
plt.show()
график результатов перекрестной проверки (извините, Stackoveflow не позволяет мне добавить их сюда)
И, наконец, коэффициенты, отображаемые относительно их соответствующих характеристик
coefs = supported_features.loc[supported_features['supported'], ].copy()
coefs['coefficients'] = regr_pipe.named_steps['rfecv'].estimator_.coef_
coefs.plot.bar('feature', 'coefficients', figsize=(15, 3), legend=False)
plt.show()
характеристики по сравнению с графиком коэффициентов
Большое спасибо