k NN演算法實現k 鄰近演算法實現

2021-09-22 10:06:46 字數 1804 閱讀 7438

"""

將資料點(1, 1.1)定義為類a, 資料點(0, 0.1)定義為類b

k-鄰近演算法實現:

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

2.按照距離遞增次序排序

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

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

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

"""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 classify0(inx, dataset, labels, k):

"""共有四個輸入引數:用於分類的輸入向量是inx,輸入的訓練樣本集為dataset

標籤向量為labels, 最後的引數k表示用於選擇最鄰近的數目,其中標籤向量的元素數目和

矩陣dataset的行數相同。計算的距離為歐氏距離

:param inx:

:param dataset:

:param labels:

:param k:

:return:

"""# 計算歐氏距離

datasetsize = dataset.shape[0] # dataset.shape[0]輸出的是資料集的行數,shape[1]輸出的是資料集的列數

diffmat = tile(inx, (datasetsize, 1)) - dataset # tile函式共有兩個引數,tile(a, reps), a指待輸入陣列,reps決定a重複的次數,整個函式用於重複陣列a來構建新的陣列

sqdiffmat = diffmat ** 2 # 計算歐氏距離

sqdistances = sqdiffmat.sum(axis=1) # 按行求和,

distance = sqdistances ** 0.5 # 開根號,結果為該未知資料集到每乙個已知資料集的歐氏距離

# 選擇距離最小的k個點

sorteddistindicies = distance.argsort() # argsort()方法返回陣列值從小到大的索引

classcount = {}

for i in range(k):

voteilabel = labels[sorteddistindicies[i]] # 獲取所屬類別

classcount[voteilabel] = classcount.get(voteilabel, 0) + 1 # get方法返回指定鍵的值,如果不存在則返回預設值(0:設定預設值為0)

sortedclasscount = sorted(classcount.items(), key=operator.itemgetter(1), reverse=true) # items()返回字典列表操作後的迭代  sorted(可迭代物件, 自定義的比較函式, 順序預設為fslse,正序)

return sortedclasscount[0][0]

if __name__ == '__main__':

group, labels = createdataset()

print(group)

print(labels)

result = classify0([0, 0], group, labels, 3)

print(result)

K鄰近演算法 KNN

k nearest neighbor knn演算法 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。所選擇的鄰居都是已經正確分類的物件。如果k 3,則綠色圓形的類別與紅色三角形相同 如果k 5,則綠色圓形的類別與藍色正方形相同 the...

k最鄰近演算法 加權kNN

上篇文章中提到為每個點的距離增加乙個權重,使得距離近的點可以得到更大的權重,在此描述如何加權。該方法最簡單的形式是返回距離的倒數,比如距離d,權重1 d。有時候,完全一樣或非常接近的商品權重會很大甚至無窮大。基於這樣的原因,在距離求倒數時,在距離上加乙個常量 weight 1 distance co...

機器學習 K 鄰近演算法 KNN

k 鄰近演算法 有監督演算法 演算法工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每乙個特徵與樣本集中資料對應的特徵進行比較,然後演算法提供樣本集中特徵最相似資料 最鄰近 的分類標...