K nn(k鄰近學習)

2021-08-14 07:02:45 字數 3001 閱讀 8147

第一步:將每個例子做成乙個點,他所對應發特徵向量是乙個多維的座標

第二步:自己選擇乙個引數k

第三步:計算未知例項與所有已知例項的歐式距離(也可以是其他距離),將他們排序。

第四步:選擇根據排序好的k去選擇k個已知例項

第五步:在這k個例項中,根據少數服從多數的原則,讓未知例項歸類到為最多數的類別

程式如下:

import 

numpy 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演算法解釋最清楚的圖如下所示 藍方塊和紅三角均是已有分類資料,當前的任務是將綠色圓塊進行分類判斷,判斷是屬於藍方塊...