첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
------------------------------------------------------------------------------------------------------------------------------------------------------
728x90
728x170

■ K-최근접 이웃(KNN, K-Nearest Neighbors) 알고리즘을 사용하는 방법을 보여준다.

 

▶ input_data.py

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

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))

 

▶ 결과

회차 : 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
728x90
그리드형(광고전용)
Posted by icodebroker
,