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)
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...