工作原理:存在乙個訓練樣本資料集合,每組資料對應乙個標籤及分類(比如下邊例子為前兩個資料都為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...