기본 콘텐츠로 건너뛰기

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

R 회귀분석

내용

회귀분석(Regression)

회귀분석과 방법

여러 면에서 회귀 분석은 통계의 핵심입니다. 하나 이상의 예측 변수(독립 변수 또는 설명 변수라고도 함)에서 반응 변수(종속 변수, 기준 변수 또는 결과 변수라고도 함)를 예측하는 데 사용되는 방법론 집합에 대한 광범위한 용어입니다. 일반적으로 회귀분석은 반응변수와 관련된 설명변수를 식별하고, 관련된 관계의 형태를 설명하고, 설명변수로부터 반응변수를 예측하기 위한 방정식을 제공하는 데 사용할 수 있습니다. 예를 들어, 운동 생리학자는 회귀 분석을 사용하여 러닝머신에서 운동하는 동안 사람이 태울 예상 칼로리 수를 예측하는 방정식을 개발할 수 있습니다. 반응 변수는 소모된 칼로리 수(소비된 산소량에서 계산)이며 예측 변수에는 운동 시간(분), 목표 심박수에서 보낸 시간 비율, 평균 속도(mph), 나이( 년), 성별 및 체질량 지수(BMI)가 될 수 있습니다.

이론적인 관점에서 분석은 다음과 같은 질문에 답하는 데 도움이 됩니다.

  • 운동 시간과 소모된 칼로리 사이의 관계는 무엇입니까? 선형입니까 곡선입니까? 예를 들어, 운동은 특정 시점 이후에 소모된 칼로리 수에 덜 영향을 줍니까?
  • 노력(목표 심박수에서 시간의 백분율, 평균 보행 속도)은 어떻게 고려됩니까?
  • 이 관계는 젊은이와 노인, 남성과 여성, 무거움과 날씬함의 동일합니까?

실용적인 관점에서 분석은 다음과 같은 질문에 답하는 데 도움이 됩니다.

  • BMI가 28.7인 30세 남성이 평균 속도 4로 45분 동안 걸을 때 소모할 수 있는 칼로리는 얼마입니까?
  • 시간당 마일을 유지하고 목표 심박수를 80% 이내로 유지합니까?
  • 사람이 걸을 때 소모할 칼로리를 정확하게 예측하기 위해 수집해야 하는 최소 변수 수는 얼마입니까?
  • 당신의 예측은 얼마나 정확한 경향이 있습니까?

이 장에서는 회귀 모델을 피팅하고 해석하는 방법을 살펴보겠습니다. 다음으로 이러한 모델의 잠재적인 문제를 식별하는 일련의 기술과 이를 처리하는 방법을 검토합니다. 셋째, 변수 선택 문제를 살펴보겠습니다. 사용 가능한 모든 잠재적 예측 변수 중에서 최종 모델에 포함할 변수를 어떻게 결정합니까? 넷째, 일반화 가능성의 문제를 다룰 것입니다. 실제 세계에 적용할 때 모델이 얼마나 잘 작동합니까? 마지막으로 상대적 중요성의 문제를 살펴보겠습니다. 모델의 모든 예측 변수 중에서 가장 중요한 것은 무엇이며, 두 번째로 중요하고, 가장 덜 중요한 것은 무엇입니까?

다양한 회귀분석 방법
유형설명
단순회귀(Simple linear)하나의 정량적 설명변수로부터 하나의 정량적 반응변수 예측
다항식(Polynomial) 관계가 n차 다항식으로 모델링되는 하나의 양적 설명 변수에서 하나의 양적 반응 변수 예측
다중 선형(Multiple linear) 둘 이상의 설명 변수에서 양적 반응 변수 예측
다변량(Multivariate) 하나 이상의 설명 변수에서 하나 이상의 반응 변수 예측
로지스틱(Logistic)) 하나 이상의 설명 변수에서 한개의 범주형 응답 변수예측
포아송 (poisson)하나 이상의 설명 변수에서 카운트를 나타내는 응답 변수 예측
Cox 비례 위험 (proportional hazard)하나 이상의 설명 변수에서 이벤트(사망, 실패, 재발)까지의 시간 예측
시계열(Time-series)상관성이 있는 오류를 가진 시계열 모델링
비선형 (Nonlinear)모형의 형태가 비선형인 하나 이상의 설명 변수에서 한개의 정량적 반응 변수 예측
비모수적(Nonparametic) 사전에 지정되지 않은 모델의 형태가 데이터로 부터 유도됩니다. 그 모델에 의해 하나이상의 설명변수에서 한개의 정량 반응변수를 예측
강건(Robust) 영향력 있는 관찰값들의 영향에 저항하는 접근 방식을 사용하여 하나 이상의 설명 변수로부터 한개의 정량적 반응 변수 예측

Ordinary Least Square(OLS) 회귀에서 정량적 종속 변수(반응변수)는 예측 변수(설명변수, predictor)의 가중 합계에서 예측되며, 여기서 가중치는 데이터에서 추정된 매개변수입니다.

OLS 회귀

Ŷi = b̂0 + b̂1Xi1 + b̂2Xi2 + … + b̂kXik
  • i : 1 … n으로 샘플의 크기
  • Ŷi: i번째 예측된 반응변수
  • Xik: 변수 k, i번째 설명변수
  • 0: 절편(intercept)
  • i: 변수 i의 설명변수에 대한 회귀계수([Δ Y]/[Δ Xj])

회귀모델의 궁극적인 목적은 에측치롸 실측치의 차이 즉, 잔차(에러)를 최소화시키는 것입니다. 특히 모델 매개변수는 잔차곱(sum of squared residuals)을 최소화하도록 결정하는 것입니다.

$$\sum^n_{i=1} \left(Y_i-\hat{Y}_i\right)^2=\sum^n_{i=1}\epsilon^2$$

위 모델의 계수를 적절하게 해석하기 위해서는 다음의 통계적 가정이 필요합니다.

  • 정규성(Normality): 반응변수는 정규분포를 따릅니다.
  • 독립성(Independence): 반응변수들은 각각은 독립적이어야 합니다.
  • 선형성(Linearity): 반응변수는 설명변수와 선형적으로 관계됩니다.
  • 동분산성(Homoscedasticity): 반응 변수의 분산은 설명 변수의 수준에 따라 달라지지 않습니다.

위 가정들이 충족되지 않는다면 통계적인 p-값과 신뢰구간의 정확도는 감소됩니다.

R에서 선형 모형은 lm() 함수를 사용하여 작성합니다.

lm(formula, data) formular: 작성할 모델을 설명하는 식, 전형적으로 "반응변수~설명변수1+…r+설명변수k" data: dataframe
R fomular에 사용되는 기호
기호설명
~ 왼쪽의 응답 변수를 오른쪽의 설명 변수와 분리합니다.
예를 들어, x, z, w에서 y를 예측하면 "y ~ x + z + w"로 코딩됩니다.
+ 설명 변수를 분리합니다.
: 설명 변수 간의 상호 작용을 나타냅니다.
x, z 및 x와 z 사이의 상호 작용에서 y의 예측은 "y ~ x + z + x:z"로 코딩됩니다.
* 변수들 사이에 가능한 모든 상호 작용의 조합을 나타냅니다.
코드 "y ~ x * z * w"는 "y ~ x + z + w + x:z + x:w + z:w + x:z:w"로 확장됩니다.
^"^숫자"네서 숫자는 관계된 변수의 수를 나타내며
그 지정된 변수의 수까지의 가능한 모든 상호 작용을 나타냅니다.
코드 "y ~ (x + z + w)^2"는 "y ~ x + z + w + x:z + x:w + z:w"로 확장됩니다.
. 반응 변수를 제외한 데이터 프레임의 다른 모든 변수에 대한 자리 표시자입니다.
예를 들어 데이터 프레임에 변수 x, y, z 및 w가 포함된 경우 코드 "y ~ ."는 "y ~ x + z + w"로 확장됩니다.
- 식에서 변수를 제거합니다.
예를 들어, "y ~ (x + z + w)^2 - x:w"는 y ~ x + z + w + x:z + z:w로 확장됩니다.
-1절편(intercept)를 억제합니다.
예를 들어, 공식 "y ~ x - 1"은 x에 대한 y 회귀에 적합하고
x=0에서 원점을 통과하는 선을 강제 실행합니다.
I() 괄호 안의 요소는 산술적으로 해석됩니다.
예를 들어, ""y ~ x + (z + w)^2"는 "y ~ x + z + w + z:w"로 확장됩니다.
대조적으로, 코드 "y ~ x + I((z + w)^2)"는 "y ~ x + h"로 확장됩니다.
여기서 h는 변수 z와 변수 w의 합을 제곱하여 생성된 새로운 변수입니다.
function 수학 함수는 공식에 사용할 수 있습니다.
예를 들어, "log(y) ~ x + z + w"는 x, z 및 w에서 log(y)를 예측합니다.

lm()외에도 다음 표에는 단순 또는 다중 회귀 분석을 생성할 때 유용한 몇 가지 함수가 나열되어 있습니다. 이러한 각 함수는 피팅된 모델을 기반으로 추가 정보를 생성하기 위해 lm()에 의해 반환된 객체에 적용됩니다.

comparing two or more fitted models
lm()과 연결된 유용한 함수
함수설명
summary() 생성된 모델의 자세한 결과를 나타냄
coefficients() 절편과 기울기등의 모델의 매개변수들 반환
confint() 모델 매개변수(계수)들의 신뢰구간을 반환(기본값 95%)
fitted() 모델에 의한 설명변수들에 대한 예측값들을 반환
residuals()잔차 반환
anova() 모델의 매개변수에 대한 ANOVA 반환
vcov() 모델 매개변수들의 공분산행렬을 반환
AIC() Akaike’s Information Criterion 반환
plot()모델의 적합성을 평가하기 위한 진단플롯들을 생성
predict()모델로 부터 새로운 설명변수에 대한 반응변수를 예측

단순회귀

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

head(women, 3)
  height weight
1     58    115
2     59    117
3     60    120
fit<-lm(weight~height, data=women);fit
Call:
lm(formula = weight ~ height, data = women)

Coefficients:
(Intercept)       height
     -87.52         3.45
summary(fit)
Call:
lm(formula = weight ~ height, data = women)

Residuals:
    Min      1Q  Median      3Q     Max
-1.7333 -1.1333 -0.3833  0.7417  3.1167

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -87.51667    5.93694  -14.74 1.71e-09 ***
height        3.45000    0.09114   37.85 1.09e-14 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.525 on 13 degrees of freedom
Multiple R-squared:  0.991,     Adjusted R-squared:  0.9903
F-statistic:  1433 on 1 and 13 DF,  p-value: 1.091e-14
result<-data.frame(obs=women$weight, pre=round(fitted(fit), 1), 
   residual=round(residuals(fit), 2))
head(result, 3)
  obs   pre residual
1 115 112.6     2.42
2 117 116.0     0.97
3 120 119.5     0.52
plot(women$height, women$weight, xlab="Height", ylab="Weight")
abline(fit)

위 분석에 의한 회귀모델은 다음과 같습니다.

Weightpredict=-87.5 + 3.45·Height

회귀계수의 t-검정

위 결과 중 "coefficient"의 분석은 각 회귀계수에 대한 유의성을 나타냅니다. 다중 회귀 즉, 회귀계수가 두 개 이상일 경우는 분산분석을 실시하지만 하나일 경우는 t-검정의 결과를 보고합니다.

위 결과의 t-검정은 특정한 회귀계수에 대한 것으로 "회귀계수 = 0"인 귀무가설에 대한 검정입니다. 일반적으로 모델에서 절편은 다른 계수들에 의존적이므로 그 통계적 유의는 모델에 영향을 줄 수 없습니다. 변수 "신장"에 대한 계수의 경우 p-value<0.01이므로 통계적으로 유의합니다. 즉, 그 계수에 의해 예측된 반응변수들이 통계적으로 차이를 보입니다.

다음 식에서 나타낸 것과 같이 회귀계수 b1은 잔차와 독립변수의 편차 제곱합 사이의 비로 계산됩니다.

$$\begin{aligned}&\text{error}=y-b_1x\\&b_1=\frac{y-\text{error}}{x}\end{aligned}$$

그러므로 회귀계수의 표준편차는 오차와 독립변수의 표준편차의 비로 계산할 수 있습니다.

$$s_{b1}=\sqrt{\frac{s_{error}}{\sum(x-\mu_x)^2}}=\sqrt{\frac{MSE}{\frac{\sum(x-\mu_x)^2}{df_{error}}}}$$
res<-resid(fit)
df_e<-13

잔차의 분산은 다음과 같이 계산되며 잔차제곱합 평균(MSE)이 됩니다. 또한 독립변수의 평균제곱합을 계산하여 잔차의 자유도를 고려하여 회귀계수의 표준오차를 계산할 수 있습니다.

