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

2021-07-16 15:28:10 字數 1889 閱讀 6207

簡單的說,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...