Вы можете проверить, действительно ли вы понимаете множественную линейную регрессию.

Линейная регрессия — один из самых простых алгоритмов. Особенно, когда есть только одна непрерывная переменная объекта: y=ax+b, и она представлена ​​прямой линией. Это визуальное представление очень полезно для понимания того, что представляет собой модель.

Теперь вам интересно, как выглядит визуальное представление модели в случае нескольких переменных? Что делать, если есть несколько непрерывных переменных, а также категориальные переменные?

В этой статье я рассмотрю разные случаи с конкретным кодом R для построения графика. Прежде чем читать ответы, можно попробовать представить себе следующие случаи:

Непрерывные переменные

  • две непрерывные переменные
  • три непрерывные переменные

Категориальные переменные

  • только одна бинарная переменная
  • одна переменная с тремя категориями
  • одна переменная с n категориями
  • две бинарные переменные

Смешанные переменные

  • одна непрерывная переменная и одна бинарная переменная
  • две непрерывные переменные и одна бинарная переменная
  • одна непрерывная переменная и дискретная переменная с n категориями

Внимание к подводным камням

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

Непрерывные переменные

Хорошо известно, что для одной непрерывной переменной линейная регрессия представляет собой прямую линию. Тем не менее, это хорошая и простая отправная точка для начала программирования и конкретной визуализации.

x=runif(100,1,10)
y=2*x+rnorm(100,0,1)
data=data.frame(x=x,y=y)
fit_lm=lm(y ~ .,data = data)
ggplot(data,aes(x, y))+geom_point()+
 geom_abline(slope=fit_lm$coefficients[2],
 intercept = fit_lm$coefficients[1],
 color=”red”)

Для двух непрерывных переменных назовем их x1 и x2 с коэффициентами a1 и a2 соответственно, тогда уравнение будет таким: y = a1x1 + a2x2 + b. Поскольку всего имеется 3 непрерывных переменных (x1, x2 и y), мы должны представить трехмерное пространство: оси x1 и x2 могут представлять землю, а y — высоту. Для каждой точки земли мы можем определить высоту y. Итак, в итоге мы получаем самолет.

x1=runif(100,1,10)
x2=runif(100,1,10)
y=2*x1+3*x2+rnorm(100,0,2)
data=data.frame(x1=x1,x2=x2,y=y)
fit_lm=lm(y ~ x1 + x2,data = data)
plot3d(x=data$x1,y=data$x2,z=data$y, type = 'p')
planes3d(fit_lm$coefficients["x1"], fit_lm$coefficients["x2"], 
         -1, -fit_lm$coefficients["(Intercept)"],
         col = 'red', alpha = 0.6)

Для трех непрерывных переменных мы не сможем представить это конкретно, но можем представить: это будет пространство в четырехмерном гиперпространстве.

Категориальные переменные

Для одной бинарной переменной мы возвращаемся к нашему простому уравнению: y = ax + b. В реальном мире это может представлять, например, пол, да или нет для разных характеристик. На практике мы должны закодировать его горячим способом, и он может принимать значение 0 или 1. Затем мы можем вычислить значение y. Если х = 0, то у = b. Если х = 1, то у = а + b. Таким образом, визуальное представление составляет две точки. Мы можем легко доказать, что они являются средними значениями y для каждого значения x.

Для визуализации мы все еще можем представить прямую линию, но на практике, когда модель используется конкретно, x равен только 0 или 1.

x=c(rep(1,50),rep(0,50))
y=2*x+rnorm(100,0,1)
data=data.frame(x=x,y=y)
fit_lm=lm(y ~ .,data = data)
ggplot(data,aes(x, y))+geom_point()+
   geom_abline(slope=fit_lm$coefficients[2],
               intercept = fit_lm$coefficients[1],
               color="red")

Теперь для категориальной переменной с тремя категориями мы также можем создать фиктивные переменные, и на практике у нас будет две функции. Таким образом, мы должны использовать 3D-графику.

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

y = a1x1 + a2x2 + b

В предыдущем разделе непрерывных переменных x1 и x2 были непрерывными, здесь они двоичные.

x=as.factor(sample(c(0,1,2), replace=TRUE, size=100))
data=data.frame(model.matrix(~x))
data$y=2*data[["x1"]]+3*data[["x2"]]+rnorm(100,0,2)
fit_lm=lm(y ~ x1 + x2,data = data)
plot3d(x=data$x1,y=data$x2,z=data$y, type = 'p')
planes3d(fit_lm$coefficients["x1"], fit_lm$coefficients["x2"], 
         -1, -fit_lm$coefficients["(Intercept)"],
         col = 'red', alpha = 0.6)

