簡單的說,k-近鄰演算法採用測量不同特徵值之間的距離辦法進行分類.
收集資料:可以使用任何方法。
準備資料:距離計算所需要的數值,最好是結構化的資料格式。
分析資料:可以使用任何方法。
訓練演算法:此步驟不適用於k-近鄰演算法。
測試演算法:計算錯誤率。
使用演算法:首先需要輸入樣本資料和結構化的輸出結果,然後執行k-近鄰演算法判定輸
入資料分別屬於哪個分類,最後應用對計算出的分類執行後續的處理。
建立名為knn.py的python檔案,首先編寫一些通用函式。
# coding=utf-8
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):
''':param inx:用於分類的輸入向量
:param dataset:輸入的訓練樣本集
:param labels:標籤向量
:param k:用於選擇最近鄰的數目
:return:
''' datasetsize = dataset.shape[0] #求出dataset矩陣的行數
diffmat = tile(inx, (datasetsize, 1)) - dataset
sqdiffmat = diffmat ** 2
sqdistances = sqdiffmat.sum(axis=1)#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.iteritems(), key=operator.itemgetter(1), reverse=true)
return sortedclasscount[0][0]
計算完所有點之間的距離後,可以對資料按照從小到大的次序排序。然後,確定前k個距離
最小元素所在的主要分類, 輸人k總是正整數;最後 ,將classcount字典分解為元組列表,然後
使用程式第二行匯入運算子模組的itemgetter方法,按照第二個元素的次序對元組進行排序。
此處的排序為逆序,即按照從最大到最小次序排序,最後返回發生頻率最高的元素標籤。
k-近鄰演算法是分類資料最簡單最有效的演算法,本章通過兩個例子講述了如何使用k-近鄰演算法
構造分類器。k-近鄰演算法是基於例項的學習,使用演算法時我們必須有接近實際資料的訓練樣本數
據。k-近鄰演算法必須儲存全部資料集,如果訓練資料集的很大,必須使用大量的儲存空間。此外,
由於必須對資料集中的每個資料計算距離值,實際使用時可能非常耗時。
k-近鄰演算法的另乙個缺陷是它無法給出任何資料的基礎結構資訊,因此我們也無法知曉平均
例項樣本和典型例項樣本具有什麼特徵。
《機器學習實戰》 K 近鄰演算法
基本原理 通過計算新資料與給定的樣本資料之間的距離,來確定相似度排名 然後取前k個最相似的樣本,統計這k 一般不大於20 個樣本中出現最多的分類,設為新資料的分類。新資料,訓練樣本集,樣本資料標籤 即分類 最近鄰 前k個最相似資料 最近鄰標籤 演算法實施 首先提取要比較的特徵,確定各特徵的權重,進行...
機器學習實戰 k 近鄰演算法
本系列是基於 機器學習實戰 這本書做的讀書筆記,原書採用python2作為工具,我則將原書 改為用python3編寫並記錄在此系列中。我將把書中對這些機器學習演算法的定義謄上,然後寫下自己對該演算法的通俗理解,之後貼出書中演算法清單中的 本書講解的第乙個機器學習演算法是k 近鄰演算法 knn 它的工...
機器學習實戰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...