3.例子
k-近鄰演算法(k-nearest neighbour algorithm),又稱為knn演算法,是機器學習中原理最簡單的演算法。
給定乙個已知標籤類別的訓練資料集,輸入沒有標籤的新資料後,在訓練資料集中找到與新資料最鄰近的k個例項,如果這k個例項的多數屬於某個類別,那麼新資料就屬於這個類別。可以簡單理解為:由那些離x最近的k個點來投票決定x歸為哪一類。
尤拉距離:
( x(
a)−x
(b))
2+(y
(a)−
y(b)
)2\sqrt-x^)^2+(y^-y^)^2}
(x(a)−
x(b)
)2+(
y(a)
−y(b
))2
當資料集的特徵比較多,為n時:
( x(
a)−x
(b))
2+(y
(a)−
y(b)
)2+(
z(a)
−z(b
))2+
⋯+(n
(a)−
n(b)
)2\sqrt-x^)^2 + (y^-y^)^2 + (z^-z^)^2 + \cdots + (n^-n^)^2}
(x(a)−
x(b)
)2+(
y(a)
−y(b
))2+
(z(a
)−z(
b))2
+⋯+(
n(a)
−n(b
))2
# 腫瘤**案例
import numpy as np
import matplotlib.pyplot as plt
# row data 是python中普通的list
row_data_x =[[
3.3935
,2.3312],
[3.1101
,1.7815],
[1.3438
,3.3684],
[3.5823
,4.6792],
[2.2804
,2.8670],
[7.4234
,4.6965],
[5.7451
,3.5340],
[9.1722
,2.5111],
[7.7928
,3.4241],
[7.9398
,0.7916]]
# 0:良性腫瘤,1:惡性腫瘤
row_data_y =[0
,0,0
,0,0
,1,1
,1,1,1]
# 將資料變為np資料
x_train = np.array(row_data_x)
y_train = np.array(row_data_y)
x = np.array(
[8.0936
,3.3657])
# 給定待測點
# plot,將不同label的點區分開
plt.scatter(x_train[y_train==0,
0],x_train[y_train==0,
1],color=
'r')
# 注意這種取值方式
# 計算待測點與所有點的距離,並放到1個列表
from math import sqrt
distances =
[sqrt(np.
sum(
(x_train - x)**2
))for x_train in x_train ]
# 找出距離最近的k個點,並知道它的label
k =6
arg_nearests = np.argsort(distances)
top_k =
[y_train[arg_nearest]
for arg_nearest in arg_nearests[
:k]]
print
("the nearest is: \n"
, top_k)
the nearest is:
[1, 1, 1, 1, 1, 0]
# 計算各個元素的數量
from collections import counter
counter(top_k)
counter()
votes = counter(top_k)
votes.most_common(1)
# 求最多的值,1表示最多的1個
[(1, 5)]
votes.most_common(1)
[0][
0]# 選這個列表的第0個,元組的第0個
1
最後判斷改待測點最大可能是 機器學習手記 6 KNN演算法
knn演算法,是監督學習,已知一組訓練資料,知道多個特徵對應值和所屬類別,然後新增測試資料,計算測試樣本在多特徵空間上到各類別訓練資料的歐式距離,距離那個類別訓練資料集的距離小,就屬於那個類別。需要指出這個對於訓練資料集的選擇很重要,如果某類樣本很多,另一類樣本較少,這會對分類結果有影響。另外knn...
機器學習實戰《學習筆記》 KNN
新增編碼方式 coding utf 8 from numpy import import operator 準備資料 defcreatedataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1 labels a a b b return group,labels 使...
學習筆記 機器學習實戰 KNN
knn演算法注釋版,新手小白,有錯誤歡迎指正 環境 python 3.6 knn分類器 def classify inx,dataset,labels,k inx為行向量 datasize dataset.shape 0 求訓練集的行數 diffmat tile inx datasize,1 dat...