Стоит отметить, что нет наблюдений для x1=1 и x2 =1, потому что x1 и x2 исходят из одной уникальной категориальной переменной, и невозможно, чтобы они оба были ИСТИННЫМИ.

Таким образом, линейная регрессия представлена ​​тремя точками в пространстве. Легко доказать, что они являются средними значениями возможной комбинации x1 и x2.

А что, если есть две двоичные переменные? Ситуация будет очень похожей, за исключением того, что будут наблюдения для x1=1 и x2 =1. Представление по-прежнему будет плоскостью, содержащей точки для каждой из 4 возможных комбинаций двоичных переменных. Вопрос, который стоит задать:

Разрезает ли плоскость 4 группы наблюдений с их средними значениями?

Ответ - нет. Докажем это сокращением.

  • Условие 1: если это средние значения, то в пространстве будет 4 точки.
  • Условие 2: все точки должны быть в плоскости, потому что у нас есть уравнение: y = a1x1 + a2x2 + b

Оба вышеперечисленных условия не могут выполняться одновременно, не всегда возможно, чтобы 4 точки пространства находились в одной плоскости. Поскольку мы знаем, что условие 2 всегда верно, условие 1 не всегда верно.

Смешанные переменные

Для одной непрерывной переменной и одной бинарной переменной мы можем представить 2 разных способа. Пусть модель будет y = a1x1 + a2x2 + b, где x1 непрерывен, а x2 категоричен.

  • Поскольку у нас есть плоскость для двух непрерывных переменных, если одна из переменных признаков является двоичной переменной, то для одного измерения в пространстве вместо возможных значений у нас есть только 0 и 1, тогда у нас есть две прямые линии в трехмерном пространстве. И вы думаете, что они должны быть параллельно? Ответ положительный, потому что они должны исходить из самолета.
x1=runif(100,1,10)
x2=sample(c(0,1), replace=TRUE, size=100)
y=2*x1+3*x2+rnorm(100,0,2)
data=data.frame(x1=x1,x2=x2,y=y)
fit_lm=lm(y ~ x1 + x2,data = data)
plot3d(x=data$x1,y=data$x2,z=data$y, type = 'p') 
planes3d(fit_lm$coefficients["x1"], fit_lm$coefficients["x2"], 
         -1, -fit_lm$coefficients["(Intercept)"],
         col = 'red', alpha = 0.6)

  • Поскольку есть две прямые линии, мы можем спроецировать их на плоскость, образованную непрерывными переменными признаков x1 и y, так что мы получим две параллельные прямые линии. Одна прямая линия будет представлять модель, когда x2=0, с наклоном a1 и точкой пересечения b; другой будет представлять модель, когда x2=1, наклон всегда будет a1, а пересечение равно a2+b.
ggplot(data,aes(x1, y,color=as.factor(x2)))+
   geom_point()+
   geom_abline(slope=fit_lm$coefficients["x1"],
               intercept = fit_lm$coefficients[1],
               color="red")+
   geom_abline(slope=fit_lm$coefficients["x1"],
               intercept = fit_lm$coefficients[2]+
                  fit_lm$coefficients[3],
               color="#06D1D5")+
   labs(color="x2")

Для одной непрерывной переменной плюс одна категориальная переменная с 3 категориями или n категориями мы не сможем представить все пространство, и мы можем представляют собой проекцию на плоскость, образованную непрерывной переменной и y. Параллельных прямых будет n.

Заключение

Теперь мы можем закончить, дав ответы на все наши вопросы:

Непрерывные переменные

  • одна непрерывная переменная: прямая линия
  • две непрерывные переменные: план
  • три непрерывные переменные: пространство

Категориальные переменные

  • только одна бинарная переменная: два балла (средние значения по категориям)
  • одна переменная с тремя категориями: три точки (средние значения по категориям) и они находятся в одной плоскости, потому что иначе нельзя
  • одна переменная с n категориями: n баллов (средние значения по категориям)
  • две бинарные переменные: 4 точки (не средние значения) и они не в одной плоскости

Смешанные переменные

  • одна непрерывная переменная и одна бинарная переменная: две параллельные прямые линии (по одной линии на категорию)
  • две непрерывные переменные и одна бинарная переменная: две параллельные плоскости
  • одна непрерывная переменная и дискретная переменная с n категориями: n параллельных прямых

Я пишу о машинном обучении, перейдите по ссылке ниже и получите полный доступ к моим статьям: https://medium.com/@angela.shi/membership

Если вы хотите реализовать линейную регрессию в Excel с нуля, вы можете прочитать эту статью: Линейная регрессия с нуля в Excel

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

Использованная литература: