[PYTHON/TENSORFLOW] K-최근접 이웃(KNN, K-Nearest Neighbors) 알고리즘 사용하기
Python/tensorflow 2018. 7. 8. 15:57728x90
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
그리드형(광고전용)
'Python > tensorflow' 카테고리의 다른 글
[PYTHON/TENSORFLOW] Tensor 클래스 : get_shape 메소드를 사용해 랭크 구하기 (0) | 2018.07.29 |
---|---|
[PYTHON/TENSORFLOW] placeholder 함수 사용하기 (0) | 2018.07.29 |
[PYTHON/TENSORFLOW] 다층 퍼셉트론 신경망 만들기 (MNIST) (0) | 2018.07.09 |
[PYTHON/TENSORFLOW] 단일 계층 퍼셉트론 신경망 만들기 (MNIST) (0) | 2018.07.09 |
[PYTHON/TENSORFLOW] K-평균 군집화(K-Means Clustering) 알고리즘 사용하기 (0) | 2018.07.08 |
[PYTHON/TENSORFLOW] MNIST 데이터 로드하기 (0) | 2018.07.08 |
[PYTHON/TENSORFLOW] 선형 회귀 알고리즘 사용하기 (0) | 2018.07.06 |
[PYTHON/TENSORFLOW] 편미분 방정식을 사용해 빗방울 시뮬레이션 하기 (0) | 2018.07.06 |
[PYTHON/TENSORFLOW] 몬테카를로 기법을 사용해 원주율 구하기 (0) | 2018.07.06 |
[PYTHON/TENSORFLOW] random_uniform 함수 : seed를 사용해 난수 생성하기 (0) | 2018.07.06 |