Регрессия Лассо – это полезный метод выбора переменных и регуляризации в линейной регрессии. В этом руководстве мы рассмотрим пример выполнения лассо-регрессии для набора данных «carbig», доступного в MATLAB. Предоставленный код загрузит набор данных, предварительно обработает данные, выполнит лассо-регрессию, проложит путь решения и отобразит полученные коэффициенты.

Лассо-регрессия

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

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



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

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

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



Код MATLAB для регрессии лассо

Вот пример кода MATLAB, который демонстрирует, как выполнить регрессию лассо для набора данных с помощью встроенных функций MATLAB:

% Load the dataset
load carbig

Эта строка загружает набор данных с именем «carbig» в MATLAB. Предполагается, что набор данных «carbig» является уже существующим набором данных в среде MATLAB.

% Define the predictor variables (features) and the response variable
X = [MPG Horsepower Weight];  % Choose three predictor variables (you can modify this)
y = Acceleration;            % Response variable

Здесь переменные-предикторы (функции) определяются с использованием трех столбцов из набора данных «carbig», а именно «миль на галлон», «лошадиная сила» и «вес». Эти переменные присваиваются переменной X. Переменная отклика «Ускорение» присваивается переменной y.

% Remove rows with NaN values
nan_rows = any(isnan(X), 2);
X = X(~nan_rows, :);
y = y(~nan_rows);

В этом разделе удаляются строки из переменных-предикторов X и переменной ответа y, которые содержат значения NaN (Not-a-Number). Он проверяет значения NaN в X с помощью функции isnan, а any(isnan(X), 2) возвращает логический вектор, указывающий, какие строки имеют значения NaN. Затем логический вектор используется для выбора строк без значений NaN как для X, так и для y.

% Preprocess the data (if necessary)
% Here, we standardize the predictor variables by subtracting the mean and dividing by the standard deviation
X = zscore(X);

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

% Perform lasso regression
[B, FitInfo] = lasso(X, y, 'Alpha', 1);

Эта строка выполняет регрессию лассо с использованием функции lasso. Он принимает переменные-предикторы X и переменную ответа y в качестве входных данных. Аргумент 'Alpha', 1 указывает, что следует использовать регрессию лассо (альфа-значение равно 1). Функция возвращает оценочные коэффициенты (B) и дополнительную информацию о подгонке (FitInfo).

% Plot the lasso solution path
lassoPlot(B, FitInfo, 'PlotType', 'Lambda', 'XScale', 'log');
xlabel('Log(\lambda)');
ylabel('Standardized Coefficients');
title('Lasso Solution Path');

В этом разделе создается график (показан ниже) пути решения лассо с использованием функции lassoPlot. Он визуализирует стандартизированные коэффициенты (B) в сравнении с журналом значений лямбда из структуры FitInfo. Тип графика указывается как «Лямбда», а ось X масштабируется логарифмически.



% Find the optimal lambda (lambda with the minimum mean squared error)
mseValues = FitInfo.MSE;
[~, idxLambdaMinMSE] = min(mseValues);
lambdaMinMSE = FitInfo.Lambda(idxLambdaMinMSE);

Эта часть определяет оптимальное значение лямбды, находя лямбду с минимальной среднеквадратичной ошибкой (MSE) из структуры FitInfo. Значения среднеквадратичной ошибки извлекаются из поля MSE и сохраняются в переменной mseValues. Затем функция min используется для нахождения минимального значения MSE и соответствующего ему индекса (idxLambdaMinMSE). Наконец, оптимальное значение лямбда получается путем доступа к значению лямбда по индексу idxLambdaMinMSE из структуры FitInfo и присвоения его переменной lambdaMinMSE.

% Retrieve the coefficients corresponding to the optimal lambda
coefficients = B(:, idxLambdaMinMSE);
intercept = FitInfo.Intercept(idxLambdaMinMSE);

В этом разделе извлекаются коэффициенты, соответствующие оптимальному значению лямбда. Коэффициенты извлекаются из матрицы B с использованием индекса idxLambdaMinMSE, который представляет выбранное значение лямбда с минимальной MSE. Значение перехвата также получается из поля Intercept в структуре FitInfo по соответствующему индексу.

% Display the coefficients
disp('Intercept:');
disp(intercept);
disp('Coefficients:');
disp(coefficients);

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

Этот код обеспечивает базовый рабочий процесс для выполнения лассо-регрессии для набора данных «carbig» в MATLAB, включая загрузку данных, предварительную обработку, подбор модели, визуализацию и отображение полученных коэффициентов.



Заключение

В заключение, это руководство продемонстрировало процесс выполнения лассо-регрессии с использованием MATLAB. Предоставленный код продемонстрировал шаги, связанные с загрузкой набора данных «carbig», определением предиктора и переменных ответа, предварительной обработкой данных, подгонкой модели регрессии лассо, построением пути решения и получением коэффициентов.

Лассо-регрессия — ценный метод для выбора признаков и регуляризации в линейной регрессии. Ограничивая абсолютные значения коэффициентов, лассо-регрессия поощряет разреженность и может эффективно обрабатывать многомерные наборы данных. Код, представленный в этом руководстве, служит отправной точкой для реализации лассо-регрессии в MATLAB и может быть адаптирован для других наборов данных и сценариев.

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



Дополнительная литература по регрессиям с использованием MATLAB

Вот несколько связанных руководств по различным регрессионным анализам с использованием MATLAB: