KNN 演算法舉例

2021-10-24 00:20:37 字數 3270 閱讀 8684

找了個時間來寫一下knn的演算法,發現了不少意外的驚喜,以前有些馬馬虎虎的東西今天居然理解了,並發現了幾篇好博文可以和大家分享。

knn主要是利用資料特徵與其他已知資料的遠近程度來進行分類。

import matplotlib.pyplot as plt

import numpy as np

import operator

#已知分類的資料

x1 = np.array([3

,2,1

])y1 = np.array(

[104

,100,81

])x2 = np.array(

[101,99

,98])

y2 = np.array([10

,5,2

])#用散點方式畫出來,乙個是紅點乙個是藍點

scatter1 = plt.scatter(x1,y1,c=

'r')

scatter2 = plt.scatter(x2,y2,c=

'b')

#未知資料

x = np.array([18

])y = np.array([90

])scatter3 = plt.scatter(x,y,c=

'k')

#畫圖例

#傳入資料和設定標籤

plt.legend(handles=

[scatter1,scatter2,scatter3]

,labels=

['labela'

,'labelb'

,'x'

],loc=

'best'

)plt.show(

)

畫出的影象如下:

#已知分類資料

x_data = np.array([[

3,104],[

2,100],[

1,81]

,[101,10]

,[99,

5],[

81,2]

])y_data = np.array(

['a'

,'a'

,'a'

,'b'

,'b'

,'b'])

x_test = np.array([18

,90])

#計算樣本數量

#shape函式用來計算樣本的行數和列數等資料

#0代表計算出它的行數

x_data_size = x_data.shape[0]

x_data_size

6

#複製x_test

#tile函式把左邊複製給右邊

#x_data_size代表行複製6次

#1代表列複製一次

np.tile(x_test,

(x_data_size,1)

)

out[9]:array([[ 15, -14],

[ 16, -10],

[ 17, 9],

[-83, 80],

[-81, 85],

[-63, 88]])

#計算差值的平方

sqdiffmat = diffmat**

2sqdiffmat

out[10]:array([[ 225, 196],

[ 256, 100],

[ 289, 81],

[6889, 6400],

[6561, 7225],

[3969, 7744]], dtype=int32)

#求和

#這裡解釋一下,若sum函式中不加任何東西,則是對整個陣列進行加法

#若axis的值為0,則表示列相加

#若axis的值為1,則表示行相加

sqdistances = sqdiffmat.

sum(axis=1)

sqdistances

array([ 421, 356, 370, 13289, 13786, 11713], dtype=int32)

#開方

distances = sqdistances**

0.5distances

out[12]:array([ 20.51828453, 18.86796226, 19.23538406, 115.27792503,

117.41379817, 108.2266141 ])

#從小到大排序

#argsort為排序函式

sorteddistances = distances.argsort(

)sorteddistances

array([1, 2, 0, 5, 3, 4], dtype=int64)

classcount =

#設定k

#k的值代表離它最近的五個資料

k =5

for i in

range

(k):

#獲取標籤

votelabel = y_data[sorteddistances[i]

]#統計標籤數量

classcount[votelabel]

= classcount.get(votelabel,0)

+1

classcount
out[15]:

#根據operator.itemgetter(1)-第乙個值對classcount排序,然後再取倒序

sortedclasscount =

sorted

(classcount.items(

),key=operator.itemgetter(1)

,reverse=

true

)sortedclasscount

[(『a』, 3), (『b』, 2)]

#獲取數量最多的標籤

knnclass = sortedclasscount[0]

[0]knnclass

『a』

分類完成!

KNN演算法 鄰近演算法

knn演算法是機器學習裡面比較簡單的乙個分類演算法了,整體思想比較簡單 計算乙個點a與其他所有點之間的距離,取出與該點最近的k個點,然後統計這k個點裡面所屬分模擬例最大的,則點a屬於該分類。這樣講可能還有點迷糊,下面用乙個例子來說明一下 電影名稱 打鬥次數 接吻次數 電影型別 california ...

KNN演算法(鄰近演算法)

鄰近演算法 或者說k最近鄰 knn,k nearestneighbor 分類演算法是 資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。knn演算法的核心思想 是如果乙個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類...

演算法 K NN鄰近演算法

關注公zhong號 落葉歸根的豬。獲取資源,交個朋友 k nearest neighbors 1.基本概念與原理 k近鄰演算法是一種基本分類和回歸方法。knn演算法非常簡單且非常有效。knn的模型表示是整個訓練資料集。該演算法的思想是 乙個樣本與資料集中的k個樣本最相似,如果這k個樣本中的大多數屬於...