機器學習 k 近鄰演算法(kNN)學習筆記

2021-08-28 10:14:07 字數 1626 閱讀 6597

knn的工作原理是:有乙個訓練樣本集,並且樣本集中每個資料都存在標籤(對應關係)。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料(最近鄰)的分類標籤。

我們只選擇樣本資料集中前k個最相似的資料,這就是knn中的k,通常取不大於20的整數。

最後,選擇k個最相似資料中出現次數最多的分類,作為新資料的分類。

knn演算法的一般流程:

收集資料:可以使用任何方法。

準備資料:距離計算所需要的數值,最好是結構化的資料格式。

分析資料:可以使用任何方法。

訓練演算法:不需要。

測試演算法:計算錯誤率。

使用演算法:首先,輸入樣本資料和結構化的輸出結果;然後,執行knn演算法判定輸入資料分別屬於哪個分類;最後,對計算出的分類執行後續的處理。

具體實現時依次執行如下操作:

計算已知類別資料集中的點與當前點之間的距離。

按照距離遞增次序排序。

選取與當前點距離最小的k個點。

確定前k個點所在類別的出現頻率。

返回前k個點出現頻率最高的類別作為當前點的**分類。

下面是例子雖然簡單沒有實際的使用價值,但是可以展示出乙個knn演算法的思想。

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

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

datasetsize = dataset.shape[0]

#下面的四行**計算距離

diffmat = tile(inx, (datasetsize, 1)) - dataset

sqdiffmat = diffmat ** 2

sqdistances = sqdiffmat.sum(axis=1)

distances = sqdistances ** 0.5

#對距離進行排序

sorteddistindicies = distances.argsort()

classcount = {}

#確定前k個較小距離的類別

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

classcount[voteilabel] = classcount.get(voteilabel, 0) + 1

#獲得最大頻率的類別

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

return sortedclasscount[0][0]

我將上面的**儲存為knn.py,然後在終端執行如下操作:

機器學習 k 近鄰 kNN 演算法

一 基本原理 存在乙個樣本資料集合 也稱訓練樣本集 並且樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最近鄰 的分類標籤。我們一般只選擇樣本集中前k k通常是不大於20的整數 個最相似的資料,最後選擇k個...

機器學習 k近鄰演算法 kNN

knn演算法通過計算當前測試樣本與離它最近的k個點的距離,進行投票,得到它最有可能的分類結果。首先來看看機器學習演算法的基本流程 由此可見knn演算法的特點 1.k近鄰演算法是非常特殊的,可以認為是沒有模型的演算法。2.為了和其他演算法統一,可以認為訓練資料集就是模型本身。這也是scikit lea...

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

簡單地說,k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定。缺點 計算複雜度高 空間複雜度高。適用範圍 數值型和標稱型。對於該演算法更通俗的說法,拿到乙個資料a,計算其與資料集c中的資料的距離,通過使用特徵值進行求歐式距離。然後排序取出其前k相鄰的...