기본 콘텐츠로 건너뛰기

[ML] 결정트리(Decision Tree) 모델

R 다항식과 다중 선형회귀

내용

회귀모형의 일반적인 사항과 단순회귀모형의 내용이 선행되어야 합니다.

다항식 회귀

독립변수의 차수를 증가시켜 회귀모델을 생성할 수 있습니다.

dataset "women" 30~39세의 여성 15명의 신장과 체중에 대한 자료입니다. 이 자료에서 신장을 설명변수로 하여 체중을 예측합니다.

head(women, 3)
  height weight
1     58    115
2     59    117
3     60    120
 fit2 <- lm(weight ~ height + I(height^2), data=women)

위 식은 모델 fit에 height의 제곱 항(I(height^2))을 추가한 것입니다. I() 함수는 괄호 안의 수식을 변형없이 실행합니다.

summary(fit2)
Call:
lm(formula = weight ~ height + I(height^2), data = women)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.50941 -0.29611 -0.00941  0.28615  0.59706 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 261.87818   25.19677  10.393 2.36e-07 ***
height       -7.34832    0.77769  -9.449 6.58e-07 ***
I(height^2)   0.08306    0.00598  13.891 9.32e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3841 on 12 degrees of freedom
Multiple R-squared:  0.9995,	Adjusted R-squared:  0.9994 
F-statistic: 1.139e+04 on 2 and 12 DF,  p-value: < 2.2e-16

위 결과와 같이 생성된 모델은 다음과 같습니다.

Weightpred = 261.88 - 7.35Height + 0.083Height2

두 계수의 유의확률이 모두 0.0001보다 작은 수준이므로 "reg.coeff.=0"이라는귀무가설을 기각 할 수 있습니다. 또한 결정계수는 99.9%로 위의 단순 회귀보다 증가되었음을 알 수 있습니다. 이 결과는 다음 그림으로 나타낼 수 있습니다.

library(latex2exp)
plot(women$height,women$weight, xlab="Height", ylab="Weight")
lines(women$height, fitted(fit2))
text(60, 160,TeX("$w(h)=b_0+h+h^2$"))

latex2exp에서 분수는 TeX("$//frac{}{}$")과 같이 '/'가 아닌 '//'가 필요.

선형

  • f(x+y)=f(x)+f(y)
  • f(αx)=αf(x)

위 다항 모형은 위의 두 조건을 만족하므로 곡선의 형태를 보이지만 선형모형입니다.

비선형은 다음과 같은 형태를 가집니다.

$$Y_i=\hat{\beta}_0+\hat{\beta}_1e^{\frac{x}{\beta_2}}$$

이러한 형태의 비선형 모델은 nls()함수를 사용하여 작성합니다.

3차항을 가진 다항모형을 작성해봅니다. 이 이상의 차수를 가진 선형모형의 사용은 일반적이지 않습니다.

fit3<-lm(weight~height+I(height^2)+I(height^3), data=women)
summary(fit3)
Call:
lm(formula = weight ~ height + I(height^2) + I(height^3), data = women)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.40677 -0.17391  0.03091  0.12051  0.42191 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)   
(Intercept) -8.967e+02  2.946e+02  -3.044  0.01116 * 
height       4.641e+01  1.366e+01   3.399  0.00594 **
I(height^2) -7.462e-01  2.105e-01  -3.544  0.00460 **
I(height^3)  4.253e-03  1.079e-03   3.940  0.00231 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2583 on 11 degrees of freedom
Multiple R-squared:  0.9998,	Adjusted R-squared:  0.9997 
F-statistic: 1.679e+04 on 3 and 11 DF,  p-value: < 2.2e-16

위 결과 역시 모든 계수들이 적합한 것으로 간주할 수 있으며 결정계수와 F 검정 결과 역시 이 모델이 적합함을 나타내고 있습니다. 다음 그림은 이 모델에 의한 결과를 시각화합니다.

plot(women$height, women$weight, xlab="h", ylab="w")
lines(women$height, fitted(fit3))
text(60, 160, TeX("$w(h)=b_0+h+h^2+h^3$"))

car 패키지scatterplot(formula, data, ...)함수는 이변량의 관계를 나타내는 그래프를 작성하는데 간단하고 편리한 방법을 제공합니다. 이 함수의 인수들 중에 박스플롯을 작성하는 boxplot, 선형회귀선의 regLine, Loess를 제공하는 smooth의 기본값은 TRUE 입니다. loess는 국소회귀를 나타내는 것으로 근접한 데이터들에서만 선형을 이루기 때문에 전체적으로 smooth한 곡선의 형태로 나타납니다.

library(car)
scatterplot(weight~height, data=women, xlab='h', ylab='w')

다중 선형회귀(Multiple linear regression)

