일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 김양재
- openCV
- 빅 데이타
- 주일설교
- 김양재 목사
- Machine Learning
- 데이터 과학
- R
- 우리들교회
- 몽고디비
- 통계
- 빅데이터
- No SQL
- Deep learning
- 빅 데이터
- 확률
- WebGL
- 김양재 목사님
- data science
- Artificial Intelligence
- 딥러닝
- nodeJS
- Statistics
- c++
- Big Data
- 빅데이타
- 인공지능
- MongoDB
- node.js
- probability
- Today
- Total
Scientific Computing & Data Science
[Artificial Intelligence / Machine Learning] k-Nearest Neighbor Algorithm 본문
[Artificial Intelligence / Machine Learning] k-Nearest Neighbor Algorithm
cinema4dr12 2016. 6. 18. 22:37지난 글에서 R을 이용한 k-NN 알고리즘에 대하여 살펴본 바 있다. (k-Nearest Neighbor Algorithm)
그러나, R의 라이브러리 중 하나인 class 라이브러리를 이용한 것이며, 실질적으로 R을 이용하여 구체적으로 어떻게 코딩되는지 살펴보지는 않았다.
이번 글에서는 R에서 실질적으로 k-NN 알고리즘을 구현해 보도록 한다.
k-NN 함수
k-NN 함수를 다음과 같이 구현하였다.
R CODE:
입력 인수 df는 training dataset의 data frame으로, 마지막 column에는 각 row의 class가 정의되어 있다.
예를 들어, 다음과 같은 형태이다.
X |
Y |
CLASS |
X_1 |
Y_1 |
A |
X_2 |
Y_2 |
B |
: |
: |
: |
X_n | Y_n | Z |
입력 인수 inX는 test data로써 vector 타입이다.
코드 설명
Training dataset df의 데이터 종류의 개수를 알아낸다. 예를 들어, Training dataset이 위의 표와 같다면 데이터 종류의 수는 2개(X와 Y)이다.
Line 18~23
df에서 class를 제외한 data만을 저장하는 dataSet 변수를 matrix 형태로 초기화한다.
따라서, dataSet의 dimension 중 행(row)은 df와 동일하며, 열(column)은 df에서 하나 적게 설정한다.
그리고 df의 모든 행의 element를 dataSet의 행에 저장한다.
Line 26
df의 마지막 열을 label 변수에 저장한다.
Line 29
dataSetSize 변수에 data set의 크기를 저장한다.
Line 31~36
test data 벡터를 dataSet의 행만큼 생성한다.
Line 39
testMat 행렬과 dataSet 행렬의 차이를 구하여 diffMat에 저장한다.
Line 42
diffMat 행렬의 각 요소를 제곱하여 sqDiffMat 행렬에 저장한다.
Line 45
sqDiffMat 행렬의 각 행의 요소에 대하여 합산한 값을 sqDistances 벡터로 저장한다.
Line 48
sqDistances 벡터의 요소를 오름차순으로 정렬하여 이에 해당하는 index를 sortedDistIndices 벡터에 저장한다.
Line 50~55
sortedDistIndices 벡터로부터 k번째까지의 해당 index에 대한 label (또는 class)를 result 벡터에 저장한다.
Line 57~75
k번째까지 추출된 label을 count하고 많이 count된 순서대로 정렬하여 ResultClass 행렬에 저장하고 이 행렬을 리턴한다.
CreateDataSet() 함수
Training data set을 생성하는 함수는 다음과 같다.
R CODE:
k-NN 테스트
이제 dataset을 생성하고 (CreateDataSet() 호출 ), kNN() 함수를 이용하여 어떤 결과가 나오는지 보도록 하자.
R CODE:
결과는 다음과 같다:
> df <- CreateDataSet()
> inX <- c(0.9, 1.6)
> k <- 3
>
> result <- kNN(df, inX, k)
> print(result)
[1] "A"
이로써 R에서 k-NN 알고리즘을 구현하는 것에 대하여 알아보았다.
다음 글은 k-NN 알고리즘을 이용하여 숫자 필기 인식하는 방법에 대하여 알아보도록 하겠다.