機器學習 K近鄰演算法

2021-09-25 06:24:55 字數 1703 閱讀 6993

工作原理:存在乙個訓練樣本資料集合,每組資料對應乙個標籤及分類(比如下邊例子為前兩個資料都為a類),輸入測試樣本後通過計算求出測試樣本與訓練樣本的歐氏距離d,取前k個最小的值,這k組資料對應的標籤分類最多的那種,就是測試樣本的標籤。

訓練樣本資料:

[[1.0, 1.1],

[1.0, 1.0],

[0, 0],

[0, 0.1]]

歐氏距離公式:

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 classfy0(inx, dataset, labels, k): # 引數分別為測試樣本,訓練樣本,訓練樣本標籤,近鄰個數

datasetsize = dataset.shape[0] # 返回行列數,0為行,列為1

diffmat = tile(inx, (datasetsize, 1)) - dataset # tile是按照某個方向複製元素,行方向複製四行,列方向複製一行,然後減去每個訓練樣本值

sqdiffmat = diffmat ** 2 # 乘方運算

sqdistances = sqdiffmat.sum(axis=1) # 軸為1的方向(橫向)求和

distances = sqdistances ** 0.5 # 乘方運算,等同於開根號

sorteddistindicies = distances.argsort() # 返回從小到大排序的索引值(原陣列不動)

classcount = {} # 字典(鍵值對)

for i in range(k): # for-each迴圈,統計前k個每個分類有多少個

voteilabel = labels[sorteddistindicies[i]] # 記錄每個的標籤

classcount[voteilabel] = classcount.get(voteilabel, 0) + 1 # 取出該標籤的值+1(原先沒有預設為0)

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

reverse=true) # operator.itemgetter(1)表示用鍵值對中的值排序,為0表示用鍵排序,一開始公升序,reverse=true後降序

return sortedclasscount[0][0] # 返回第乙個標籤

if __name__ == '__main__': # 表示我在當前頁面呼叫測試語句,別的頁面引用該頁面時執行不了if裡邊的內容

group, labels = createdataset()

test = [0, 0] # 測試資料

test_class = classfy0(test, group, labels, 3)

print(test_class)

機器學習 k 近鄰演算法

一.k 近鄰演算法概述 簡單地說,k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集,也稱訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將資料的每個特徵與樣本集合中資...

機器學習 K近鄰演算法

用例一 from sklearn.neighbors import nearestneighbors import numpy as np x np.array 1,1 2,1 3,2 1,1 2,1 3,2 nbrs nearestneighbors n neighbors 2,algorithm...

機器學習 k 近鄰演算法

演算法之k 近鄰演算法 knn 計算公式 又叫歐式距離 計算a,b兩點的距離 注意 k 近鄰演算法是需要做標準化處理 sklearn k 近鄰演算法api sklearn.neighbors.kneighborsclassifier n neighbors 5,algorithm auto algo...