반응형
http://www.datamarket.kr/xe/index.php?mid=board_ecko11&page=3&document_srl=411

 

 

반응형
반응형

출처: http://www.datamarket.kr/xe/board_BoGi29/9880

 

 

슬라이드2.JPG


본격적으로 KNN알고리즘을 들어가기 전에, 분류(Classification)와 군집화(Clustering)의 차이에 대해 간단히 알아보겠습니다. 


분류(Classification) - 이미 클래스(계급, 범주)를 갖은 데이터를 새로운 데이터가 들어왔을 때 구별을 위한 모델링( Suvervised learning : 지시학습 )

군집화(Clustering) - 클래스(계급, 범주)가 없는 데이터를 어떠한 기준이나 규칙에 의해 분석가가 임의의 그룹으로 나누는 모델링( Unsupervised learning : 비지시학습 )


으로, KNN알고리즘은 분류에 속하게 됩니다. 

KNN 알고리즘의 개념에 대해 간단하게 보자면 새로운 데이터의 가장 가까운 데이터들의 클래스(계급, 범주)를 따라 클래스를 정해주는 것입니다.


슬라이드3.JPG


K가 1일떄 - 1NN 가장 가까운 1개의 데이터의 클래스를 따라 새로운 데이터의 클래스를 따라간다.

빨간 외각선 원 : NEW DATA

 -> 모든 NEW DATA를 회색의 범주로 간주


슬라이드4.JPG


K가 3일떄 - 3NN 가장 가까운 3개의 데이터의 클래스를 다수결(분류기준이 0.5일 때)따라 새로운 데이터의 클래스를 따라간다.

빨간 외각선 원 : NEW DATA

 -> 왼쪽 위 NEW DATA : 주변 3개의 범주가 회색  -  NEW DATA = 회색

      가온데 아래 NEW DATA : 주변 2개의 범주가 회색, 1개가 파란색  -  NEW DATA = 회색

      오른쪽 위 NEW DATA : 주변 2개의 범주가 파란색, 1개가 회색  -  NEW DATA = 파란색


슬라이드5.JPG


위의 간단한 예를 통해, K에 따라 결과가 달라지는 것을 통해, 분석가의 소신에 따라 K를 정해주는 것이 분석에서의 중요한 요소가 될 것 입니다.


- 너무 작은 k : 과적합의 우려

- 너무 큰 k : 데이터 구조 파악의 어려움


KNN 알고리즘에 대해 조금 더 간단한 데이터를 통해 알아보겠습니다.


슬라이드10.JPG


위의 그래프는 여러가지 식품에 대해서 단맛(0~10)과 아삭거림(0~10)의 정도에 따라 2차원 산점도입니다. 

위와 같이 데이터들이 분류가 되어있을 때, 새로운 데이터가 입력이 되었을 때, 그 데이터가 어떤 범주로 분류될지 

5NN 알고리즘을 통해 분류해보겠습니다. 


슬라이드12.JPG


New Data가 단맛=6, 아삭거림=4 일때, 유클리드 거리를 통해 가장 가까운 데이터 5개를 뽑아보았습니다.

그 중 과일인 데이터가 3개임으로 새로운 데이터는 "과일"로 분류가 됩니다.


KNN 알고리즘에 대해 R 코드로 접근해 보겠습니다.



#### 데이터 EDA ####


wbcd<-read.csv("wisc_bc_data.csv",stringsAsFactors=F)

# 위스콘신 대학의 연구자들이 기부한 데이터

# 유방 암 조직 검사에 대한 569개의 데이터와 32개의 속성


str(wbcd)

# M(Malignant) : 악성 / B(Benign) : 양성

# radius : 반지름 / texture : 텍스처 / perimeter : 둘레 / area : 면적 / smmothness : 평활도 

# compactness : 다짐도 / concavity : 요면 / concave points : 요면점 / symmetry : 대칭 / fractal dimension : 프렉탈 차원


wbcd<-wbcd[-1] # id 삭제


table(wbcd$diagnosis)


wbcd$diagnosis<-factor(wbcd$diagnosis,levels=c("B","M"),labels=c("Benign","Malignant"))