mse_e<-sum(res^2)/df_e
X<-women$height
s_x<-sum((X-mean(X))^2)/df_e
mse_b1<-mse_e/(s_x)
se_b<-sqrt(mse_b1/df_e);se_b 
[1] 0.0911365

결과적으로 평균이 0이고 표준편차 대신 표준오차가 0.091를 모수로 하는 t분포에서 계산된 회귀계수의 유의성을 평가합니다. 표준 t 분포에 적용하기 위한 t-검정량과 유의확률은 다음과 같습니다.

t_b<-coef(fit)[2]/se_b; t_b
height 
37.85531
1-pt(t_b, df_e)
height 
5.440093e-15 

매우 작은 유의확률은 귀무가설 b1 = 0을 기각할 수 있습니다.

회귀식의 평가

생성된 회귀식은 실측치와 예측치를 최소화시키는 방향으로 생성됩니다. 이렇게 생성된 오차는 랜덤하게 생성되는 것으로 그 수준을 조절할 수 없습니다. 반면에 반응변수들의 불편추정량과 예측값들과 차이는 불편추정량의 선택에 의해 조절할 수 있습니다. 이 오차들의 제곱합을 각각 SSR, SSE라고 합니다. 이 오차의 합은 SST가 됩니다. 다음 그림은 이들의 관계를 나타낸 것입니다.

다음은 위 그림 작성 코드입니다.

x<-seq(0, 3, 0.01)
y<-x+3
plot(rep(1.5, 3), c(3.5, 1.5+3, 5), col=c('red', 'black', 'blue'), cex=2, pch=20, xlab="x", 
 ylab="y")
abline(x, y, lw=2)
abline(h=5, lty=2)
arrows(1.5, 4.5, 1.5, 3.5, col="red", lwd=2, angle=30, length=0.1)
arrows(1.5, 4.5, 1.5, 5, col="blue", lwd=2, angle=30, length=0.1)
arrows(1.4, 3.5, 1.4, 5, col="black", lty=2, lwd=2, angle=0, length=0)
legend(0.9, 4.8, legend=c('observed', 'predicted', 'mean'), fill=c('red','black','blue'), 
 border='white', box.lty=0)
text(1.55, 4.0, "SSE", col="red", font=2)
text(1.44, 4.7, "SSR", col="blue", font=2)
text(1.35, 4.3, "SST", col="black", font=2)

전체오차합중에서 조절할 수 있는 오차 즉, SSR을 측정하는 것으로 회귀선의 정확도를 나타낼수 있습니다. SSR이 증가한다는 것은 SSE가 감소하는 것으로 회귀선의 신뢰도가 증가한다고 할 수 있습니다. 이렇게 결정된 값을 결정계수라고 합니다.

결정계수는 관측치와 예측치의 상관성을 나타내는 것으로 두 자료의 상관계수의 제곱과 같습니다. 그러므로 결정계수는 [0, 1] 사이의 값이며 높은 값일수록 두 자료의 일치성은 증가하는 것으로 회귀모델의 정확도가 증가한다고 할 수 있습니다.

y<-women$weight
SST<-sum((y-mean(y))^2)
SSE<-sum(res^2)
SSR<-SST-SSE
c(SST, SSR, SSE)
[1] 3362.93333 3332.70000   30.23333
SSR/SST
[1] 0.9910098
r<-cor(y, pre);r^2
[1] 0.9910098

F-검정은 $χ^2$분포를 따르는 두 분포의 비에 대한 검정입니다. 회귀식을 기반으로 관측치를 대표할 수 있는 특정한 통계량과의 차이와 관측치에 대한 차이의 비가 일반적으로 발생할 수 있는 상태면 생성된 회귀식의 정당성은 잃게 됩니다. 즉, 이 분포는 "회귀식은 통계적으로 유의하지 않다."는 귀무가설에서 다음의 F값에 대해 검정합니다.

$$F=\frac{\frac{SSR}{df_{ssr}}}{\frac{SSE}{df_{sse}}}=\frac{MSR}{MSE}$$
F<-(SSR/1)/(SSE/df_e);F
[1] 1433.024
Fp<-1-pf(F, 1, df_e);Fp
[1] 1.088019e-14

단순회귀인 경우 회귀계수가 하나이므로 t-검정의 결과와 같습니다.

댓글

이 블로그의 인기 게시물

[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