В линейных моделях можно использовать несколько методов для определения значимости признаков (фичей) и для того, чтобы понять, какие из них можно исключить из модели. Наиболее распространенные подходы:
В линейных моделях коэффициенты (веса) показывают, насколько сильно каждый признак влияет на предсказание. Признаки с малыми или нулевыми коэффициентами могут указывать на низкую значимость.
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# Пример данных
data = pd.DataFrame({
'feature1': np.random.rand(100),
'feature2': np.random.rand(100),
'feature3': np.random.rand(100),
'target': np.random.rand(100) * 100
})
# Разделение данных
X = data[['feature1', 'feature2', 'feature3']]
y = data['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Обучение модели линейной регрессии
model = LinearRegression()
model.fit(X_train, y_train)
# Коэффициенты модели
coefficients = pd.DataFrame({'Feature': X.columns, 'Coefficient': model.coef_})
print(coefficients)
Добавляет штраф за абсолютное значение коэффициентов, что может привести к занулению некоторых из них. Это позволяет автоматически отбирать признаки.
from sklearn.linear_model import Lasso
# Обучение модели Lasso-регрессии
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
# Коэффициенты модели Lasso
coefficients_lasso = pd.DataFrame({'Feature': X.columns, 'Coefficient': lasso.coef_})
print(coefficients_lasso)
В статистической линейной регрессии значимость признаков можно оценивать с помощью t-статистики и соответствующих p-значений. Признаки с высокими p-значениями могут считаться незначимыми.
import statsmodels.api as sm
# Добавление константы для модели (intercept)
X_train_sm = sm.add_constant(X_train)
# Обучение модели с использованием statsmodels
model_sm = sm.OLS(y_train, X_train_sm).fit()
# Получение сводки модели
print(model_sm.summary())
Существует множество алгоритмов для автоматического выбора признаков, таких как метод рекурсивного исключения признаков (RFE) и использование модели RandomForest для оценки важности признаков.
from sklearn.feature_selection import RFE
# Создание модели для RFE
model_rfe = LinearRegression()
# RFE с 2 признаками
rfe = RFE(model_rfe, n_features_to_select=2)
rfe = rfe.fit(X_train, y_train)
# Поддерживаемые признаки
print(f'Поддерживаемые признаки: {rfe.support_}')
print(f'Ранжирование признаков: {rfe.ranking_}')
Для определения, какие признаки можно исключить из линейной модели, можно использовать:
Эти методы помогают упростить модель, улучшить её интерпретируемость и потенциально повысить производительность.