summary(wbcd) # 단위가 굉장히 다름 -> 정규화가 필요



#### 데이터 표준화 ####


# 최대최소 표준화 (0~1값으로 변환)

normalize<-function(x){

  return((x-min(x))/(max(x)-min(x)))

}


wbcd_n<-as.data.frame(lapply(wbcd[2:31],normalize)) # 리스트를 데이터프레임형식으로 변환



#### 데이터 분할 #####


# 이 데이터 경우 기록물은 임의의순서로 저장되어있기 때문에, 샘플링이 단순

wbcd_train<-wbcd_n[1:469,]

wbcd_test <-wbcd_n[470:569,]


wbcd_train_labels<-wbcd[1:469,1]

wbcd_test_labels<-wbcd[470:569,1]


prop.table(table(wbcd_train_labels))

prop.table(table(wbcd_test_labels)) # 데이터 분할이 골고루 잘 되었는지 확인



#### 모델 훈련 (가중치X) ####


# install.packages("class")

library(class)


wbcd_test_pred<-knn(train=wbcd_train,

                    test=wbcd_test,

                    cl=wbcd_train_labels, # class : train 데이터의 각 행에 대한 범주인 팩터 벡터

                    k=21)

table(wbcd_test_pred)



#### 모델 성능 평가 #####


# install.packages("gmodels")

library(gmodels)


CrossTable(x=wbcd_test_labels,y=wbcd_test_pred,prop.chisq=FALSE,prop.c=FALSE)




앞에서 보았던 KNN 알고리즘은, 단순히 거리의 정도를 생각하지 않고 가장 가까운 데이터 K개 안에서 다수결에 따라 범주를 골라 주었다면, 거리에 대해서 유사성 가중치를 주는 Weighted KNN 에 대해서 알아보겠습니다.


슬라이드14.JPG


위의 데이터에서 가중치를 주지 않는 다면, 새로운 데이터가 "야채"로 분류가 됩니다.


슬라이드15.JPG


하지만, 똑같은 데이터에서 유사도를 "1/거리" 로 정의하고 가중치를 주게 된다면, 새로운 데이터는 "과일"로 분류가 됩니다.

( 주의 : 이해를 쉽게하기 위해 유사도를 1/거리 로 정의하였습니다. )


이를 R 코들를 통해 실습해 보겠습니다.



#### 모델 훈련 (가중치) ####


# install.packages("kknn")

library(kknn)


wbcd[2:31]<-lapply(wbcd[2:31],normalize)


summary(wbcd)

knn_train<-wbcd[1:469,]

knn_test<-wbcd[470:569,]


wbcd_kknn<-kknn(diagnosis~.,train=knn_train,test=knn_test,k=21,distance=2,kernel="triangular")

# distance = Minkowski 에서의 p 값  -> 클릭

# kernel = 가중치를 주는 방법  ->  클릭


kknn_fit<-fitted(wbcd_kknn)


CrossTable(x=knn_test$diagnosis,y=kknn_fit,prop.chisq=FALSE,prop.c=FALSE)



이상으로 KNN 알고리즘 포스팅을 마치도록 하겠습니다.


REFERENCE 

[1] Machine Learning with R _ Brett Lantz

[2] 투빅스 1기 김보섭 _ K근접이웃 알고리즘

반응형
반응형

데이터에 맞는 알고리즘

모델 

태스크 

지도 학습 알고리즘

최근접 이웃

분류 

나이브 베이즈

분류

결정 트리 

분류 

선형회귀 

수치 예측 

회귀 트리 

수치 예측 

모델 트리 

수치 예측 

신경망 

다중 용도 

서포트 벡터 머신 

다중 용도 

비지도 학습 알고리즘 

연관 규칙 

패턴 탐지 

K평균 군집화 

군집화 

 

 

반응형
반응형

KNN 알고리즘

http://blog.naver.com/PostView.nhn?blogId=santalsm&logNo=220526205088



K-최근접 이웃 알고리즘

https://ko.wikipedia.org/wiki/K-최근접_이웃_알고리즘



K-평균 알고리즘

https://ko.wikipedia.org/wiki/K-평균_알고리즘


반응형

+ Recent posts