Линейная регрессия — различия между версиями
Mervap (обсуждение | вклад) м (Ссылка на основную статью) |
|||
Строка 1: | Строка 1: | ||
+ | {| class="wikitable" align="center" style="color: red; background-color: black; font-size: 56px; width: 800px;" | ||
+ | |+ | ||
+ | |-align="center" | ||
+ | |'''НЕТ ВОЙНЕ''' | ||
+ | |-style="font-size: 16px;" | ||
+ | | | ||
+ | 24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. | ||
+ | |||
+ | Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. | ||
+ | |||
+ | Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. | ||
+ | |||
+ | Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. | ||
+ | |||
+ | ''Антивоенный комитет России'' | ||
+ | |-style="font-size: 16px;" | ||
+ | |Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. | ||
+ | |-style="font-size: 16px;" | ||
+ | |[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки]. | ||
+ | |} | ||
+ | |||
'''Линейная регрессия''' (англ. ''linear regression'') — метод восстановления зависимости одной (объясняемой, зависимой) переменной <tex> y </tex> от другой или нескольких других переменных (факторов, регрессоров, независимых переменных) <tex> x </tex> с линейной функцией зависимости. Данный метод позволяет предсказывать значения зависимой переменной <tex> y </tex> по значениям независимой переменной <tex> x </tex>. | '''Линейная регрессия''' (англ. ''linear regression'') — метод восстановления зависимости одной (объясняемой, зависимой) переменной <tex> y </tex> от другой или нескольких других переменных (факторов, регрессоров, независимых переменных) <tex> x </tex> с линейной функцией зависимости. Данный метод позволяет предсказывать значения зависимой переменной <tex> y </tex> по значениям независимой переменной <tex> x </tex>. | ||
Версия 08:09, 1 сентября 2022
НЕТ ВОЙНЕ |
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. Антивоенный комитет России |
Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. |
meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки. |
Линейная регрессия (англ. linear regression) — метод восстановления зависимости одной (объясняемой, зависимой) переменной
от другой или нескольких других переменных (факторов, регрессоров, независимых переменных) с линейной функцией зависимости. Данный метод позволяет предсказывать значения зависимой переменной по значениям независимой переменной .Содержание
Задача
Дано
- — числовые признаки;
- модель многомерной линейной регрессии:
,
где ; - обучающая выборка: множество из пар ;
- — объекты из множества ;
- — объекты из множества .
Матричные обозначения
Перейдем к матричным обозначениям:
,
где
- — матрица объектов-признаков, где строки соответствуют объектам а столбцы — признакам;
- — вектор ответов, или целевой вектор;
- — вектор коэффициентов.
Постановка задачи
В этих трех векторно-матричных обозначениях очень удобно расписать постановку задачи наименьших квадратов:
.
Необходимо найти вектор
при известной матрице и известном вектор-столбце .Решение
Нормальная система уравнений
Запишем необходимые условия минимума в матричном виде:
.
Отсюда следует нормальная система задачи МНК:
,
где
матрица.Мы получили систему уравнений, откуда можем выразить искомый вектор
.Решение системы
где — псевдо-обратная матрица.
Значение функционала:
где — проекционная матрица.
Проблемы
В случае мультиколлинеарности (столбцы матрицы
линейно-зависимы) нам не удастся найти обратную матрицу к (она будет вырождена).Если же столбцы матрицы
почти линейно-зависимы, то у нас возникнет масса вычислительных проблем с обращением этой матрицы.Решение МНК через сингулярное разложение
Воспользуемся понятием сингулярного разложения , которое позволяет произвольную прямоугольную матрицу представить в виде произведения трех матриц:
.
Найдем псевдо-обратную матрицу:
.
Теперь, зная псевдо-обратную матрицу, найдем решение задачи наименьших квадратов:
.
Найдем вектор, которым наша линейная модель аппроксимирует целевой вектор
.
Квадрат нормы вектора коэффициентов:
.
В 3-х из 4-х формул сингулярные числа оказались в знаменателе. Если имеются сингулярные числа приближающиеся к 0, то мы получаем проблему мультиколлинеарности. Близкие к 0 собственные значения или сингулярные числа — показатель того, что среди признаков есть почти линейно-зависимый.
Проблема мультиколлинеарности и переобучения
Если имеются сингулярные числа близкие к 0, то:
- матрица плохо обусловлена;
- решение становится неустойчивым и неинтерпретируемым, слишком большие коэффициенты разных знаков;
- возникает переобучение:
на обучении мало;
на контроле велико.
Стратегии устранения мультиколлинеарности и переобучения:
- отбор признаков, то есть выкидываем те признаки, которые могут оказаться линейно-зависимыми:
; - регуляризация (накладываем дополнительные ограничения на вектор коэффициентов):
; - преобразование признаков, чтобы в новом признаковом пространстве признаков оказалось меньше, но они хорошо восстанавливали бы исходные:
.
Примеры кода
Пример кода для Scikit-learn
import matplotlib.pyplot as plt from sklearn import datasets, linear_model # generate dataset X, y = datasets.make_regression(n_samples=1_000, n_features=1, noise=8, shuffle=True) # test and train data sizes train_size = 700 test_size = 300 # split the data into training/testing sets X_train = X[:-train_size] X_test = X[-test_size:] # split the targets into training/testing sets y_train = y[:-train_size] y_test = y[-test_size:] # create linear regression object regr = linear_model.LinearRegression() # train the model using the training sets regr.fit(X_train, y_train) # make predictions using the testing set y_pred = regr.predict(X_test) # plot outputs plt.scatter(X_test, y_test, color='red', s=5) plt.plot(X_test, y_pred, color='blue', linewidth=2) plt.xticks(()) plt.yticks(()) plt.show()
Возможный результат исполнения программы:
Пример на языке Java
Пример линейной регресии с применением weka.classifiers.functions.LinearRegression
[1]
Maven
зависимомсть:
<dependency> <groupId>nz.ac.waikato.cms.weka</groupId> <artifactId>weka-stable</artifactId> <version>3.8.0</version> </dependency>
import weka.classifiers.functions.LinearRegression; import weka.core.Instance; import weka.core.Instances;
//Load Data set var data = new Instances(new BufferedReader(new FileReader("dataset/house.arff"))); data.setClassIndex(data.numAttributes() - 1); //Build model var model = new LinearRegression(); try { model.buildClassifier(data); } catch (Exception e) { e.printStackTrace(); } //output model System.out.printf("model parameters: %s%n", model); // Now Predicting the cost var myHouse = data.lastInstance(); var price = model.classifyInstance(myHouse); System.out.printf("predicted price = %s%n", price)
Пример на языке R
# reading data data <- read.csv("input.csv", sep = ',', header = FALSE) # evaluating linear regression model model <- lm(data$x ~ data$y) # getting summary print(summary(model)) # visualizing data plot(data$y, data$x) lines(data$y, predict(fit), col = 'red')
Применение
Перечислим несколько примеров реального применения линейной регрессии:
- для предсказания скидки на продукты на основе поведения покупателей в прошлом;
- экономисты использую линейную регрессия для предсказания экономического роста страны или региона;
- застройщики при помощи данного метода могут предсказать, сколько домов он продаст в ближайшие месяцы и по какой цене;
- цены на нефть могут быть предсказаны с использованием линейной регрессии.
См. также
- Общие понятия
- Вариации регрессии
- Логистическая регрессия
- Обзор библиотек для машинного обучения на Python
- Переобучение
Источники информации
- machinelearning.ru — Многомерная линейная регрессия
- machinelearning.ru — Линейная регрессия (пример)
- Coursera — "Введение в машинное обучение", Неделя 4,
- Лекции по алгоритмам восстановления регрессии К. В. Воронцов
- Scikit-Learn — Linear Regression Example
- What are some real-world applications of "simple" linear regression?