📌 Как с помощью линейной модели понять какие фичи можно сразу откинуть ?



💬 Спрашивают в 14% собеседований



В линейных моделях можно использовать несколько методов для определения значимости признаков (фичей) и для того, чтобы понять, какие из них можно исключить из модели. Наиболее распространенные подходы:



1️⃣ Коэффициенты модели



В линейных моделях коэффициенты (веса) показывают, насколько сильно каждый признак влияет на предсказание. Признаки с малыми или нулевыми коэффициентами могут указывать на низкую значимость.

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)




2️⃣ Регуляризация (Lasso)



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

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)




3️⃣ Анализ значимости признаков с использованием p-значений



В статистической линейной регрессии значимость признаков можно оценивать с помощью 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())




4️⃣ Выбор признаков на основе значимости (Feature Selection)



Существует множество алгоритмов для автоматического выбора признаков, таких как метод рекурсивного исключения признаков (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_}')




Для определения, какие признаки можно исключить из линейной модели, можно использовать:



1️⃣ Коэффициенты модели: Признаки с малыми или нулевыми коэффициентами могут быть незначимыми.



2️⃣ Регуляризацию (Lasso): Lasso-регрессия может занулить коэффициенты незначимых признаков.



3️⃣ Анализ значимости признаков (p-значения): Признаки с высокими p-значениями могут быть незначимыми.



4️⃣ Методы выбора признаков (RFE, RandomForest): Автоматические методы для отбора значимых признаков.



Эти методы помогают упростить модель, улучшить её интерпретируемость и потенциально повысить производительность.



🔥 ТОП ВОПРОСОВ С СОБЕСОВ



🔒 База собесов | 🔒 База тестовых