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 它的工...