판별분석

백승하·2024년 6월 21일

다변량해석

목록 보기
6/6

판별분석(Discriminant analysis)

  1. 알려진 군집에 따른 다변량 자료행렬 준비
  2. 각 군집 별 자료의 다변량 정규성 확인
  3. 각 군집의 공분산행렬의 동질성 확인
  4. 2와 3단계의 결과에 따라
  • 선형판별분석(Linear discriminant analysis, LDA): 정규성 및 공분산의 동질성 모두 성립시
  • 이차판별분석(Quadratic discriminant analysis, LDA): 정규성만 성립시
  • 피셔선형판별분석: 공분산의 동질성만 성립시
  1. 오분류율을 계산하여 판별함수의 타당성 확인
  2. 임의의 개체를 적합된 판별함수로 적절한 군집으로 분류

두 군집의 판별분석

  1. xx는 두 군집 C1,C2C_1, C_2에서 관측 가정.
  • f1(x)f_1 ( x): 군집 C1C_1에서의 확률함수
  • f2(x)f_2 ( x): 군집 C2C_2에서의 확률함수
  1. 오분류 평균비용(Expected cost of misclassification, ECM)
  • event A: 임의 개체의 실제 군집이 C1C_1
  • event B: 임의 개체의 군집을 C1C_1이라 판별.
    B={xf1(x)f2(x)>k}P(A)=p1,   P(Ac)=p2=1p1P(군집  C1으로  오분류)=P(AcB)=P(Ac)P(BAc)=p2Bf2(x)P(군집  C2로  오분류)=P(ABc)=P(A)P(BcA)=p1Bcf1(x)\begin{aligned} B&=\left\{ x \Big | \frac{f_1( x)}{f_2( x)}>k \right\}\\ P(A)&=p_1,~~~P(A^c)=p_2=1-p_1\\ P(군집~~C_1으로~~오분류)&=P(A^c\cap B)=P(A^c)P(B|A^c)=p_2\int_{B} f_2( x)\\ P(군집~~C_2로~~오분류)&=P(A\cap B^c)=P(A)P(B^c|A)=p_1\int_{B^c} f_1( x)\\ \end{aligned}
  • 오분류 비용: CjC_j군집을 CiC_i군집이라 오분류시 비용. c(ij),ijc(i|j), i\ne j
    \begin{aligned} ECM&=c(1|2)P(군집~~C_1으로~~오분류)+c(2|1)P(군집~~C_2로~~오분류)\\ &=c(1|2)p_2\int_{B} f_2( x)+c(2|1)p_1\int_{B^c} f_1( x)\\ &=c(1|2)p_2\int_{B} f_2( x)+c(2|1)p_1\left(1-\int_{B} f_1( x)\right)\\ &<="" span="">
  • k=c(12)p2c(21)p1k=\frac{c(1|2)p_2}{c(2|1)p_1}일 때 c(21)p1+[c(12)p2kc(21)p1]Bf2(x)=c(21)p1c(2|1)p_1+\Big [ c(1|2)p_2-kc(2|1)p_1 \Big]\int_{B} f_2( x)=c(2|1)p_1
  1. ECM 분류규칙
    f1(x)f2(x)>c(12)p2c(21)p1      군집  C1으로  판별\frac{f_1( x)}{f_2( x)}> \frac{c(1|2)p_2}{c(2|1)p_1}~~~\Leftrightarrow~~~군집~~C_1으로~~판별
  2. 총오분류확률(Total probability of misclassification, TPM)
    TPM=P(군집  C1으로  오분류)+P(군집  C2로  오분류)=p2Bf2(x)+p1Bcf1(x)TPM=P(군집~~C_1으로~~오분류)+P(군집~~C_2로~~오분류)=p_2\int_{B} f_2( x)+p_1\int_{B^c} f_1( x)
  3. TPM 분류규칙
    f1(x)f2(x)>p2p1      군집  C1으로  판별\frac{f_1( x)}{f_2( x)}> \frac{p_2}{p_1}~~~\Leftrightarrow~~~군집~~C_1으로~~판별

다변량 정규성을 따르는 두 집단의 판별분석

