機器學習實戰 k 近鄰演算法

2021-10-06 00:07:06 字數 1978 閱讀 3990

2.1 k-近鄰演算法概述

k-近鄰演算法(knn)採用測量不同特徵值之間的距離方法進行分類。

k-近鄰演算法的一般流程:

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

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

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

訓練演算法:此步驟不適用於k-近鄰演算法。

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

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

2.1.1 準備:使用 python 匯入資料

#檔名 knn.py

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

於是,在另一同目錄的 py 檔案中,便能呼叫 knn.py 檔案:

import knn

group,labels = knn.createdataset(

)print

(group)

print

(labels)

2.1.2 實施 knn 演算法

偽**:

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

按照距離遞增次序排序;

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

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

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

程式:k-近鄰演算法

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(

)#選擇距離最小的k個點

classcount=

for i in

range

(k):

voteilabel = labels[sorteddistindicies[i]

] classcount[voteilabel]

= classcount.get(voteilabel,0)

+1#排序 sortedclasscount =

sorted

(classcount.iteritems(

),key=operator.itemgetter(1)

,reverse=

true

)return sortedclasscount[0]

[0]

其中,用於分類的輸入向量 inx,輸入的樣本訓練集 dataset,標籤向量 labels,近鄰數目 k。

2.1.3 如何測試分類器

為了測試分類器的效果,我們可以使用已知答案的資料,當然答案不能告訴分類器,檢驗分類器給出的結果是否符合預期結果。通過大量的測試資料,我們可以得到分類器的錯誤率——分類器給出錯誤結果的次數除以測試執行的總數。錯誤率是常用的評估方法,主要用於評估分類器在某個資料集上的執行效果。

《機器學習實戰》 K 近鄰演算法

基本原理 通過計算新資料與給定的樣本資料之間的距離,來確定相似度排名 然後取前k個最相似的樣本,統計這k 一般不大於20 個樣本中出現最多的分類,設為新資料的分類。新資料,訓練樣本集,樣本資料標籤 即分類 最近鄰 前k個最相似資料 最近鄰標籤 演算法實施 首先提取要比較的特徵,確定各特徵的權重,進行...

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

簡單的說,k 近鄰演算法採用測量不同特徵值之間的距離辦法進行分類.收集資料 可以使用任何方法。準備資料 距離計算所需要的數值,最好是結構化的資料格式。分析資料 可以使用任何方法。訓練演算法 此步驟不適用於k 近鄰演算法。測試演算法 計算錯誤率。使用演算法 首先需要輸入樣本資料和結構化的輸出結果,然後...

機器學習實戰 k 近鄰演算法

本系列是基於 機器學習實戰 這本書做的讀書筆記,原書採用python2作為工具,我則將原書 改為用python3編寫並記錄在此系列中。我將把書中對這些機器學習演算法的定義謄上,然後寫下自己對該演算法的通俗理解,之後貼出書中演算法清單中的 本書講解的第乙個機器學習演算法是k 近鄰演算法 knn 它的工...