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

2021-07-27 15:37:26 字數 2363 閱讀 2138

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

本書講解的第乙個機器學習演算法是k-近鄰演算法(knn),它的工作原理是:

存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中的資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似的資料(即最近鄰)的分類標籤。一般來說,我們只選擇樣本集中前k個最相似的資料,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數。最後選擇k個最相似資料中出現次數最多的分類,作為新資料的分類。

用通俗易懂的話來解釋一下:

假設我們有乙個樣本資料集合叫做「****動作片和愛情片」,我們從中取出乙個資料,叫做《california man》,這部電影就是乙個資料,這個資料有很多特徵,我們這裡假設它有兩個特徵,第乙個特徵是接吻鏡頭數,本電影有104個,第二個特徵是打鬥鏡頭數,本電影有3個

這個資料還有乙個標籤,即《california man》這部電影是乙個愛情片愛情片就是《california man》的這個資料的標籤

這個集合裡的每乙個資料,都像這個《california man》一樣,有這兩個特徵(接吻鏡頭數,打鬥鏡頭數),和乙個標籤(愛情片or動作片)。

這時,我們假設拿到乙個新資料,電影《iron man》打鬥鏡頭數為150,接吻鏡頭數為2,我們的目的,就是找到這個新資料的標籤,為此,我們把這個資料的兩個特徵與樣本資料集合中資料的特徵進行挨個比較,計算差異的大小(即全部畫在乙個二維座標系上,計算點與點之間的距離),我們選擇結果中前k個與其最相似的資料,比如選前三個,發現這三個都是動作片,那麼這個資料《iron man》我們就把他歸為動作片

程式清單2-1 k-近鄰演算法 knn.py

from numpy import *

defcreatedataset

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

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

return group, labels

defclassify0

(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={}

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

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

sortedclasscount = sorted(classcount.keys(), reverse = true)

return sortedclasscount[0][0]

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

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

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

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

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

coding utf 8 from numpy import import operator import matplotlib import matplotlib.pyplot as plt defcreatdataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1...