K-NN 알고리즘 -1

2016. 1. 31. 14:54·프로젝트 관련 조사/알고리즘
반응형

출처: 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근접이웃 알고리즘

반응형
저작자표시 (새창열림)

'프로젝트 관련 조사 > 알고리즘' 카테고리의 다른 글

[C++ STL] Header <algorithm> – 1. Sort 파헤치기 (1)  (0) 2016.10.10
[알고리즘] 몬테카를로 알고리즘  (0) 2016.06.01
k - means 알고리즘 소개 영상  (0) 2016.01.31
데이터에 맞는 알고리즘  (0) 2016.01.31
[알고리즘] 공부해야할 알고리즘  (0) 2016.01.20
'프로젝트 관련 조사/알고리즘' 카테고리의 다른 글
  • [알고리즘] 몬테카를로 알고리즘
  • k - means 알고리즘 소개 영상
  • 데이터에 맞는 알고리즘
  • [알고리즘] 공부해야할 알고리즘
호레
호레
창업 / IT / 육아 / 일상 / 여행
    반응형
  • 호레
    Unique Life
    호레
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 법률
        • 기본
        • 개인정보보호법
        • 정보통신망법
        • 전자금융거래법
        • 전자금융감독규정
        • 신용정보법
        • 온라인투자연계금융업법
      • 창업
        • 외식업 관련
        • 임대업 관련
        • 유통업 관련
        • 세무 관련
        • 마케팅 관련
        • 기타 지식
        • 트렌드
        • Youtube
      • IT기술 관련
        • 모바일
        • 윈도우
        • 리눅스
        • MAC OS
        • 네트워크
        • 빅데이터 관련
        • A.I 인공지능
        • 파이썬_루비 등 언어
        • 쿠버네티스
        • 기타 기술
      • 퍼블릭 클라우드 관련
        • Azure
        • GCP
        • AWS
      • 정보보안 관련
        • QRadar
        • Splunk
        • System
        • Web
      • 기타
        • 세상 모든 정보
        • 서적
      • 게임 관련
        • 유니티
      • 부동산
      • 맛집 찾기
        • 강남역
        • 양재역
        • 판교역
        • ★★★★★
        • ★★★★
        • ★★★
        • ★★
        • ★
      • 결혼_육아 생활
        • 리얼후기
        • 일상
        • 육아
        • 사랑
        • Food
      • 영어
        • 스피킹
        • 문법
        • 팝송
        • 영화
      • K-컨텐츠
        • 드라마
        • 영화
        • 예능
      • 독서
      • 프로젝트 관련 조사
        • 시스템 구축
        • 로그 관련
        • 웹
        • APT
        • 모의 해킹
        • DB
        • 허니팟
        • 수리카타
        • 알고리즘
        • FDS
      • 기업별 구내 식당 평가
        • 한국관광공사
        • KT telecop
        • KT M&S
        • KT powertel
        • KT cs 연수원
        • 진에어
      • 대학 생활
        • 위드윈연구소
        • 진로 고민
        • 채용정보
        • 자동차
        • 주식
        • 악성코드
        • 게임 보안
      • 쉐어하우스
  • 블로그 메뉴

    • 홈
    • 게임 관련
    • IT 기술 관련
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    수제버거
    판교
    수제버거맛집
    쥬쥬랜드
    수제버거존맛
    돈까스
    무역전쟁
    상호관세
    AWS
    유니티
    판교맛집
    판교역
    점심
    맛집
    이재곧죽습니다
    대통령
    보안가이드
    마케팅
    복리후생
    런치
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
호레
K-NN 알고리즘 -1

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.