KNN近鄰演算法

2021-08-31 11:52:13 字數 1448 閱讀 4199

knn近鄰演算法的核心思想:近朱者赤近墨者黑, 誰離我近就是誰

分析過程

:

給乙個新資料,找距離新資料最近的前k個資料 

找到k個資料中出現類別次數最多的那乙個

將新資料劃分為該類別

開發流程:

載入資料

歸一化資料(對資料預處理)

計算距離,並分類

測試程式

knn實現:

from collections import counter # 計數器

def load(filename):

# return ,

x= # 特徵矩陣

y= # 目標向量

with open(filename) as reader:

for line in reader.readlines():

#x=line=line.strip() # 去除首尾多餘的空格,換行

lines=line.split('\t')

#x=lines

return x,y

# 歸一化資料 對資料做預處理

def guiyihua(x):

# return new_x

new_x=

# 找每一列最大的值

# 存放每一列的資料

l1=l2=

l3=for i in x:

max1=sorted(l1,reverse =true)[0]

max2 = sorted(l2, reverse=true)[0]

max3 = sorted(l3, reverse=true)[0]

# 將該列的值都除以最大值作為新值

for i in x:

new_x=

# 返回新矩陣

return new_x,max1,max2,max3

# 計算新資料到樣本集中每個樣本的距離,

# 並找出前k的距離對應的類別,將出現次數最多的類別返回

def classfiy(x,x,y,k):

# return y

dis=

for i in x:

# 計算新資料到每個樣本的距離,並儲存在列表中

new_dis=sorted(dis)[0:k]

labs=[y[dis.index(i)] for i in new_dis]

return counter(labs).most_common(1)[0][0] #取出列表中出現次數最多的元素

if __name__ == '__main__':

x,y=load(r'e:\ai129第五階段\資料\dating.txt')

x,max1,max2,max3=guiyihua(x)

k=5x=

print(classfiy(x,x,y,k))

K 近鄰演算法 KNN

knn k nearest neighbor 假設訓練集有記錄 r1 r2,rn共n條,訓練集的特徵向量及其對應的類別都是已知的,每個記錄的特徵向量為 t1 t2,tk共k個特徵,待測試的記錄為ru 1 計算ru 的特徵向量與訓練集的每條記錄 即r1 r2,rn 的特徵向量的歐式距離,選取距離最小的...

k近鄰演算法 kNN

核心思想 前k個最相似資料中出現次數最多的類別,作為新資料的類別。核心函式 計算距離函式,投票函式 coding utf 8 import random import sys from collections import counter from operator import itemgette...

K近鄰演算法 KNN

k近鄰演算法 knn 何謂k近鄰演算法,即k nearest neighbor algorithm,簡稱knn演算法,單從名字來猜想,可以簡單粗暴的認為是 k個最近的鄰居,當k 1時,演算法便成了最近鄰演算法,即尋找最近的那個鄰居。為何要找鄰居?打個比方來說,假設你來到乙個陌生的村莊,現在你要找到與...