fk(x)=(12π)pΣk1/2exp[12(xμk)Σk1(xμk)],     k=1,2f_k( x)=\left(\frac 1{\sqrt{2\pi}}\right)^{p}\left| \Sigma_k\right|^{-1/2}\exp\left[-\frac 1 2 ( x-\mathbf\mu_k)'\mathbf\Sigma_k^{-1}( x-\mathbf\mu_k)\right],~~~~~k=1,2
  1. 군집 C1C_1pp차원의 확률벡터 xx의 확률함수는 f1(x)f_1( x)이고 n1n_1개의 표본 추출

  2. 군집 C2C_2pp차원의 확률벡터 xx의 확률함수는 f2(x)f_2( x)이고 n2n_2개의 표본 추출

  3. 공분산행렬의 동질성

  • xkijx_{kij}: 군집 CkC_k에서 ii번째 표본의 jj번째 확률변수. k=1,2,,g   i=1,2,,nk,   j=1,2,,pk=1,2,\ldots,g~~~i=1,2,\ldots,n_k,~~~j=1,2,\ldots,p
  • H0:Σ1=Σ2==ΣgH_0: \Sigma_1= \Sigma_2=\cdots= \Sigma_g
  • 우도비검정(likelihood ratio test)
    Λ=k=1g(SkSp)(nk1)/2=k=1gSk1Sp(nk1)/2Sk=1nk1YkYk,   Y={ykij}ij,   ykij=xkijμjSp=1k=1g(nk1)k=1g(nk1)Sk2logΛχdf2,   df=(#parameter)(#parameter  under  H0)=p(p+1)(g1)/2\begin{aligned} \Lambda&=\prod_{k=1}^g\left(\frac{| S_k|}{| S_p|}\right)^{(n_k-1)/2}=\prod_{k=1}^g| S_k^{-1} S_p|^{-(n_k-1)/2}\\ \\ S_k&=\frac 1 {n_k-1} {Y'_k Y_k},~~~Y=\{y_{kij}\}_{ij},~~~y_{kij}=x_{kij}-\mu_j\\ S_p&=\frac 1{\sum_{k=1}^g(n_k-1)} \sum_{k=1}^g(n_k-1) S_k\\ \\\\ -2\log\Lambda&\approx \chi_{df}^2,~~~ df= (\#parameter) - (\#parameter ~~under ~~H_0) = p(p+1)(g-1)/2 \end{aligned}
  • Box's M-test: nk>20,  p5,  g5n_k>20,~~p\le5,~~g\le5
    2γlogΛχdf2,    γ=1[k=1g1nk11k=1g(nk1)][2p2+3p16(p+1)(g1)]\begin{aligned} -2\gamma\log\Lambda&\approx \chi_{df}^2,~~~~\gamma=1-\left[\sum_{k=1}^g\frac 1 {n_k-1}- \frac 1 {\sum_{k=1}^g(n_k-1)}\right]\left[\frac{2p^2+3p-1}{6(p+1)(g-1)}\right] \end{aligned}
  1. 공분산행렬의 동질성 확인 시: 2γlogΛχα(df)-2\gamma\log\Lambda\le\chi_{\alpha}(df)
  • ECM 분류규칙: x0x_0인 대상은 군집 C1C_1에 속한 것으로 판별하는 선형분류규칙.
    12[(x0μ2)Σ1(x0μ2)(x0μ1)Σ1(x0μ1)]=12[(μ1μ2)Σ1x0(x0μ2)Σ1μ2+(x0μ1)Σ1μ1]=12[(μ1μ2)Σ1x0x0Σ1(μ2μ1)+μ2Σ1μ2μ1Σ1μ1]=(μ1μ2)Σ1x0+12(μ2Σ1μ2μ1Σ1μ1)=(μ1μ2)Σ1x0+12(μ2μ1)Σ1(μ2+μ1)\begin{aligned} &\frac 12\left[(x_0-\mu_2)'\Sigma^{-1}(x_0-\mu_2)-(x_0-\mu_1)'\Sigma^{-1}(x_0-\mu_1)\right]\\ &=\frac 12\left[(\mu_1-\mu_2)'\Sigma^{-1}x_0-(x_0-\mu_2)'\Sigma^{-1}\mu_2+(x_0-\mu_1)'\Sigma^{-1}\mu_1\right]\\ &=\frac 12\left[(\mu_1-\mu_2)'\Sigma^{-1}x_0-x_0'\Sigma^{-1}(\mu_2-\mu_1)+\mu_2'\Sigma^{-1}\mu_2-\mu_1'\Sigma^{-1}\mu_1\right]\\ &=(\mu_1-\mu_2)'\Sigma^{-1}x_0+\frac 12\left(\mu_2'\Sigma^{-1}\mu_2-\mu_1'\Sigma^{-1}\mu_1\right)\\ &=(\mu_1-\mu_2)'\Sigma^{-1}x_0+\frac 12(\mu_2-\mu_1)'\Sigma^{-1}(\mu_2+\mu_1) \end{aligned}
f1(x0)f2(x0)>c(12)p2c(21)p1 (μ1μ2)Σ1x012(μ1μ2)Σ1(μ1+μ2)>log[c(12)p2c(21)p1] L(x0)β0>log[c(12)p2c(21)p1]L^(x0)=(μ^1μ^2)Σ^1x0=(xˉk=1xˉk=2)Sp1x0β^0=12(μ^1μ^2)Σ^1(μ^1+μ^2)=12(xˉk=1xˉk=2)Sp1(xˉk=1+xˉk=2) L^(x0)β^0>log[c(12)p2c(21)p1]\begin{aligned} &\frac{f_1( x_0)}{f_2( x_0)}> \frac{c(1|2)p_2}{c(2|1)p_1}\\ &\Leftrightarrow~( \mu_1- \mu_2)' \Sigma^{-1} x_0-\frac 1 2 ( \mu_1- \mu_2)' \Sigma^{-1}( \mu_1+ \mu_2)> \log\left[ \frac{c(1|2)p_2}{c(2|1)p_1}\right]\\ &\Leftrightarrow~L( x_0)-\beta_0> \log\left[ \frac{c(1|2)p_2}{c(2|1)p_1}\right]\\\\ & \hat L( x_0)= (\hat{ \mu}_1-\hat{ \mu}_2)'\hat{ \Sigma}^{-1} x_0= (\bar{ x}_{k=1}-\bar{ x}_{k=2})'{ S}_p^{-1} x_0\\ & \hat{\beta}_0=\frac 1 2 (\hat{ \mu}_1-\hat{ \mu}_2)'\hat{ \Sigma}^{-1}(\hat{ \mu}_1+\hat{ \mu}_2)=\frac 1 2 (\bar{ x}_{k=1}-\bar{ x}_{k=2})'{ S}_p^{-1}(\bar{ x}_{k=1}+\bar{ x}_{k=2})\\\\ &\Leftrightarrow~\hat L( x_0)-\hat\beta_0> \log\left[ \frac{c(1|2)p_2}{c(2|1)p_1}\right] \end{aligned}
  • L^(x0)\hat L( x_0)x0=[x01,x02,,x0p]x_0=[x_{01}, x_{02},\ldots,x_{0p}]의 선형 결합.
  1. 공분산행렬의 이질성 확인 시: 2γlogΛ>χα(df)-2\gamma\log\Lambda>\chi_{\alpha}(df). 이차분류규칙

여러 군집의 판별분석

  1. g>2g>2
  2. 군집 ClC_lCkC_k로 오분류할 확률과 손실비용을 각각 P(kl),c(kl)P(k|l), c(k|l)인 경우
    ECMl=k=1,klgP(kl)c(kl),    l=1,2,,g\begin{aligned} ECM_l&=\sum_{k=1,k\ne l}^g P(k|l)c(k|l),~~~~l=1,2,\ldots,g \end{aligned}
  3. Total ECM: 표본이 군집 CkC_k에서 뽑힐 확률 pkp_k
    TECM=l=1gplECMl=l=1gplk=1,klgP(kl)c(kl),    l=1,2,,g\begin{aligned} TECM&=\sum_{l=1}^g p_l ECM_l=\sum_{l=1}^g p_l \sum_{k=1,k\ne l}^g P(k|l)c(k|l),~~~~l=1,2,\ldots,g \end{aligned}
  4. TECM 분류규칙
  • Dk(x0)D_k( x_0)가 최소값을 갖는 kk확인
    Dk(x0)=l=1,lkgplfl(x0)c(kl),   k=1,2,,gD_k( x_0)=\sum_{l=1, l\ne k}^g p_l f_l( x_0) c(k|l),~~~k=1,2,\ldots,g
  • x0x_0는 군집 CkC_k소속으로 판별
finance=read.csv("finance.csv",header=TRUE)
head(finance)
dim(finance)
  • 선형판별분석
library(MASS)
finance.lda <- lda(y~x1+x2+x3+x4,data=finance)
print(finance.lda)
pred1 <- predict(finance.lda,finance)

library(biotools)
finance.boxM <- boxM(finance[,2:5],finance$y)

tmp=finance.lda$means
# tmp4=with(finance,x1*1.0023665+x2*3.9998578+x3*0.8450508-x4*1.0153181)
tmp4=as.matrix(finance[,2:5])%*%matrix(finance.lda[[4]],ncol=1)

tapply(tmp4,finance$y,function(xxx) round(c(mean(xxx),sd(xxx)),2))
par(mfcol=c(1,2))
boxplot(pred1$x~finance$y);abline(h=0,col='grey')
boxplot(tmp4~finance$y);abline(h=0,col='grey')
cbind(finance$y,pred1$x,tmp4,pred1$x-tmp4)
finance.pred1 <- cbind(finance,pred1$x,pred1$posterior,pred1$class)
print(finance.pred1,digits=3)
table(finance$y,pred1$class)
  • 정오분류표(Missclassification table)
finance.ctbl1 <- table(finance$y,pred1$class)
# install.packages("DescTools")
library(DescTools)
Desc(finance.ctbl1,digits=2)
  • 모공분산행렬의 동일성 검정
# install.packages("biotools")
library(biotools)
finance.boxM <- boxM(finance[,2:5],finance$y)
print(finance.boxM)
print(finance.boxM$cov)
print(finance.boxM$pooled)
  • 이차 판별분석
library(MASS)
finance.qda <- qda(y~x1+x2+x3+x4,data=finance)
pred2 <- predict(finance.qda,finance)
finance.ctbl2 <- table(finance$y,pred2$class)
library(DescTools)
Desc(finance.ctbl2,digits=2)

0개의 댓글