저번 시간에 이어서 KNN 구현을 마무리해자.


지금부터는 본격적으로 관련 라이브러리를 활용하여 완성을 할 것이다.


1
2
3
4
5
6
7
8
9
## Step.2 Training a model on the data ###
 
"class" 라이브러리 로드
install.packages("class")
library(class)
wbcd_test_pred<-knn(train=wbcd_train,
                    test=wbcd_test,
                    cl=wbcd_train_labels,
                    k=21)
cs


class 라이브러리의 knn 함수를 사용하여 KNN 알고리즘을 시행하게 된다. 


여기서 train은 위에서 나눈 학습 데이터, train은 검증 데이터, cl은 우리가 Target 변수로 하고 있는

Diagnosis 칼럼을 뜻하는데, 여기서 train_labels는 train data의 diagnosis 칼럼만 따로 추출해 놓은 것을 뜻한다. 


여기서 K는 전 포스팅 인트로에 설명하였던, 몇 개의 데이터를 계산에 포함시킬거냐에 관한 것이다.


보통 총 데이터셋의 제곱근의 값으로 계산하며, 여기서는 21로 지정하여 진행하도록 하겠다.



1
2
3
4
5
6
"gmodels" 라이브러리 로드
library(gmodels)
 
# 예측값과 실제값의 교차표 생성
CrossTable(x=wbcd_test_labels,y=wbcd_test_pred,prop.c=FALSE)
 #2개가 오분류 
cs


이렇게 생성한 예측값의 정확도를 확인해보기 위해서, gmodels 라이브러리의 크로스테이블을 사용한다. 



아래에서 확인할 수 있는 것처럼 약 98퍼센트의 예측 정확도를 보여주고 있다. 


이상으로 KNN알고리즘 구현을 마무리 할 수 있지만, 전 포스팅에서 진행하였던 최대최소 정규화 외에, 

다른 정규화 방법중 하나인 Z점수 표준화 공식을 간단히 설명하고 마무리하도록 하겠다.





공식은 X-평균 / 표준편차 이며, R에서는 아래와 같이 구현한다.


1
2
3
4
5
6
# 데이터 프레임를 z-score 표준화하기 위해 scale() 함수 사용
wbcd_z<-as.data.frame(scale(wbcd[-1]))
 
# 변환이 정확하게 적용되었는지 확인
summary(wbcd_z$area_mean)
  ## z는 평균이 0 
cs


R에서는 scale함수로 이를 간단하게 시행할 수 있으며, 아래처럼 summary 함수를 통해 성공적으로 변환이 되었는지

확인할 수 있다.


다른 과정은 동일하며 wbcd_n 자리에 wbcd_z를 넣어서 동일하게 진행하면 된다.



+ Recent posts