Вопрос или проблема
У меня есть набор данных, содержащий признаки и целевую переменную, все из которых являются числовыми значениями. Я хотел бы понять, какие переменные и каким образом влияют на целевую переменную, если вообще влияют, и подумал, что для этого подойдет модель множественной линейной регрессии. Однако я получаю очень плохие результаты. Какая модель лучше подходит для этой задачи?
Насколько я знаю, для этой цели часто используется Lasso. Она предоставляет коэффициенты для признаков, которые можно сравнить с помощью гистограммы.
Вот пример кода из DataCamp (курс Supervised Learning with scikit-learn), который дает пример этого:
from sklearn.linear_model import Lasso
X = diabetes_df.drop("glucose", axis=1).values
y = diabetes_df["glucose"].values
names = diabetes_df.drop("glucose", axis=1).columns
lasso = Lasso(alpha=0.1)
lasso_coef = lasso.fit(X, y).coef_
plt.bar(names, lasso_coef)
plt.xticks(rotation=45)
plt.show()
Но, конечно, у Lasso есть свои преимущества и недостатки. Подойдут ли они вам, зависит от набора данных и анализа, который вы хотите провести. Другая широко используемая методология – это пошаговая регрессия, и, как оказывается, ведутся дискуссии, использовать Lasso или пошаговую регрессию. Вы также можете ознакомиться с обсуждениями преимуществ и недостатков обоих методов здесь и здесь.
Также здесь и здесь есть интересные статьи, где сравниваются различные методы регрессии для отбора признаков.
Надеюсь, это поможет!
Ответ или решение
Теория
Определение значимости признаков для целевой переменной является одной из ключевых задач в анализе данных и построении моделей машинного обучения. Такая значимость помогает понять, какие именно факторы оказывают влияние на результаты, оптимизировать модель и улучшить её интерпретируемость. Для этого используются различные методы, которые можно условно подразделить на две большие группы: линейные модели и методы на основе деревьев.
Линейные модели, такие как множественная линейная регрессия, очевидно применимы, когда вы предполагаете линейную зависимость между признаками и целевой переменной. Они хорошо интерпретируются, но не всегда работают, когда данные содержат нелинейные зависимости или ошибки не нормально распределены.
С другой стороны, регуляризация, такие как Lasso (Least Absolute Shrinkage and Selection Operator), может быть более подходящей, когда у вас много признаков или когда вы подозреваете, что только часть из них на самом деле значима. Lasso помогает уменьшить переобучение, вводя штраф для увеличения коэффициентов, в результате чего некоторые становятся нулями, что эффективно исключает их из модели.
Пример
Рассмотрим следующую реализацию Lasso, которая демонстрирует его применение на примере диабетической базы данных. Здесь мы используем Scikit-learn, популярную библиотеку для машинного обучения на Python:
from sklearn.linear_model import Lasso
import matplotlib.pyplot as plt
# Предположим, у нас есть DataFrame с названием: diabetes_df
X = diabetes_df.drop("glucose", axis=1).values
y = diabetes_df["glucose"].values
# Названия признаков
names = diabetes_df.drop("glucose", axis=1).columns
# Настройка модели Lasso
lasso = Lasso(alpha=0.1)
lasso_coef = lasso.fit(X, y).coef_
# Построение бар-чарта
plt.bar(names, lasso_coef)
plt.xticks(rotation=45)
plt.title("Важность признаков в модели Lasso")
plt.show()
Этот код определяет значимость каждого признака и визуализирует коэффициенты, полученные методом Lasso. Визуализация позволяет сразу увидеть, какие признаки имеют наибольшее влияние на целевую переменную.
Применение
Как было упомянуто, использование метода Lasso имеет свои преимущества и ограничения. К преимуществам можно отнести простоту использования, высокую интерпретируемость результатов и снижение риска переобучения. Однако такие модели, как Lasso, могут "выбрасывать" полезные признаки, если они коррелируют с другими.
Альтернативой могут стать методы на основе деревьев решений, включая случайные леса и градиентный бустинг. Эти методы могут обнаруживать и моделировать нелинейные взаимодействия между признаками и целевой переменной. Более того, один из их главных плюсов заключается в способности вычислять важность признаков без предположений о линейности.
Рекомендуемые подходы
-
Lasso и Ridge: Если вам нужно получить более интерпретируемую модель, Lasso и Ridge остаются отличным выбором для таких задач. Попробуйте варьировать параметр регуляризации для оптимизации модели.
-
Методы на основе деревьев:
- Случайные леса: Эти алгоритмы хорошо работают с большими объемами данных и не требуют нормализации признаков. Они также предлагают реализованную в Scikit-learn функцию
feature_importances_
, которая выдает значимость каждого признака. - Градиентный бустинг: Акцентируется на более точном моделировании сложных зависимостей и может обеспечить более высокую точность моделирования в ущерб интерпретируемости.
- Случайные леса: Эти алгоритмы хорошо работают с большими объемами данных и не требуют нормализации признаков. Они также предлагают реализованную в Scikit-learn функцию
-
Комбинированные методы: Используйте комбинации методов для улучшения интерпретируемости и точности моделей. Например, сначала определите значимость признаков с методом Lasso, а затем используйте отобранные признаки в более сложной модели на основе деревьев.
-
Кросс-валидация: Перед тем как устремляться к выбору определенной модели, всегда важно использовать кросс-валидацию для оценки её качества и обоснованности выбора.
Заключая, подчеркнем, что окончательный выбор метода во многом зависит от специфики ваших данных, наличия линейных или нелинейных зависимостей и требований к интерпретируемости модели. Рекомендуется провести несколько экспериментов с разными подходами, чтобы определить, какой из них работает лучше всего для вашей задачи.