■ K-최근접 이웃(KNN, K-Nearest Neighbors) 알고리즘을 사용하는 방법을 보여준다.
▶ input_data.py
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from __future__ import absolute_import from __future__ import division from __future__ import print_function import gzip import os import tempfile import numpy from six.moves import urllib from six.moves import xrange import tensorflow as tf from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets |
▶ knn.py
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 32 33 |
import input_data import numpy as np import tensorflow as tf # 학습/테스트 데이터를 로드한다. numberPixelDatasets = input_data.read_data_sets("/tmp/data/", one_hot = True) trainNumberPixelNDArray, trainNumberNDArray = numberPixelDatasets.train.next_batch(100) testNumberPixelNDArray , testNumberNDArray = numberPixelDatasets.test.next_batch(10) # 비용 함수와 거리 최적화를 정의한다. trainNumberPixelTensor = tf.placeholder("float", [None, 784]) testPixelTensor = tf.placeholder("float", [784]) distance = tf.reduce_sum(tf.abs(tf.add(trainNumberPixelTensor, tf.negative(testPixelTensor))), reduction_indices = 1) predictor = tf.argmin(distance, 0) # 테스트 한다. accuracy = 0. initializer = tf.global_variables_initializer() with tf.Session() as sess: sess.run(initializer) for i in range(len(testNumberNDArray)): predictNumberIndex = sess.run(predictor, feed_dict = { trainNumberPixelTensor : trainNumberPixelNDArray, testPixelTensor : testNumberPixelNDArray[i, :] }) print("회차 : {0}, 예측 숫자 : {1}, 실제 숫자 : {2}".format(i, np.argmax(trainNumberNDArray[predictNumberIndex]), np.argmax(testNumberNDArray[i]))) if np.argmax(trainNumberNDArray[predictNumberIndex]) == np.argmax(testNumberNDArray[i]): accuracy += 1. / len(testNumberPixelNDArray) print("정확도 = {0}".format(accuracy)) |
▶ 결과
1 2 3 4 5 6 7 8 9 10 11 12 13 |
회차 : 0, 예측 숫자 : 2, 실제 숫자 : 2 회차 : 1, 예측 숫자 : 1, 실제 숫자 : 1 회차 : 2, 예측 숫자 : 6, 실제 숫자 : 5 회차 : 3, 예측 숫자 : 2, 실제 숫자 : 2 회차 : 4, 예측 숫자 : 8, 실제 숫자 : 8 회차 : 5, 예측 숫자 : 1, 실제 숫자 : 1 회차 : 6, 예측 숫자 : 0, 실제 숫자 : 0 회차 : 7, 예측 숫자 : 8, 실제 숫자 : 5 회차 : 8, 예측 숫자 : 8, 실제 숫자 : 8 회차 : 9, 예측 숫자 : 6, 실제 숫자 : 6 정확도 = 0.7999999999999999 |