優點:精度高,對異常值不敏感,無資料假定輸入。
缺點:計算複雜度高,空間複雜度高。
使用資料範圍:數值型和標稱型。
k-近鄰演算法的一般流程:
收集資料:任何方法。
準備資料:距離計算所需要的數值,最好是結構化資料格式。
分析資料:任何方法。
訓練方法:此步驟不適用於k-近鄰演算法。
測試方法:計算錯誤率。
使用演算法:輸入樣本和結構化輸出結果》執行k-近鄰演算法判斷屬於哪乙個類》對分類後續處理
下面開始:
在資料夾下建立knn.py
1.匯入資料:
from numpy import * //numpy科學計算包
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
因為我們通常只能視覺化處理三維以下特徵,所以每個資料點通常使用兩個特徵
可以在python下鍵入,檢視下資料;
>>>import knn
>>>group, labels = knn.createdataset()
>>>group
2.從文字中解析資料:
該函式是將每組資料劃分到某一類中:
偽**:
(1)計算已知資料集中的點與當前點的距離。
(2)按照距離遞增次序排序。
(3)選取與當前點距離最小的k個點。
(4)確定前k個點所在類別的出現頻率。
(5)返回當前k個點出現頻率最高的類別作為當前的**分類(看哪個類別出現的多就是了)。
def classify0(inx, dataset, labels, k)://你要分類的資料,訓練集,標籤向量(元素數目和矩陣dataset的行數相同),k個近鄰
//計算距離
datasetsize = dataset.shape[0] //
diffmat = tile(inx, (datasetsize,1)) - dataset
sqdiffmat = diffmat**2
sqdistances = sqdiffmat.sum(axis=1)
distances = sqdistances**0.5
sorteddistindicies = distances.argsort()
classcount={}
//選擇距離最小的k個點
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 近鄰演算法概述 簡單地說,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近鄰演算法
工作原理 存在乙個訓練樣本資料集合,每組資料對應乙個標籤及分類 比如下邊例子為前兩個資料都為a類 輸入測試樣本後通過計算求出測試樣本與訓練樣本的歐氏距離d,取前k個最小的值,這k組資料對應的標籤分類最多的那種,就是測試樣本的標籤。訓練樣本資料 1.0,1.1 1.0,1.0 0,0 0,0.1 歐氏...