機器學習實戰之K 近鄰演算法(KNN)(一)理論

2021-10-05 14:26:45 字數 2128 閱讀 6249

knn是k-nearest neighbor的簡寫,直譯為k-近鄰演算法。

顧名思義,找到最近的k個資料,在前k個資料中選擇佔比最高的類別作為**類別。

如**分類的例子,**可以分為軍事**和網遊**,軍事**的以戰爭描寫為主,網遊**以網路遊戲描述為主。假設一本沒看過的**(假設這本**是軍事**和網遊**之一),我們使用k-近鄰演算法來進行判斷它是屬於軍事**還是網遊**。

我們統計了3本軍事**和3本網遊**裡出現戰爭描述和網路遊戲描述的次數,以及我們沒看過的這本**裡出現戰爭描述和網路遊戲描述的次數。如下表所示。

**名稱

戰爭描述

網遊描述型別1

252網遊2

505戰爭3

140網遊4

250網遊5

513戰爭6

492戰爭7

945未知k-近鄰演算法是怎麼判斷的呢,計算未知的**與那6本**的距離,距離的演算法再說,下表是計算出的距離。

**名稱

距離型別

49.3網遊3

9.6網遊110

網遊257戰爭

659.5戰爭5

59.7

戰爭把距離按照從小到大排序之後,我們可以找到k個距離最近的電影。假定k=3,可以看出最近的3個**是4、3和1,型別都是網遊**,因此我們判斷未知**為網遊**。

這就是knn的簡單描述。

優點

簡單,易於理解和實現,無需估計引數;

適合對稀有事件進行分類;

特別適合於多分類問題(multi-modal,物件具有多個類別標籤)。

缺點

計算量較大,要對每乙個待分類的文字都要計算它到全體已知樣本的距離。

空間複雜度高。

適用資料:標稱型和數值型。

標稱型:一般在有限的資料中取,而且只存在『是』和『否』兩種不同的結果。

數值型:可以在無限的資料中取,而且數值比較具體化,例如5.03,2.85這種值。

來自機器學習實戰這本書。

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

defclassify0

(inx,dataset,labels,k)

: datasetsize = dataset.shape[0]

#計算歐氏距離

diff1 = tile(inx,

(datasetsize,1)

)- dataset

diff2 = diff1**

2 diff3 = diff2.

sum(axis=1)

diff4 = diff3**

0.5 diff = diff4.argsort(

) classcount=

#選擇最小的距離

for i in

range

(k):

voteilabel = labels[diff[i]

] classcount[voteilabel]

= classcount.get(voteilabel,0)

+1#排序 sortedclasscount =

sorted

( classcount.iteritems(

),key=operator.itemgetter(1)

,reverse=true)

return sortedclasscount[0][0]

en

機器學習實戰 KNN演算法(K近鄰)

演算法實現 演算法應用舉例 k近鄰演算法是機器學習最簡單的演算法之一,也是機器學習的初步,其主要通過大量的資料分析,判斷一組未知資料和各資料的距離,從而對一組未知資料進行相應的歸類。而所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。所以knn演算法並不是十分完...

《機器學習實戰》 k近鄰分類演算法kNN

knn全稱為k nearest neighbors,是模式識別中比較簡單的一種演算法,可以用於分類和回歸。使用時,輸入的訓練樣本帶有標籤,輸出根據是用於分類還是回歸 分類問題的輸出為 找出k個和要 物件最近鄰的樣本,這k個樣本中,大多數 屬於哪一類即為 物件的分類標籤。回歸問題的輸出為 找出k個和回...

機器學習之 K近鄰演算法(KNN)

k近鄰演算法是機器學習中的最基礎的演算法之一,也是必須會講解的演算法之一。因為其簡單,易懂。但是k近鄰演算法在實際應用中卻很少使用到,由於其侷限性很強,執行效率低下。那麼所謂的k近鄰中的近鄰是指 已有乙個訓練資料集,現給定乙個新的資料,利用現有資料集對其進行 那麼 方法便是尋找與給定資料距離最近的k...