自己实现的简易的knn算法
2021-07-03 05:05
标签:[] print 字典 range 代码 knn 计数 set 距离 数据样式: 自己实现的简易的knn算法 标签:[] print 字典 range 代码 knn 计数 set 距离 原文地址:http://blog.51cto.com/13831593/2173699import 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)