K近鄰(KNN) 分類演算法

2021-06-22 07:49:58 字數 2470 閱讀 4503

k近鄰(knn):分類演算法

* knn是non-parametric分類器(不做分布形式的假設,直接從資料估計概率密度),是memory-based learning.

* knn不適用於高維資料(curse of dimension)

* machine learning的python庫很多,比如mlpy(更多packages),這裡實現只是為了掌握方法

* matlab 中的呼叫,見《matlab分類器大全(svm,knn,隨機森林等)》

* knn演算法複雜度高(可用kd樹優化,c中可以用libkdtree或者ann)

* k越小越容易過擬合,但是k很大會降分類精度(設想極限情況:k=1和k=n(樣本數))

本文不介紹理論了,注釋見**。

knn.py

[python]view plain

copy

from

numpy 

import

*  import

operator  

class

knn:  

defcreatedataset(

self

):  

group = array([[1.0

,1.1

],[1.0

,1.0

],[0,0

],[0

,0.1

]])  

labels = ['a'

,'a'

,'b'

,'b'

]  return

group,labels  

defknnclassify(

self

,testx,trainx,labels,k):  

[n,m]=trainx.shape  

#calculate the distance between testx and other training samples

difference = tile(testx,(n,1

)) - trainx 

# tile for array and repeat for matrix in python, == repmat in matlab

difference = difference ** 2

# take pow(difference,2)

distance = difference.sum(1

) # take the sum of difference from all dimensions

distance = distance ** 0.5

sortdiffidx = distance.argsort()  

# find the k nearest neighbours

vote = {} #create the dictionary

fori 

inrange(k):  

ith_label = labels[sortdiffidx[i]];  

vote[ith_label] = vote.get(ith_label,0)+1

#get(ith_label,0) : if dictionary 'vote' exist key 'ith_label', return vote[ith_label]; else return 0

sortedvote = sorted(vote.iteritems(),key = lambda

x:x[

1], reverse = 

true

)  # 'key = lambda x: x[1]' can be substituted by operator.itemgetter(1)

return

sortedvote[0][

0]  

k = knn() #create knn object

group,labels = k.createdataset()  

cls= k.knnclassify([0,

0],group,labels,

3)  

print

cls

-------------------

執行:

1. 在python shell 中可以執行knn.py

>>>importos

>>>os.chdir("/users/mba/documents/study/machine_learning/python/knn")

>>>execfile("knn.py")

輸出b(b表示類別)

2. 或者terminal中直接執行

$ python knn.py

3. 也可以不在knn.py中寫輸出,而選擇在shell中獲得結果,i.e.,

>>>import knn

>>> knn.k.knnclassify([0,0],knn.group,knn.labels,3)

k近鄰分類 kNN

k近鄰分類 knn 一 knn原理 knn屬於監督分類方法,原理是利用某種距離度量方式來計算未知資料與已知資料的距離,並根據距離來確定資料光譜間的相似性,選取最近的k個距離作為判定未知資料類別的依據。在分類時,knn常用方法有 投票法,根據k個距離對應已知資料的類別進行統計,把出現次數最多的類別作為...

k近鄰法 kNN分類

模型原型 sklearn.neighbors.kneighborsclassifier n neighbors 5,weights uniform algorithm auto leaf size 30,p 2,metric minkowski metric params none,n jobs 1...

k 近鄰演算法(KNN)演算法概述(分類器)

knn通過測量不同特徵值之間的距離進行分類。大致思路 乙個樣本在k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別。那麼該樣本也屬於這個類別。用圖來舉例子 1.資料預處理 主要是將提供的資料集處理成函式可以處理的資料 def file2matrix filename fr open fi...