Python中的k 近鄰演算法(處理常見的分類問題)

2021-08-28 11:54:06 字數 1953 閱讀 2240

最近買了一本機器學習的書,書名叫《機器學習實戰》,剛學了第乙個演算法,k—近鄰演算法,所以寫篇部落格分享一下。

那麼開始,我們假設平面座標系上面有四個座標點,座標分別是

[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]
然後這四個點有兩個分類,分別是:

['a', 'a', 'b', 'b']
那麼如果出現第五個點,我們怎麼確定它,是a類還是b類呢,這個問題我們就可以用到我們今天介紹的演算法了。

我們看**:

from numpy import *

import operator

def createdataset():

group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])

labels = ['a', 'a', 'b', 'b']

return group, labels

**中我們匯入兩個模組,numpy和operator,之後會用到,然後我們定義了乙個樣本集,放的正好是我們剛剛給出的資料。

然後,我們寫乙個函式,去處理資料,引數有四個,分別是我們要處理的第五個點的座標,樣本座標集合,分類集合,和k值(即排序比對的前k個元素),下面是函式**:

def classify0(inx, dataset, labels, k):

datasetsize = dataset.shape[0]#shape[0]取矩陣第二維的長度,4

diffmat = tile(inx, (datasetsize, 1)) - dataset#tile函式,將制定陣列按照行列數轉換為矩陣4行1列

sqdiffmat = diffmat**2#矩陣減去初始座標做平方運算

sqdistances = sqdiffmat.sum(axis=1)#橫縱座標求和並開方求出與四個樣本點的距離

distances = sqdistances**0.5

sorteddistindicies = distances.argsort()#距離排序,返回值為公升序的索引陣列

classcount = {}

for i in range(k):#遍歷前k個元素

voteilabels = labels[sorteddistindicies[i]]

classcount[voteilabels] = classcount.get(voteilabels, 0) + 1#分類名作為字典的鍵,如果字典中不包含該元素,default值為0

#sorted函式:把字典的iterator,通過第乙個域的大小排序,是否降序,是

sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)

return sortedclasscount[0][0]#返回分類名次數最多的類

注釋中有講到每乙個函式的功能,然後我們講一下原理:

1.首先我們將給定的座標按照樣本數量返回乙個相同長度的列表

2.經過計算我們得到座標到每乙個點的距離,排序

3.排序以後擷取前k個元素,獲得對應索引的分類類名

4.根據分類類名的出現次數,再次排序,次數越多,排序越靠前

5.返回次數出現最多的類名,即排序後列表的[0][0]元素

函式寫完了,以上**我們儲存為knn.py作為乙個模組使用

那我們看一下執行**:

import knn

group, labels = knn.createdataset()

result = knn.classify0([0, 0], group, labels, 3)

print(result)

列印出結果是:

b
所以第五個點[0,0],應該分為b類

k近鄰演算法 python實現

k近鄰演算法 k nearest neighbor,knn 是一種非常直觀的,易於理解的有監督的演算法 對於乙個待分類的樣本,在已知的樣本集合中尋 找與它距離最近的k個樣本,及所謂的k近鄰。通過這這k個近鄰的所述類別來決定分類結果。距離度量距離度量方法有很多種,例如 歐式距離 曼哈頓距離 切比雪夫距...

k近鄰演算法 python實現

特徵距離計算 距離計算方法有很多,這裡先列三種 簡單例子 電影型別 根據歐氏距離計算公式,算出未知電影與已知電影型別之間的距離。電影名稱 打鬥鏡頭 接吻鏡頭 電影型別 歐式距離13 104愛情片 20.522 100愛情片 18.731 81愛情片 19.2 4101 10動作片 115.3599 ...

K近鄰演算法 python實現

k近鄰演算法 演算法原理 將資料轉換成向量形式 計算輸入向量與樣本中的距離 比如歐式距離等 對距離計算結果排序 取前k個 根據指定規則 多數或者按照一定權重進行計算 確定輸入向量類別。python實現 import numpy as np import operator class knnmetho...