저번 글에서는 회귀(regression)의 정의와, 그 종류 중 하나인 단순선형회귀(Simple linear regression)에 다뤘다.
2020/01/17 - [관심거리 -> 자기계발/데이터사이언스] - [통계] Simple Linear Regression(단순선형회귀) 개념과 R 실습
이번 글에서는 다항회귀(polynomial regression)와 다중선형회귀(multiple linear regression)에 대해 다루도록 하겠다.
Polynominal Regression(다항회귀)
Polynominal Regression은 model의 차수가 높아져서 선형이 아니라 곡선형의 model로 데이터를 설명하는 것이다. 당연히 직선보다는 곡선인 model이 데이터를 잘 설명할 수 있다(결정계수 값이 1에 가까워진다, model과 데이터의 오차가 줄어든다). 하지만 극단적으로 너무 차수를 높여서 모든 데이터를 지나게 한다면 overfitting(과적합)이라는 문제가 발생한다. 이 경우 Model이 우리가 학습시킨(주어진)데이터는 완벽히 설명할 수 있지만, 새로운 독립변수가 주어졌을 때에는 그에 따른 종속변수를 예측하기 힘들다. 그래서 일부러 학습시키는 데이터에 노이즈를 넣기도 한다. 이와 관련된 내용은 이후에 따로 다루도록 하겠다. 따라서 다항회귀에서 overfitting을 방지하기 위해서는 적당한 정도의 차수를 정해야한다. 그 기준은 차수를 높일 때, 높이기 전 차수와 F ratio를 비교하여 p value가 0.05 이하일 경우(통계적으로 유의미한 경우) 일때만 차수를 높이는 것이다.
Multiple Linear Regression(다중선형회귀)
Multiple Linear Regression(다중선형회귀)는 종속변수는 그대로 하나이지만 독립변수가 두 개 이상인 경우를 의미한다. 예를 들어, 아파트 집 값(종속변수)에 미치는 변수(독립변수)가 위치, 평수, 층수, 년식 등등 많은 경우이다.
Multiple Linear Regression(다중선형회귀)의 예로 Nitrogen(X1),Phosphorous(X2), 과일 생산량(Y) 데이터를 가지고 R을 이용하여 분석해보았다.
위의 식에서 X1 = Nitrogen, X2 = Phosphorous, Y = Number of fruit 이지만 코드에서는 각각 x, y, z로 설정했다.
install.packages("plot3D")
library("plot3D")
Nitrogen(x)과 Phosphorous(y)에 따른 과일 생산량(z)을 그래프로 그리고, Regression model도 plot하기 위해서 필요한 패키지를 불러온다.
fruit <- data.frame(Number_of_fruit = c(34, 17, 10, 38, 17, 55, 34, 24, 17, 2, 28, 25, 27, 4),
Nitrogen = c(1, 4, 4, 8, 3, 3, 7, 6, 1, 1, 4, 5, 9, 2),
PhosPhorous = c(5, 2, 1, 3, 1,8, 3, 1, 2, 2, 2, 3, 1, 0))
x <- fruit$Nitrogen
y <- fruit$PhosPhorous
z <- fruit$Number_of_fruit
fit2 <- lm(z ~ x + y)
위에서 말했듯이, x = Nitrogen, y = Phosphorous , z = Number of fruit로 설정했고, fit2를 x, y에 따른 z를 나타내는 regression model로 설정하였다.
grid.lines = 26
x.pred <- seq(min(x), max(x), length.out = grid.lines)
y.pred <- seq(min(y), max(y), length.out = grid.lines)
xy <- expand.grid( x = x.pred, y = y.pred)
z.pred <- matrix(predict(fit2, newdata = xy),
nrow = grid.lines, ncol = grid.lines)
fitpoints <- predict(fit2)
3d plot 그리기 전에 각 변수들의 범주를 정해준다.
scatter3D(x, y, z, pch = 18, cex = 2,
theta = 20, phi = 20, ticktype = "detailed",
xlab = "Nitrogen", ylab = "PhosPhorous", zlab = "Number of fruit",
surf = list(x = x.pred, y = y.pred, z = z.pred,
facets = NA, fit = fitpoints), main = "fruit")
마지막으로 Nitrogen(x)과 Phosphorous(y)에 따른 과일 생산량(z)을 그래프로 그리고, Regression model을 plot 한다. 그 결과는 다음과 같다.
Multicolinearity (다중공선성)
두 개 이상의 독립변수가 서로 correlated 되었을 때 Multiple Linear Regression 결과가 정확하게 나오지 않는 것을 의미한다. 예를 들어서 업무 성과에 미치는 여러 독립변수 들 중에 근무시간과 야근시간이 있다고 생각하자. 이 때 근무시간과 야근시간은 서로 상관관계가 있을 것(야근시간이 늘어나면 근무시간도 늘어날 것이므로)이기 때문에 이 둘을 동시에 독립변수로 잡고 Multiple Linear Regression을 하게되면 모델이 여러개가 나온다는 문제점이 있다. 책 평면(regression 모델)을 지지해야 하는데, 평면을 가로지르는 선 하나(두 변수가 correlated 되었으므로)로 지지하는 것이 얼마나 불안정한지를 생각해보면 이해하기 쉽다.
저번 글과 이번 글을 통해 통계학에서 다루는 Regression(회귀)을 간단하게 정리해보았다. 다음 글에서는 머신러닝에서는 회귀를 어떻게 다루는지 알아보겠다.
'자기계발 > 데이터사이언스' 카테고리의 다른 글
[머신러닝] 모델 학습 방법과 일반화 성능 (1) | 2020.02.19 |
---|---|
[머신러닝] Gradient descent (경사하강법) (0) | 2020.02.02 |
[통계] Simple Linear Regression(단순선형회귀) 개념과 R 실습 (0) | 2020.01.17 |
[머신러닝] 인공지능과 머신러닝이란, 머신러닝의 종류 (0) | 2020.01.14 |
파이썬(Python) 독학 시작하기. 독학 방법 추천. 코드카데미(무료). 점프 투 파이썬(책). (0) | 2020.01.04 |