第一步:將每個例子做成乙個點,他所對應發特徵向量是乙個多維的座標
第二步:自己選擇乙個引數k
第三步:計算未知例項與所有已知例項的歐式距離(也可以是其他距離),將他們排序。
第四步:選擇根據排序好的k去選擇k個已知例項
第五步:在這k個例項中,根據少數服從多數的原則,讓未知例項歸類到為最多數的類別
程式如下:
importnumpy as
npfrom
sklearn import
datasets
#求出每個測試集與訓練集的歐氏距離,經過從小到大的排序,取前k個的,然後經過投票,得到**值。
def
k_nn(train_x
, train_y
, test_data, k
):m_train = np.shape(train_x
)[0] #5000*784
predict =
k_index={}
for
i_train in
range(m_train):
k_index[i_train]=cal_k_index(train_x
[i_train,
:],test_data
) k_result =
sorted(k_index.items(),
key=
lambda
d: d[1])
result =
count =
0for
x in
k_result:
if count >= k:
break
count +=
1, result))# 得到**
return
predict
#根據少數服從多數的原則,得到測試集的**值。
def
get_prediction(train_y
,result
):result_dict = {}
for
i in
range(len(result
)):if
train_y
[result
[i]] not in
result_dict:
result_dict[train_y
[result
[i]]] =
1else
:result_dict[train_y
[result
[i]]] +=
1predict =
sorted(result_dict.items(),
key=
lambda
d: d[1])
return
predict[0][0]
#計算歐式距離
def
cal_k_index(train_x
,test_date
):dist = np.sqrt(np.sum(np.square( train_x
-test_date
))) return
dist
#計算**值的精度
def
get_correct_rate(result
, test_y
):m =
len(result
) correct=
0for
i in
range(m):
if result
[i] ==
test_y
[i]:
correct +=
1return
correct / m
def
main():
# train_x, train_y, test_x, test_y = load_file()#當使用讀取檔案時使用
#從機器學習sklearn庫匯出iris庫 iris是乙個150*4的庫
iris=datasets.load_iris()
sourcedata=iris['data'] #得到屬性向量
labledata=iris['target'] #得到類別標記
#劃分訓練集和測試集
train_x=sourcedata[0
:139,:]
train_y=labledata[0
:139]
test_x=sourcedata[140
:150,:]
test_y=labledata[140
:150]
global
result
result={}
for
i in
range(10):
result[i] = k_nn(train_x, train_y,test_x[i,
:],10)
correct=get_correct_rate(result, test_y)
print(result,correct)
if __name__==
'__main__'
:main()
如果是kpl檔案就加入以下程式:
讀取壓縮的pkl格式的檔案def
load_file():
with
gzip.open("./mnist.pkl.gz"
,'rb') as
fp:training_data, valid_data, test_data = pickle.load(fp,
encoding
='iso-8859-1')
return
training_data[0], training_data[1], test_data[0],test_data[1]
KNN K鄰近演算法
knn演算法又稱為k最近鄰分類演算法,是一種監督學習類方法,並且knn演算法不需要預先訓練,也就是說knn演算法只有測試過程,沒有訓練過程。所謂的k最近鄰,就是指最接近的k個鄰居 資料 核心思想是 在乙個含未知樣本的空間,可以根據離這個樣本最鄰近的k個樣本的資料型別來確定樣本的資料型別。你可以簡單的...
kNN k鄰近演算法
k近鄰演算法 在特徵空間中,如果乙個樣本附近的k個最近 即特徵空間中最鄰近 樣本的大多數屬於某乙個類別,則該樣本也屬於這個類別。下面在jupyter notebook中一步一步實現k鄰近演算法 knn.py的 如下 coding utf 8 import numpy as np from math ...
機器學習 KNN K 最鄰近演算法
k 近鄰學習是一種常用的監督學習方法,比如 判斷乙個人的人品,只需要觀察與他來往最密切的幾個人的人品好壞就可以得出,即 近朱者赤,近墨者黑 理論 原理 物以類聚,人以群分 乙個對於knn演算法解釋最清楚的圖如下所示 藍方塊和紅三角均是已有分類資料,當前的任務是將綠色圓塊進行分類判斷,判斷是屬於藍方塊...