今天完成了老師布置的tensorflow實驗4:
實驗目的
1.掌握使用
tensorflow
進行knn
操作2.掌握
knn
演算法的原理
實驗原理
knn的基本原理:
knn是通過計算不同特徵值之間的距離進行分類。
整體的思路是:如果乙個樣本在特徵空間中的k個最相似
(即特徵空間中最鄰近
)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。
k通常是不大於
20的整數。
knn演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在分類決策上只依據最鄰近的乙個或者幾個樣本的類別來決定待分類樣本所屬的類別。
knn演算法要解決的核心問題是
k值選擇,它會直接影響分類結果。如果選擇較大的
k值,就相當於用較大領域中的訓練例項進行**,其優點是可以減少學習的估計誤差,但缺點是學習的近似誤差會增大。如果選擇較小的
k值,就相當於用較小的領域中的訓練例項進行**,「學習」近似誤差會減小,只有與輸入例項較近或相似的訓練例項才會對**結果起作用,與此同時帶來的問題是「學習」的估計誤差會增大,換句話說,
k值的減小就意味著整體模型變得複雜,容易發生過擬合;
使用tensorflow進行
knn演算法的整體過程是先設計計算圖,然後執行會話,執行計算圖的過程,整個過程的資料可見性比較差。以上精確度的計算以及真實標籤和**標籤的比較結果其實使用
numpy
和python
的變數。
實驗環境
linux ubuntu 14.04
python 3.6.0
pycharm
tensorflow
實驗內容
使用tensorflow進行
k近鄰演算法的操作。
實驗步驟
匯入實驗所需要的模組
匯入實驗所需的資料
設定訓練集與測試集的batch大小
構造計算圖,使用佔位符placeholder函式構造變數xtr,xte,**如下:
求資料之間的距離,並取最小的值。
初始化全部變數
使用tf.session()建立session會話物件,會話封裝了tensorflow執行時的狀態和控制。
訓練模型,並用測試資料**其準備率。
完整**:
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
import os
os.environ["cuda_visible_devices"]="0"
mnist = input_data.read_data_sets("../案例/data",one_hot=true)
xtr,ytr=mnist.train.next_batch(5000)
xte,yte=mnist.test.next_batch(200)
xtr=tf.placeholder("float",[none,784])
xte=tf.placeholder("float",[784])
distance = tf.reduce_sum(tf.abs(tf.add(xtr,tf.negative(xte))),reduction_indices=1)
pred=tf.argmin(distance,0)
accuracy = 0
init=tf.global_variables_initializer()
with tf.session() as sess:
sess.run(init)
for i in range(len(xte)):
nn_index = sess.run(pred, feed_dict=)
print("test", i , "prediction:", np.argmax(ytr[nn_index]), "true class:", np.argmax(yte[i]))
if np.argmax(ytr[nn_index]) == np.argmax(yte[i]):
accuracy += 1./len(xte)
print("done!")
print("accuacy:" , accuracy)
執行結果為:
學習進度筆記
學習進度筆記26 分類演算法 分類演算法屬於監督式學習,使用類標籤已知的樣本建立乙個分類函式或分類模型,應用分類模型,能把資料庫中的類標籤未知的資料進行歸類。分類在資料探勘中是一項重要的任務,目前在商業上應用最多,常見的典型應用場景有流失 精確營銷 客戶獲取 個性偏好等。mllib 目前支援分類演算...
學習進度筆記
學習進度筆記24 讀取檔案演示 import org.apache.spark.sparkconf import org.apache.spark.streaming.import org.apache.spark.streaming.streamingcontext.object fileword...
學習進度筆記
學習進度筆記16 scala語言學習 object testmap def ttt f int int unit val r f 10 println r val f0 x int x x 定義了乙個方法 def m0 x int int 傳遞進來的引數乘以10 x 10 將方法轉換成函式,利用了神...