Изменения
→Лассо-регрессия
{{main|Линейная регрессия}}
'''Линейная регрессия''' (англ. ''Linear linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.
==Логистическая регрессия==
{{main|Логистическая регрессия}}
'''Логистическая регрессия''' (англ. ''Logistic logistic regression'') {{---}} разновидность регрессии для моделирования зависимости между зависимой и независимой переменными в случае, когда зависимая прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная <tex>y</tex> в этом случае принимает значения в диапазоне от <tex>0</tex> до или <tex>1</tex>(рассматриваемое событие не произошло или произошло соответственно).
==Гребневая регрессия (ридж-регрессия)==
{{Определение
|definition =
'''Мультиколлинеарность''' ''(англ. ''multicollinearity)'' ) {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.
}}
Рассмотрим пример линейной модели: <tex>y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon</tex>.
Пусть имеет место зависимость <tex>x_1 = x_2 + x_ 3</tex>. Добавим к первому коэффициенту произвольное число <tex>a</tex>, а из двух других коэффициентов это же число вычтем.
Получаем (без случайной ошибки):
:<tex>y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3</tex>
Несмотря на относительно произвольное изменение коэффициентов модели мы получили исходную модель, то есть такая модель неидентифицируема.
===Описание===
Напомним задачу многомерной линейной регрессии:
Рассматривается линейная зависимость <tex>f(x, \beta) = \langle \beta, x \rangle</tex>.
Находим вектор <tex>\beta^*</tex>, при котором достигается минимум среднего квадрата ошибки:
Методом наименьших квадратов находим решение:
В условиях мультиколлинеарности матрица <tex>F^T F</tex> становится плохо обусловленной.
Для решения этой проблемы добавим к функционалу наложим ограничение на величину коэффициентов <tex>Q\beta</tex> регуляризационное слагаемое:<tex>||\overrightarrow{\beta}||_2^2 \leq t^2</tex>. Функционал <tex>Q<center/tex>с учетом ограничения принимает вид::<tex>Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2</tex>,</center>
где <tex>\lambda</tex> {{---}} неотрицательный параметр.
Решением в этом случае будет
Это изменение увеличивает собственные значения матрицы <tex>F^T F</tex>, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.
Диагональная матрица <tex>\lambda I_n</tex> называется '''гребнем'''.
===Примеры кода=======Пример кода для Scikit-learn==== <font color = green># Импорт импорт библиотек</font> '''from''' sklearn.datasets '''import''' make_regression
'''from''' sklearn.linear_model '''import''' Ridge
'''from''' sklearn.model_selection '''import''' train_test_split
<font color = green># разделение данных на train и test</font>
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)
ridge_regression = Ridge(alpha=0.1) <font color = green># alpha {{---}} величина регуляризации</font>
<font color = green># обучение</font>
<font color = green># вывод точности предсказания</font>
''print''(ridge_regression.score(test_X, test_y))
Точность предсказания для данного датасета и параметров:
<font color = green>>>></font> 0.8171822749108134
====Пример на языке Java====
Пример гребневой регрессии с применением <code>smile.regression.RidgeRegression</code><ref>[https://haifengl.github.io/smile/api/java/smile/regression/RidgeRegression.html/ Smile, Ridge Regression]</ref>
<code>Maven</code> зависимость:
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-core</artifactId>
<version>1.5.2</version>
</dependency>
'''import''' smile.data.NominalAttribute;
'''import''' smile.data.parser.DelimitedTextParser;
'''import''' smile.regression.RidgeRegression;
'''var''' parser = new DelimitedTextParser();
parser.setDelimiter(", ");
parser.setResponseIndex(new NominalAttribute("class"), 0);
'''var''' dataset = parser.parse("dataset.csv");
'''var''' lambda = 0.0057d;
'''var''' ridgeClf = new RidgeRegression(dataset.x(), dataset.y(), lambda);
ridgeClf.predict(testX);
==Лассо-регрессия==
===Примеры кода=======Пример кода для Scikit-learn==== <font color = green># Импорт импорт библиотек</font> '''from''' sklearn.datasets '''import''' make_regression
'''from''' sklearn.linear_model '''import''' Lasso
'''from''' sklearn.model_selection '''import''' train_test_split
<font color = green># разделение данных на train и test</font>
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)
lasso_regression = Lasso(alpha=0.1) <font color = green># alpha {{---}} величина регуляризации</font>
<font color = green># вывод точности предсказания</font>
''print''(lasso_regression.score(test_X, test_y))
Точность предсказания для данного датасета и параметров:
<font color = green>>>></font> 0.8173906804156383
====Пример на языке Java====
Пример Лассо-регрессии с применением <code>smile.regression.LASSO</code><ref>[https://haifengl.github.io/smile/api/java/smile/regression/LASSO.html/ Smile, LASSO regression]</ref>
<code>Maven</code> зависимость:
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-core</artifactId>
<version>1.5.2</version>
</dependency>
'''import''' smile.data.NominalAttribute;
'''import''' smile.data.parser.DelimitedTextParser;
'''import''' smile.regression.LASSO;
'''var''' parser = new DelimitedTextParser();
parser.setDelimiter(", ");
parser.setResponseIndex(new NominalAttribute("class"), 0);
'''var''' dataset = parser.parse("dataset.csv");
'''var''' lasso = new LASSO(dataset.x(), dataset.y(), 10);
lasso.predict(testX);
==Байесовская регрессия==
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:
:<tex>f(x, \beta) = \langle \beta, x \rangle + \varepsilon</tex>, где <tex>\varepsilon \sim N(0, \sigma^2)</tex>.
Решением этой задачи мы и будем заниматься в этом разделе.
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.<br/>Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.
Запишем правдоподобие::<tex>p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)</tex>,где <tex>p(y|x, \beta, \sigma^2)</tex> {{---}} плотность распределения значения <tex>y</tex> из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке <tex>x \beta</tex> (значение для <tex>y</tex>, предсказанное алгоритмом). Будем также предполагать, что данные независимы:<center>:<tex>p(Yy|Xx, \overrightarrow{\beta}, \sigma^2) = \prod\limits_{i=1}^n N(y_i|\overrightarrow{x_i \beta}^T \overrightarrow{x}_i, \sigma^2)</tex> Поскольку нас интересует только максимум, положим <tex>\sigma = 1</tex>::<tex>\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)</centertex>
Прологарифмируем это выражение:
:<tex>\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\
= \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\
= \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\
= \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2</tex>
==Логическая регрессия==
==См. также==
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]
[[Категория: Машинное обучение]]
[[Категория: Регрессия]]