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

2021-08-27 15:58:04 字數 2537 閱讀 8861

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

優點:精度高、對異常值不敏感、無資料輸入假定。

缺點:計算複雜度高、空間複雜度高。

適用範圍:數值型和標稱型。

對於該演算法更通俗的說法,拿到乙個資料a,計算其與資料集c中的資料的距離,通過使用特徵值進行求歐式距離。然後排序取出其前k相鄰的資料,前k個出現頻率最高的類別即作為該資料的類別。

knn可以用在區分電影、**、手寫數字識別等。

下面使用python可以匯入資料

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

對未知屬性的資料集中的每個點依次執行下面的操作:

1. 計算已知類別的資料集中的點與當前點之間的距離;

2.按照距離遞增的順序排序;

3.選取與當前點距離最小的k個點;

4.確定前k個點所在類別的出現概率;

5.返回前k個點出現頻率最高的類別作為當前點的**分類。

k-近鄰演算法實現  參照《機器學習實戰》

def classify0(inx, dataset, labels, k):

datasetsize = dataset.shape[0] # 取資料集的行數

diffmat = tile(inx, (datasetsize, 1)) - dataset # numpy.tile將資料擴充套件成矩陣

# 便於與dataset直接進行相減 見下面詳解-_-

sqdiffmat = diffmat**2

sqdistances = sqdiffmat.sum(axis=1) # 在行的方向上計算和

首先進行歐氏距離的計算:比如 點(0, 0)與(1, 2)之間的距離計算:

numpy.tile([0,1], (3,1))           : 表示 在行方向重複3次,;列方向重複1次。

>>>array([[0, 1],

[0, 1],

[0, 1]])

numpy.tile([0,1], (1,3))           : 表示 在行方向重複1次,;列方向重複3次。

>>>array([[0, 1, 0, 1, 0, 1]])

# 接上

sorteddistindicies = distances.argsort() # 按索引進行從小到大排序

# [12.4, 5.6, 9.8] 索引排序後: [1, 2, 0] [5.6, 9.8, 12.4]

classcount = {} # 記錄各個類別出現的頻率

for i in range(k):

voteilabel = labels[sorteddistindicies[i]] # 獲取前k個出現的類別

# sorteddistindicies = [2, 3, 1, 0] sorteddistindicies[0] = [2]

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

# labels[sorteddistindicies[0]] == labels[2] == 'b'

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

# 類別計數 看前k個出現頻率最高的類別是誰

# 需要注意的一點 classcount.get(voteilabel, 0) 中的0是不可少和更改的

# 表示的是 如果該資料不存在 則返回0

以上部分是 選擇距離最小的k個點 。

sortedclasscount = sorted(classcount.iteritems(),

key = operator.itemgetter(1), reverse=true)

# dict.iteritems() 生成的乙個迭代器 與item有不同

# operator.itemgetter(1) :獲取物件的第1個域的值

# reverse=true 表示逆序排列 從大到小

return sortedclasscount[0][0]

使用:classify0([0,0], dataset, labels, 3)              # k = 3

另外需要注意的點:

有些資料的屬性值在進行歐氏距離時可能與其他屬性值相差過大,這時就需要進行歸一化處理。

機器學習 k 近鄰 kNN 演算法

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

機器學習 k近鄰演算法 kNN

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

機器學習 KNN演算法 K 近鄰

如何計算測試樣本與y已分類樣本之間的距離 如何選擇k值 k值過大或過小的影響 k值過小 例如k 1,結果對近鄰的例項點非常敏感,容易受到雜訊影響,發生過擬合 k值過大 可以一定程度上避免上述情況,但是現有訓練集的訓練誤差會增大,輸入不相似的訓練例項會導致 錯誤 適合分類問題,有較高的精確度,對異常值...