예측 변수가 두 개 이상인 경우 단순 선형 회귀가 다중 선형 회귀가 되고 분석이 더 복잡해집니다. 기술적으로 다항식 회귀는 다중 회귀의 특수한 경우입니다. 2차 회귀에는 2개의 예측 변수(X 및 X2 )가 있고 3차 회귀에는 3개의 예측 변수(X, X2 및 X3 )가 있습니다.

state.x77 데이터 세트의 일부 변수들을 사용하여 다중회귀 모델을 구현합니다. 이 데이터 세트는 행렬 형태이므로 lm() 함수에 적용하기 위해서는 데이터 프레임으로 전환이 필요합니다.

class(state.x77)
[1] "matrix" "array"
state<-as.data.frame(state.x77[,c('Murder', 'Population', 'Illiteracy', 'Income', 'Frost')])
class(state)
[1] "data.frame"

각 변수간의 상관성은 회귀모델 구축에 유익한 정보를 제공합니다. 이 결과를 시각적으로 나타내기 위해 car 패키지scatterplotMatrix()를 사용합니다.

round(cor(state),2)
           Murder Population Illiteracy Income Frost
Murder         1.00       0.34       0.70  -0.23 -0.54
Population     0.34       1.00       0.11   0.21 -0.33
Illiteracy         0.70       0.11       1.00  -0.44 -0.67
Income         -0.23       0.21      -0.44   1.00  0.23
Frost             -0.54      -0.33      -0.67   0.23  1.00
library(car)
scatterplotMatrix(state)

scatterplotMatrix() 함수는 주대각 외의 그래프에서 다른 변수들 간의 산점도와 국소회귀(loess)선과 선형회귀선을 나타냅니다. 대각선에 위치하는 그래프는 각 변수에 대한 밀도 및 러그 플롯이 포함됩니다. 살인율이 이중 모드(bimodal)일 수 있고 각각의 예측 변수가 어느 정도 편향되어 있음을 알 수 있습니다. Murder은 Population과 Illiteracy과 함께 증가하고 Income이 높아지고 Frost가 내리면 감소합니다. 동시에 추운 주일수록 Illeratcy가 낮고 Population이 많으며 Income이 높습니다.

다음으로 lm()함수를 적용하여 회귀모형을 구축합니다.

fit<-lm(Murder~Population+Illiteracy+Income+Frost, data=state)
summary(fit)
Call:
lm(formula = Murder ~ Population + Illiteracy + Income + Frost, 
    data = state)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.7960 -1.6495 -0.0811  1.4815  7.6210 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 1.235e+00  3.866e+00   0.319   0.7510    
Population  2.237e-04  9.052e-05   2.471   0.0173 *  
Illiteracy  4.143e+00  8.744e-01   4.738 2.19e-05 ***
Income      6.442e-05  6.837e-04   0.094   0.9253    
Frost       5.813e-04  1.005e-02   0.058   0.9541    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.535 on 45 degrees of freedom
Multiple R-squared:  0.567,	Adjusted R-squared:  0.5285 
F-statistic: 14.73 on 4 and 45 DF,  p-value: 9.133e-08

위 결과에서 각 회귀계수에 t-검정은 다른 변수들을 제어한 상태에서 이루어지는 것입니다. 예를들어 위의 Iliteracy의 경우 다른 변수들을 제어한 상태에서 결과이며 다른 변수의 영향이 일정하다고 가정할 경우 1% 증가에 Murder는 4.14% 증가함을 나타내는 것입니다. 이 계수에 대한 유의확률은 매우 낮은 상태로 이 계수가 0이라는 귀무가설을 기각할 수 있습니다. 그러나 다른 변수에 대한 계수는 귀무가설을 기각할 수준이 아니므로 이 모델에서 영향을 주지 못합니다. 그러나 F-검정의 결과는 여러 독립변수들에 의해 Murder를 설명하는 다중 모델이 통계적으로 유의하며 그 설명력은 약 57%정도 임을 나타냅니다.

교호작용을 가진 다중선형회귀

선형모형에 변수들 간의 상호작용에 대한 항목을 첨가할 수 있습니다. mtcars 데이터 셋에 mpg에 대한 wt와 hp의 회귀모형을 구축합니다. 이 모형에는 두 예측변수의 상호작용항을 첨가시킵니다.

