k近鄰演算法 python實現

2021-09-26 08:06:34 字數 2657 閱讀 4562

特徵距離計算(距離計算方法有很多,這裡先列三種)

簡單例子(電影型別)

根據歐氏距離計算公式,算出未知電影與已知電影型別之間的距離。

電影名稱

打鬥鏡頭

接吻鏡頭

電影型別

歐式距離13

104愛情片

20.522

100愛情片

18.731

81愛情片

19.2

4101

10動作片

115.3599

5動作片

117.4698

2動作片

118.9?18

90未知

—根據歐式距離我們可以對電影按照距離大小進行排序,假定k=3,則最近鄰的三個電影分別是電影2,電影3,電影1,這三種電影的列別都是愛情片,所以我們可以認為未知電影的型別也是愛情片。

每年飛行里程數

每週消費冰激凌公升數

交往型別

40920

8.326976

0.953952

314488

7.153469

1.673904

226052

1.441871

0.805124

175136

13.147394

0.428964

138344

1.669788

0.134296

172993

10.141740

1.0329551…

………

@tools.funcruntime

def load_data(file_path):

try:

feature =

label =

with open(file_path) as f:

for line in f:

feature_temp =

line = [float(i) for i in line.strip().split()]

feature.extend(feature_temp)

return np.mat(feature), label

except exception as msg:

tools.printinfo(2, msg)

sys.exit()

@tools.funcruntime

def normalization_data(feature):

try:

# 計算特徵的均值和標準差

feature_u = feature.mean(axis=0)

feature_sigma = np.std(feature, axis=0)

# 計算特徵矩陣的大小

feature_size = np.shape(feature)

feature_u = feature_u.repeat(feature_size[0], axis=0)

feature_sigma = feature_sigma.repeat(feature_size[0], axis=0)

# 歸一化

feature = (feature - feature_u) / feature_sigma

return feature

except exception as msg:

tools.printinfo(2, msg)

sys.exit()

def knn(unknown_data, feature, feature_u, feature_sigma, label):

try:

# 未知資料歸一化

unknown_data = (unknown_data - feature_u) / feature_sigma

feature_size = np.shape(feature)

# 未知資料與已知資料的距離

unknown_data = unknown_data.repeat(feature_size[0], axis=0)

unknown_data = unknown_data - feature

unknown_data = np.multiply(unknown_data, unknown_data)

unknown_data = np.sum(unknown_data, axis=1)

unknown_data = np.sqrt(unknown_data)

# 未知資料距離排序取前五的類別

unknown_data = [i[0] for i in unknown_data.tolist()]

k_label = [i[0] for i in sorted(enumerate(unknown_data), key=lambda x:x[1])]

k_label = k_label[0:5]

k_label = [label_data[i] for i in k_label]

return k_label

except exception as msg:

tools.printinfo(2, msg)

sys.exit()

k近鄰演算法 python實現

k近鄰演算法 k nearest neighbor,knn 是一種非常直觀的,易於理解的有監督的演算法 對於乙個待分類的樣本,在已知的樣本集合中尋 找與它距離最近的k個樣本,及所謂的k近鄰。通過這這k個近鄰的所述類別來決定分類結果。距離度量距離度量方法有很多種,例如 歐式距離 曼哈頓距離 切比雪夫距...

K近鄰演算法 python實現

k近鄰演算法 演算法原理 將資料轉換成向量形式 計算輸入向量與樣本中的距離 比如歐式距離等 對距離計算結果排序 取前k個 根據指定規則 多數或者按照一定權重進行計算 確定輸入向量類別。python實現 import numpy as np import operator class knnmetho...

python實現k 近鄰演算法

本文不涉及k 近鄰演算法的原理,只通過python 實現演算法,並且沒有用到機器學習庫,根據演算法流程一步一步實現。假設我們已經獲取了資料及其標籤的文字檔案,如下圖所示。資料有3個屬性,標籤分為3個型別,python讀取資料 讀取資料並記錄 defreadfile filename file ope...