傳統機器學習模型knn

2021-10-03 06:50:00 字數 1928 閱讀 9918

一種簡單的分類模型

分類依據:

看離待分點最近的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矩陣...