機器學習之旅(一) k 近鄰演算法(kNN)

2021-08-14 17:51:29 字數 2320 閱讀 3085

k-近鄰演算法工作原理

存在乙個訓練樣本集,樣本集中每個樣本都有標籤,已經事先知道每個樣本的所屬分類。輸入新樣本後(無標籤),將新樣本的每個特徵與樣本集中樣本對應的特徵進行比較,提取樣本集中特徵最相似(最近鄰)的前k個分類標籤,取出現次數最多的標籤,作為新樣本所屬的分類。

k-近鄰演算法採用測量不同特徵值之間的距離方法進行分類

k-近鄰演算法的一般流程

(1)收集資料:可以使用任何方法。

(2)準備資料:距離計算所需要的數值,最好是結構化的資料格式。

(3)分析資料:可以使用任何方法。

(4)訓練演算法:此步驟不適用於k-近鄰演算法。

(5)測試演算法:計算錯誤率。

(6)使用演算法:首先需要輸入樣本資料和結構化的輸出結果,然後執行k-近鄰演算法判定輸入資料分別屬於哪個分類,最後應用對計算出的分類執行後續的處理。

首先是k-鄰近演算法的**

from numpy import *

import operator

defclassify0

(inx,dataset,labels,k):

#k-鄰近演算法**

datasetsize = dataset.shape[0]

#shape[0]返回dataset有多少行,shape[1]返回dataset有多少列

diffmat = tile(inx,(datasetsize,1)) - dataset

#tile(a,(x,y))表示陣列或陣列a向下重複x行,向右重複y列

sqdiffmat = diffmat**2

sqdistances = sqdiffmat.sum(axis=1)

#sum(axis=1)表示每個向量相加,如[[1,2,3],[4,5,6]]運算得出[6,15]

distances = sqdistances**0.5

sorteddistindicies = distances.argsort()

#argsort()表示將陣列中的元素從小到大排列,提取其對應的index(索引),然後輸出

#如[3,9,5,2,7]運算得出[1,4,2,0,3]

classcount = {}

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

#對選取的k個樣本所屬的類別個數進行統計

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

#選取出現的類別次數最多的類別

sortedclasscount = sorted(classcount.items(),key=operator.itemgetter(1),reverse=true)

#operator.itemgetter(1)返回物件第乙個域的值,即key值

#reverse=true表示降序排列

return sortedclasscount[0][0]

通過一組資料來簡單驗證k-鄰近演算法

def

createdataset

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

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

return group,labels

group,labels = createdataset()

print(group)

print(labels)

列印結果

[[ 1.

1.1]

[ 1.

1. ]

[ 0.

0.2]

[ 0.

0.1]]

['a', 'a', 'b', 'b']

這裡四組資料,每兩組陣列有兩個我們已知的屬性或者特徵值。向量labels包含了每個資料點的標籤資訊,labels包含的元素個數等於group矩陣行數。這裡我們將資料點(1,1)定義為類a,資料點(0,0.1)定義為類b。通過散點圖可以更直觀的看出四組資料的位置分布

現在輸入一組資料來進行測試

print(knn.classify0([0,0],group,labels,3))
得到結果為

b
通過上面的散點圖可以直接判斷該結果我們所預期的結果

機器學習 k 近鄰 kNN 演算法

一 基本原理 存在乙個樣本資料集合 也稱訓練樣本集 並且樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最近鄰 的分類標籤。我們一般只選擇樣本集中前k k通常是不大於20的整數 個最相似的資料,最後選擇k個...

機器學習 k近鄰演算法 kNN

knn演算法通過計算當前測試樣本與離它最近的k個點的距離,進行投票,得到它最有可能的分類結果。首先來看看機器學習演算法的基本流程 由此可見knn演算法的特點 1.k近鄰演算法是非常特殊的,可以認為是沒有模型的演算法。2.為了和其他演算法統一,可以認為訓練資料集就是模型本身。這也是scikit lea...

機器學習 k 近鄰演算法(KNN)

簡單地說,k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定。缺點 計算複雜度高 空間複雜度高。適用範圍 數值型和標稱型。對於該演算法更通俗的說法,拿到乙個資料a,計算其與資料集c中的資料的距離,通過使用特徵值進行求歐式距離。然後排序取出其前k相鄰的...