鄰近演算法,或者說k最近鄰(knn,k-nearestneighbor)分類演算法是資料探勘分類技術中最簡單的方法之一。
所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。
簡單來說,k-nn可以看成:有那麼一堆你已經知道分類的資料,然後當乙個新資料進入的時候,
就開始跟訓練資料裡的每個點求距離,然後挑離這個訓練資料最近的k個點看看這幾個點屬於什麼型別,然後用少數服從多數的原則, 給新資料歸類。
a:距離度量 b:k值的選擇 c:分類決策的規則
距離度量:
1.歐氏距離是最常見的距離度量,衡量的是多維空間中各個點之間的絕對距離。公式如下:
d is
t(x,
y)=∑
i=1n
(xi−
yi)2
dist(x,y) = \sqrt^}
dist(x
,y)=
i=1∑
n(x
i−y
i)2
2.曼哈頓距離(manhattan distance),公式如下:
d is
t(x,
y)=∑
i=1n
∣xi−
yi∣dist(x,y) = \sum\limits_^
dist(x
,y)=
i=1∑
n∣x
i−y
i∣
如果k=3,綠色圓點的最近的3個鄰居是2個紅色小三角形和1個藍色小正方形,少數從屬於多數,基於統計的方法,判定綠色的這個待分類點屬於紅色的三角形一類。
如果k=5,綠色圓點的最近的5個鄰居是2個紅色三角形和3個藍色的正方形,還是少數從屬於多數,基於統計的方法,判定綠色的這個待分類點屬於藍色的正方形一類。
k越大,模型越簡單,近似誤差也越大。反之,k越小,模型越複雜,越容易發生過擬合。
分類決策規則:
1.多數表決規則
2.距離加權規則
1.算距離
2.找臨近
3.做分類
import tensorflow as tf
import numpy as np
from scipy import stats
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets(
"/tmp/data/"
, one_hot=
true
)x_train, y_train = mnist.train.next_batch(
5000
)x_test, y_test = mnist.test.next_batch(
100)
k =3
target_x = tf.placeholder(
"float",[
1,784]
)#target vector
x = tf.placeholder(
"float",[
none
,784])
#matrix of observations to compare to target
y = tf.placeholder(
"float",[
none,10
])#matrix of one-hot class vectors
l1_dist= tf.reduce_sum(tf.
abs(tf.sub(x, target_x)),
1)#euclidean distance. the sum of squared differences between elements, row-wise.
#nn = tf.argmin(l1_dist, 0)
nn = tf.nn.top_k(
-l1_dist, k)
init = tf.initialize_all_variables(
)accuracy_history =
with tf.session(
)as sess:
sess.run(init)
for obs in
range
(x_test.shape[0]
):nn_index = sess.run(nn, feed_dict =
) pred_classes =
for i in
range
(k):
nn_class = np.argmax(y_train[nn_index[1]
[i]]
)#print nn_class
predicted_class = stats.mode(pred_classes)[0
][0]
true_class = np.argmax(y_test[obs]
)print
"true class: "
+str
(true_class)
+", predicted class: "
+str
(predicted_class)
if predicted_class == true_class:1)
else:0
)print
"model was "
+str
(np.mean(accuracy_history))+
"% accurate"
knn距離度量影響 KNN中K以及 距離度量
從k近鄰演算法 距離度量談到kd樹 sift bbf演算法 結構之法 演算法之道 csdn部落格 blog.csdn.net knn中的k值選取對k近鄰演算法的結果會產生重大影響。如李航博士的一書 統計學習方法 上所說 如果選擇較小的k值,就相當於用較小的領域中的訓練例項進行 學習 近似誤差會減小,...
tensorflow 安裝以及報錯解決
如何安裝,請看中文版本 或者英文 tensorflow官網 安裝方式有多種選擇,我的是mac,用系統自帶的python 2.7,開始用pip方式安裝,執行pip install tensorflow 後,出現如下圖所示,2行紅色的提示 然後我也驗證了下tensorflow 是否安裝成功 我在終端輸入...
mac 安裝pip 以及 tensorflow
安裝tensorflow的時候提示沒有pip,於是需要安裝pip。輸入以下命令可以檢視自己系統是否已經有pip pip v for python 2.7 pip3 v for python 3 如果沒有,在mac上安裝pip的步驟為 sudo easy install pip 安裝的是python2...