fit_cars<-lm(mpg~hp+wt+hp:wt, data=mtcars)
summary(fit_cars)
Call:
lm(formula = mpg ~ hp + wt + hp:wt, data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0632 -1.6491 -0.7362  1.4211  4.5513 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 49.80842    3.60516  13.816 5.01e-14 ***
hp          -0.12010    0.02470  -4.863 4.04e-05 ***
wt          -8.21662    1.26971  -6.471 5.20e-07 ***
hp:wt        0.02785    0.00742   3.753 0.000811 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.153 on 28 degrees of freedom
Multiple R-squared:  0.8848,	Adjusted R-squared:  0.8724 
F-statistic: 71.66 on 3 and 28 DF,  p-value: 2.981e-13

위 결과에 의하면 hp와 wt사이의 교호작용 역시 유의한 효과를 나타냅니다. 이것은 hp-mpg의 관계가 wt의 수준에 의존됨을 나타냅니다. 다른 예측변수에도 같습니다. 이러한 관계는 effects 패키지effect() 함수로 시각화 할 수 있습니다.

effect(term, mod, vcov.=vcov, xlevels, ...)
term: 교호작용의 항
mod: 모델
vcov.: 모델의 변수들에 대한 공분산행렬
xlevels: x, y축에 대해 영향을 주는 3의 변수에 대한 레벨로서 list형식
plot(effect("hp:wt", fit, vcov.=vcov(fit_cars),
              list(wt=c(2.5, 4, 5.2))),multiline=TRUE)

이 그래프에서 wt의 가 증가함에 따라 hp, mpg가 감소하는 것을 나타냅니다. 다른 경우에 비해 wt=4의 경우는 hp의 증가에 효과가 매우 작습니다.

추정치의 시각화

jtools 패키지effect_plot()함수를 사용하여 각각의 예측변수와 추정치에 대해 신뢰구간, 관측치와의 관계 등을 시각적으로 나타낼 수 있습니다.

위 모형 fit의 추정치과 예측변수 Illteracy에 대해 작성해보면 다음과 같습니다.

effect_plot(fit, pred=Illiteracy)

위 그래프에 예측변수의 각 값에 대응하는 추정치의 신뢰구간을 작성합니다.

effect_plot(fit, pred=Illiteracy, interval=TRUE)

위 그림에 대해 한 축에 대한 데이터의 밀집도를 나타내는 러그플롯을 추정치에 대해 생성합니다.

effect_plot(fit, pred=Illiteracy, interval=TRUE, rug=TRUE)

모형이 관찰치와 관계된 정도를 나타내기 위해 예측변수의 관찰치를 산점도로 나타냅니다.

effect_plot(fit, pred=Illiteracy, interval=TRUE, plot.points=TRUE)

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같

[matplotlib] 히스토그램(Histogram)

히스토그램(Histogram) 히스토그램은 확률분포의 그래픽적인 표현이며 막대그래프의 종류입니다. 이 그래프가 확률분포와 관계가 있으므로 통계적 요소를 나타내기 위해 많이 사용됩니다. plt.hist(X, bins=10)함수를 사용합니다. x=np.random.randn(1000) plt.hist(x, 10) plt.show() 위 그래프의 y축은 각 구간에 해당하는 갯수이다. 빈도수 대신 확률밀도를 나타내기 위해서는 위 함수의 매개변수 normed=True로 조정하여 나타낼 수 있다. 또한 매개변수 bins의 인수를 숫자로 전달할 수 있지만 리스트 객체로 지정할 수 있다. 막대그래프의 경우와 마찬가지로 각 막대의 폭은 매개변수 width에 의해 조정된다. y=np.linspace(min(x)-1, max(x)+1, 10) y array([-4.48810153, -3.54351935, -2.59893717, -1.65435499, -0.70977282, 0.23480936, 1.17939154, 2.12397372, 3.0685559 , 4.01313807]) plt.hist(x, y, normed=True) plt.show()

R 미분과 적분

내용 expression 미분 2차 미분 mosaic를 사용한 미분 적분 미분과 적분 R에서의 미분과 적분 함수는 expression()함수에 의해 생성된 표현식을 대상으로 합니다. expression expression(문자, 또는 식) 이 표현식의 평가는 eval() 함수에 의해 실행됩니다. > ex1<-expression(1+0:9) > ex1 expression(1 + 0:9) > eval(ex1) [1] 1 2 3 4 5 6 7 8 9 10 > ex2<-expression(u, 2, u+0:9) > ex2 expression(u, 2, u + 0:9) > ex2[1] expression(u) > ex2[2] expression(2) > ex2[3] expression(u + 0:9) > u<-0.9 > eval(ex2[3]) [1] 0.9 1.9 2.9 3.9 4.9 5.9 6.9 7.9 8.9 9.9 미분 D(표현식, 미분 변수) 함수로 미분을 실행합니다. 이 함수의 표현식은 expression() 함수로 생성된 객체이며 미분 변수는 다음 식의 분모의 변수를 의미합니다. $$\frac{d}{d \text{변수}}\text{표현식}$$ 이 함수는 어떤 함수의 미분의 결과를 표현식으로 반환합니다. > D(expression(2*x^3), "x") 2 * (3 * x^2) > eq<-expression(log(x)) > eq expression(log(x)) > D(eq, "x") 1/x > eq2<-expression(a/(1+b*exp(-d*x))); eq2 expression(a/(1 + b * exp(-d * x))) > D(eq2, "x") a * (b * (exp(-d * x) * d))/(1 + b