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時,演算法便成了最近鄰演算法,即尋找最近的那個鄰居。為何要找鄰居?打個比方來說,假設你來到乙個陌生的村莊,現在你要找到與...