一種簡單的分類模型
分類依據:
看離待分點最近的k個鄰居屬於哪個分類的最多,通過調整k的值,可能會得到不同的分類效果
步驟:1.給出已標註好的資料點i(i=1,…,n)的座標(xi,
yi
x_i,y_i
xi,yi
)以及類別t
it_i
ti(取值為0或1)
2.給出新加入點的座標(x0,
y0
x_0,y_0
x0,y0
),計算它到每個標註點的距離(歐氏距離)
3.根據上一步求到的距離,找出離它最近的k個點
4.最近的k個點中,數量最多的那個類別就判定為新加入點的類別
#手寫knn分類模型
import numpy as np
import math
from collections import counter
#已知標記點
mp = np.array([[
(1,1
),2]
,[(0.4
,5.2),
1],[
(-2.8,
-1.1),
2],[
(3.2
,1.4),
1],[
(-1.3,
3.2),1
],[(
-3,3.1),
2]])
feature = mp[:,
0]#特徵print
(feature)
print
(feature[2]
[0])
label = mp[:,
-1]#結果分類
print
(label)
#新增標記點
new_mp1 =(-
2.6,
6.6)
new_mp2 =
(1.4
,1.6
)new_*** =(-
2.5,
1.2)
#計算距離並返回序號(從小至大)
defdistence
(x,y)
: data =
list()
#宣告列表
i =0while i <6:
a = x[i][0
]**2- y[0]
**2b = x[i][1
]**2- y[1]
**2c =
(a+b)
**0.5
i +=
1for z in data:
print
(z) sortindex = np.argsort(data)
#返回原序號
print
(sortindex)
return sortindex
outcome = distence(feature,new_mp1)
label_new = label[outcome]
#重新排序
print
(label_new)
new_list =
list()
#給定k值
for k in
range(1
):new_list1 = label_new[new_list]
#print(new_list1)
#計算k個滿足標記點中各型別的個數
demo = counter(new_list1)
if demo[1]
> demo[2]
:print
('new_mp1是『1』型別'
)else
:#滿足條件個數一樣多時,歸為2型別
print
('new_mp1是『2』型別'
)
傳統機器學習 之KNN回歸演算法(二)
回歸與分類概念,參考博文 knn做回歸和分類的主要區別在於最後做 時候的決策方式不同。knn做分類 時,一般是選擇多數表決法,即訓練集裡和 的樣本特徵最近的k個樣本,為裡面有最多類別數的類別。而knn做回歸時,一般是選擇平均法,即最近的k個樣本的樣本輸出的平均值作為回歸 值。1 計算樣本到資料集中其...
機器學習 KNN
posted on 2015 05 21 20 34 in ml 0 comment views 3195 原始碼 決策樹和基於規則的分類器都是積極學習方法 eager learner 的例子,因為一旦訓練資料可用,他們就開始學習從輸入屬性到類標號的對映模型。乙個相反的策略是推遲對訓練資料的建模,直...
機器學習 KNN
定義事件ejl j 0,1.k e j epsilon 0,1.k ejl j 0,1.k 為對於標籤 l,k個鄰居中包換j個這個標籤,則 e為乙個 k n 的矩陣,每一行為距離該例項的樣本中每個標籤的數量,則 c l 向量是e矩陣的最後一行,表示距離為k時的各個標籤數量。則我們需要的是在已知e矩陣...