找了個時間來寫一下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個樣本中的大多數屬於...