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

2021-10-08 13:48:05 字數 2801 閱讀 4222

k近鄰法是一種基本分類與回歸方法

採用測量不同特徵值之間的距離方法進行分類

優點:精度高、對異常值不敏感、無資料輸入假定

缺點:計算複雜度高。空間複雜度高。

適合範圍:數值型,標稱型

原理:存在乙個訓練樣本集,樣本集中每個資料都有標籤(自己的類別),

在輸入最新的沒有類別的資料之後,計算每個樣本與最新資料的距離,

一般我們選擇距離最近的前k個樣本,這k個樣本**現最多的類別,作

為新資料的分類。

使用機器學習實戰書本上的樣例

電影鏡頭

打鬥鏡頭

接吻鏡頭

電影型別

電影一1

101愛情片

電影二5

89愛情片

電影三108

5動作片

電影四115

8動作片

我們已經知道k-近鄰演算法根據特徵比較,然後提取樣本集中特徵最相似資料(最鄰近)的分類標籤

我們可以從散點圖大致推斷,這個紅色圓點標記的電影可能屬於動作片,因為距離已知的那兩個動作片的圓點更近。k-近鄰演算法用什麼方法進行判斷呢?沒錯,就是距離度量。這個電影分類的例子有2個特徵,也就是在2維實數向量空間,可以使用我們高中學過的兩點距離公式計算距離

然後通過k近鄰演算法的步驟計算:

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

2.按照距離遞增次序排序;

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

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

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

比如,現在這個k值取3,那麼在電影例子中,按距離依次排序的三個點分別是動作片(108,5)、動作片(115,8)、愛情片(5,89)。在這三個點中,動作片出出現的次數最多,所以該紅色圓點標記的電影為動作片。這個判別過程就是k-近鄰演算法。

# -*- coding: utf-8 -*-

'''編寫函式,將樣本集和類別寫入函式

'''from numpy import array

defcreatedataset()

: group = array([[

1,101],[

5,89]

,[108,5]

,[115,8]

])labels =

['愛情片'

,'愛情片'

,'動作片'

,'動作片'

]return group,labels

互動頁面:

'''該檔案實現的是k近鄰的演算法,判斷待測點的類別

inx是待測點

dataset是資料

labels是樣本的類別

k是個數

'''from numpy import tile

import operator

defclassify

(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#開平方

#選擇距離最小的k個點

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]#返回最大值的類別

互動結果:

如此,就完成了乙個簡單的k近鄰的演算法模型,我們可以通過這個模型來判斷某一部電影的類別(愛情片或者動作片),當然不會出現其他的類別。

看到這裡我們發現電影的維度是二維的,計算距離的方法很簡單,當我們的模型是多維的時候我們應該怎麼解決?

我們可以用歐氏距離(也稱歐幾里德度量)

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

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

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

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

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

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