自己實現的簡易的knn算法
阿新 • • 發佈:2018-09-11
http plt mage sort 循環 數據 .so tin image 程序代碼:
import csv import random import operator import math import matplotlib.pyplot as plt #計算距離的函數 def getdistance(testIntance,trainInstance): length=len(testIntance) distance=0 # 這個循環只能取到數字 for i in range(length): testInstance1=float(testInstance[i]) trainInstance1=float(trainInstance[i]) distance+=(pow((testInstance1-trainInstance1),2)) # print(distance) return math.sqrt(distance) #讀文件 with open(r‘b.txt‘,‘rt‘) as f: lines=csv.reader(f) dataSet=list(lines) #測試點 testInstance=[5,5] distances=[] for i in range(len(dataSet)): dist=getdistance(testInstance,dataSet[i]) distances.append((dataSet[i],dist)) # 到這裏的distances是帶有坐標和各個點與待測點距離的列表了 # print(distances) # 這裏采用尋找離他最近的4個樣本,然後統計 # 排序操作 distances.sort(key=operator.itemgetter(1)) # 對排序後的前k個值進行種類統計na tj={} for i in range(5): result=distances[i][0][2] if result in tj: tj[result]+=1 else: tj[result]=1 print(tj) # 把字典中統計的結果拿來比較,去統計數大的作為結果 for key in tj: if tjresult==None: tjresult=key if tj[key]>tj[tjresult]: tjresult=key print(tjresult) print(tjresult)
數據樣式:
自己實現的簡易的knn算法