本文共 1132 字,大约阅读时间需要 3 分钟。
程序代码:
import csvimport randomimport operatorimport mathimport 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个值进行种类统计natj={}for i in range(5): result=distances[i][0][2] if result in tj: tj[result]+=1 else: tj[result]=1print(tj)# 把字典中统计的结果拿来比较,去统计数大的作为结果for key in tj: if tjresult==None: tjresult=key if tj[key]>tj[tjresult]: tjresult=key print(tjresult)print(tjresult)
数据样式:
转载于:https://blog.51cto.com/13831593/2173699