-
R을 이용한 머신러닝 - 1 (선형 회귀분석)Programming & Machine Learning/R X 머신러닝 2017. 7. 11. 00:22
R을 이용한 머신러닝 -1 (회귀분석 기초)
1. 선형 회귀
1.1 단순 선형 회귀
- 회귀분석은 독립변수와 종속변수간의 관계를 모델링하는 기법을 말한다. - 그 중에서 선형회귀는 변수간의 관계가 선형적 형태로 나타나는 경우이다. - 회귀를 통해 나타난 직선에서부터 멀어진, 측정치의 Y값의 차이를 오차라고 한다. - 선형회귀는 Y = a1X1 + a2X2 + ... + b 의 수식으로 나타낼 수 있다. (단순 선형 회귀는 변수가 1개) - 표본이 등분산일 경우 측정치, 오차가 직선 근처에 모여있어 예측이 상대적으로 좋지만, 이분산일 경우 측정치가 물결을 치게 되므로 선형적 예측이 좋지 않다. - 그래서 선형 회귀에서는 등분산을 가정한다. - 독립 변수간에는 독립을 가정한다 -> 다중 공선성 고려 X - 회귀계수를 추정하는 방법으로는, 대표적을 최소 제곱법을 사용한다. - 최소 제곱법이란 오차의 제곱 합이 최소인 지점을 구하는 방법이다.
1.2 다중 선형 회귀
### 다중선형회귀 n = nrow(iris) set.seed(200) ind = sample(1:n, n*0.7, replace = F) train = iris[ind,] test = iris[-ind,] model2 = lm(Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, train) summary(model2) par(mfrow = c(2, 2)) plot(model2) durbinWatsonTest(model2$residuals)
1.3 회귀 진단 : 회귀 모형에 관한 진단
# 첫번째 플롯은 잔차 플롯으로, dist의 적합값과 잔차를 그린 플롯이다. 잔차의 등분산성과 독립성을 검정하기 위한 플롯이다. # 평균을 기준으로 골고루 분산되어 있는 것이 좋은 모양 # 두번째 플롯은 정규 플롯으로, 잔차의 정규성을 검정하기 위한 플롯이다. # 세번째 플롯은 표준화 잔차 플롯으로, 잔차플롯과 비슷하다. # 네번째 플롯은 지레-잔차 플롯으로, X값과 Y값의 특이값을 찾아내는데 유용한 플롯이다. 빨간 점선이 outlier의 기준.
- 오차항의 등분산성 검정
- 잔차 그래프를 통해 등분산성을 검정한다. - 잔차 그래프의 세로축은 표준화된 잔차의 값이고, 가로축은 종속변수에 대한 수치이다. - 잔차 그래프에서 패턴 없이 수평축 0을 기준으로 대칭적으로 무작위로 흩어져 있을 경우, 등분산성을 갖는다고 판단할 수 있다.
- 오차항의 정규성 검정
- 오차항의 정규성은 잔차의 Normal Probability Plot (Q-Q plot)으로 검토할 수 있다. - 그래프의 가로축은 잔차의 정규 분포 하에서의 기대값, 세로축은 실제 잔차의 관측값이다.
- 오차항의 독립성 검정(Durbin-Watson)
- 관찰값들 사이에 상관관계를 파악하면서, 오차항의 독립성을 검증해야 한다. - 오차항들이 서로 독립이라면, 무작위로 흩어져 있고, 아니라면 패턴을 가지고 흩어져 있을것이다. - 이러한 것을 평가하는 측도로 Durbin-Watson 통계량이 있다. - 통계량이 2에 가까우면 상관관계가 없는 독립, 0에 가까우면 양의 상관관계, 4에 가까우면 음의 상관관계를 띤다는 것이다. - 다음은 독립변수 개수에 따른 더빈 왓은 통계량의 일반적인 하한과 상한의 기준이다. - 1개 1.65, 1.69 - 2개 1.63, 1.72 - 3개 1.61, 1.74 - 4개 1.59, 1.76
1.4 변수 선택
- 단계적 변수 선택
- 전진 선택법 - 변수 소거법 - 단계적 방법
- AIC(Akaike’s An Information Criterion) :
AIC는 모형을 비교하는 방법 중 하나이다. 이 계수는 모형의 통계적 적합성에 필요한 인수의 숫자를 설명해 준다. AIC 값이 적은 모형, 즉 적은 인수를 가지고 적절한 적합성을 보이는 모형이 선호된다 R의 step 함수를 통해 확인할 수 있는데, AIC가 작아지다가 더 이상 작아지지 않는 모형이 최종적으로 선택되는 모형이다.
- MSE, RMSE 비교 방법
install.packages("mixlm") library(mixlm) pred1 = predict(model2, newdata = test) pred2 = predict(model4, newdata = test) # (실제값 - 예측값 = 잔차)^2 -> 잔차제곱 mse1 = mean((test$Sepal.Length - pred1)^2) # 잔차제곱평균 rmse1 = sqrt(mse1) mse2 = mean((test$Sepal.Length - pred2)^2) rmse2 = sqrt(mse2) c(mse1, mse2, rmse1, rmse2) # 1,2 중에 값이 작은 것이 더 좋은 모델이라고 할 수 있음.
- 다중공선성 검증
# 다중공선성 : Vif 값 기준은 10 vif(model2) # 10이 넘는 값 두개가 있으므로 다중 공선성 문제 존재. # Sepal.Width Petal.Length Petal.Width # 1.26576 14.18554 13.44126 # # Petal.Length, Petal.Width은 다중 공선성에 문제가 있음.
1.5 더미 변수
회귀분석에서는 연속형 변수를 추론하게 되지만, 범주형 변수(factor)가 포함되는 경우가 많다.
이 경우, 해당 변수를 더미형 변수로 변환하여 연속형 변수처럼 만들어야 회귀분석이 가능하다.
해당 변수의 범주의 개수가 n개라면 n-1개의 더미변수를 만든다. n-1이 되는 이유는, 하나의 더미변수는 기준이 되는 값이라고 보면 된다. 일반적으로 빈도수가 가장 높은 것을 기준으로 한다.
d1 = lm(Sepal.Length~., train) summary(d1) # -> summary 결과 # Estimate Std. Error t value Pr(>|t|) #(Intercept) 1.51742 0.33942 4.471 2.08e-05 *** #Sepal.Width 0.53750 0.10749 5.001 2.48e-06 *** #Petal.Length 0.84724 0.08510 9.956 < 2e-16 *** #Petal.Width -0.39791 0.20264 -1.964 0.0524 . #Species(setosa) 0.53557 0.25435 2.106 0.0378 * #Species(versicolor) -0.13797 0.07614 -1.812 0.0730 . # 즉, 이런 식이 나오게 된다는것. Sepal.Length = 1.51742 + (Sepeal.width*0.53750 (beta) + Petal.length*0.84724 + Petal.width*-0.39791 + Species(setosa)*0.53557 + Speciss(versicolor)*-0.13797) # Species가 3개짜리 factor이면 그 중 하나를 기준으로 하고, 위 식 처럼 두개의 species 더미 변수가 생성됨. # Q : 그럼 기준이 되는 factor에 대한 변화량은 어떻게 알 수 있는가?? -> beta에 포함되어 있다. # if : predict input data가 setosa 라면, setosa는 1, versicolor는 0이 된다. # 즉, 최종 결과에 + 0.53557이 되느냐 -0.13797이 되느냐의 차이. # 기준이 되는 species에 대한 것은 알아서 처리됨.
'Programming & Machine Learning > R X 머신러닝' 카테고리의 다른 글
맥에서 R studio를 사용할때의 간단한 에러해결법 (0) 2017.07.11 R을 이용한 머신러닝 - 2 (비선형 회귀분석) (0) 2017.07.11 R을 이용한 통계분석 - 4 (집단간 차이검정과 분산분석) (0) 2017.07.07 R을 이용한 통계분석 - 3 (R을 이용한 데이터 조작 및 가설검정 방법) (0) 2017.07.05 R을 이용한 통계분석 - 2 (Textmining 에서의 데이터 전처리 & 종류별 데이터 import방법) (0) 2017.07.05 댓글