Редактирование: Вариации регрессии

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 55: Строка 55:
 
Диагональная матрица <tex>\lambda I_n</tex> называется '''гребнем'''.
 
Диагональная матрица <tex>\lambda I_n</tex> называется '''гребнем'''.
  
===Примеры кода===
+
===Пример кода для Scikit-learn===
====Пример кода для Scikit-learn====
 
 
  <font color = green># импорт библиотек</font>
 
  <font color = green># импорт библиотек</font>
 
  '''from''' sklearn.datasets '''import''' make_regression
 
  '''from''' sklearn.datasets '''import''' make_regression
Строка 81: Строка 80:
 
Точность предсказания для данного датасета и параметров:
 
Точность предсказания для данного датасета и параметров:
 
  <font color = green>>>></font> 0.8171822749108134
 
  <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);
 
  
 
==Лассо-регрессия==
 
==Лассо-регрессия==
Строка 114: Строка 91:
 
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (<tex>|\beta_1| + |\beta_2| \leq t</tex>), в случае ридж-регрессии {{---}} круг (<tex>\beta_1^2 + \beta_2^2 \leq t^2</tex>). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на <tex>\beta</tex>. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.
 
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (<tex>|\beta_1| + |\beta_2| \leq t</tex>), в случае ридж-регрессии {{---}} круг (<tex>\beta_1^2 + \beta_2^2 \leq t^2</tex>). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на <tex>\beta</tex>. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.
  
===Примеры кода===
+
===Пример кода для Scikit-learn===
====Пример кода для Scikit-learn====
 
 
  <font color = green># импорт библиотек</font>
 
  <font color = green># импорт библиотек</font>
 
  '''from''' sklearn.datasets '''import''' make_regression
 
  '''from''' sklearn.datasets '''import''' make_regression
Строка 140: Строка 116:
 
Точность предсказания для данного датасета и параметров:
 
Точность предсказания для данного датасета и параметров:
 
  <font color = green>>>></font> 0.8173906804156383
 
  <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);
 
  
 
==Байесовская регрессия==
 
==Байесовская регрессия==
Строка 193: Строка 147:
 
  = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2</tex>
 
  = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2</tex>
  
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обычной линейной регрессии.
+
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.
  
 
===Пример кода для Scikit-learn===
 
===Пример кода для Scikit-learn===
Строка 241: Строка 195:
 
# Если такого дерева не существует, алгоритм завершается. Если оно все же есть, выбираем его в качестве текущего и повторяем второй шаг.
 
# Если такого дерева не существует, алгоритм завершается. Если оно все же есть, выбираем его в качестве текущего и повторяем второй шаг.
  
Этот алгоритм склонен к переобучению, а также в некоторых ситуациях может остановиться преждевременно, так и не дойдя до наилучшего дерева. Существует также алгоритм под названием '''имитация отжига''' (англ. ''simulated annealing'') который показывает лучшие результаты, чем описанный жадный поиск.
+
Этот алгоритм склонен к переобучению, а также в некоторых ситуациях может остановиться преждевременно, так и не дойдя до наилучшего дерева. Существует также алгоритм под названием '''имитация отжига''' (''simulated annealing'') который показывает лучшие результаты, чем описанный жадный поиск.
  
 
==См. также==
 
==См. также==

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблоны, используемые на этой странице: