ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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에 대한 것은 알아서 처리됨.


    댓글

분노의 분석실 Y.LAB