機器學習 K 鄰近演算法 KNN

2021-09-10 14:48:26 字數 2248 閱讀 1422

k-鄰近演算法:有監督演算法

演算法工作原理:

存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每乙個特徵與樣本集中資料對應的特徵進行比較,然後演算法提供樣本集中特徵最相似資料(最鄰近)的分類標籤。一般來說,我們只選擇樣本資料集中前k個最相似的資料,這就是k-鄰近演算法中k的出處。

實驗**:

"""

function:k鄰近演算法實現uci資料集分類.

"""from numpy import *

import numpy as np

from collections import counter

def datasetload(filepath):

data =

labels =

fr = open(filepath)

for line in fr.readlines():

curline = line.strip().split(',')

fltline = list(map(float, curline[:5]))

return data, labels

# 計算歐式距離衡量資料間的相似度.

def disteclud(veca, vecb):

return sqrt(np.sum(power(np.array(veca) - np.array(vecb), 2)))

def knn(k):

exact_amount = 0

for i in range(len(goal_data)):

distance = {} # distance字典: key(資料編號):value(歐式距離).

k_labels = # 儲存前k個鄰近資料的類標籤.

for j in range(len(train_data)):

distance.update()

# 對計算結果進行排序,找出最鄰近的前k個值.

distance = sorted(distance.items(), key=lambda x: x[1])

for t in range(k):

# 取出前k個鄰近資料的編號及類標籤構成k_labels.

# print("前k個鄰近資料排序:{}".format(distance[t][0]))

# counts_label鄰近資料中頻率最大的類標籤及頻率.

counts_label = counter(k_labels).most_common(1)

print("第{}條目標資料**類別為:{}---正確類別為:{}".format(i+1, (counts_label[0])[0],goal_labels[i])[0]))

if (counts_label[0])[0] == ((goal_labels[i])[0]):

exact_amount = exact_amount + 1

# 準確率計算.

accuracy = format(float(exact_amount) / float(len(goal_data)), '.2f')

print("程式分類準確率:{}".format(accuracy))

print("------------------分隔符------------------")

if __name__ == '__main__':

train_path = 'd:/pycharm/code/python_learning_test/knn/train_data.txt'

goal_path = 'd:/pycharm/code/python_learning_test/knn/goal_data.txt'

train_data, train_labels = datasetload(train_path)

goal_data, goal_labels = datasetload(goal_path)

# 定義k鄰近演算法引數k.

for k in range(1, 9):

knn(k)

實驗中資料的距離度量用的是最簡單的歐氏距離方法:

通過將目標資料與訓練資料間的歐氏距離從小到大排列,選取前k個訓練資料的類別,其中最多出現的類別為目標資料的**類別。

機器學習 k鄰近演算法 KNN

title 機器學習 k鄰近演算法 knn date 2019 11 16 20 20 41 mathjax true categories 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img ae8zaru7 1573908679258 1573907207887.png 現在我們...

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

臨近演算法 臨近演算法 knn 是資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表,knn方法既可以做分類,也可以做回歸。knn演算法的核心思想是如果乙個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類別,則該樣本也屬...

機器學習 KNN鄰近演算法

1 knn 演算法概述 cover和hart在1968年提出了最初的鄰近演算法。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。knn是一種分類 classification 演算法,它輸入基於例項的學習 instance based learning 屬於懶...