python的knn算法list_KNN的简单实现(python)

kNN算法简介:

kNN(k Nearest Neighbors)算法又叫k最临近方法, 总体来说kNN算法是相对比较容易理解的算法之一,假设每一个类包含多个样本数据,而且每个数据都有一个唯一的类标记表示这些样本是属于哪一个分类, kNN就是计算每个样本数据到待分类数据的距离,取和待分类数据最近的k各样本数据,那么这个k个样本数据中哪个类别的样本数据占多数,则待分类数据就属 于该类别。

#coding=utf-8 ”’ Created on 2011-3-27 @author: bmy ”’ #!/usr/bin/env python import math import string #计算v1与v2之间的欧拉距离 def euclidean(v1,v2): d=0.0 for i in range(len(v1)): d+=(v1[i]-v2[i])**2 return math.sqrt(d) #计算vec1与所有数据data的距离,并且排序 def getdistances(data,vec1): distancelist=[] for i in range(len(data)): vec2=data[i][0] distancelist.append((euclidean(vec1,vec2),data[i][1])) distancelist.sort() return distancelist #估算vec1属于的类别 def knnpredict(data,vec1,k=3): # 得到已经排序的列表 dlist=getdistances(data,vec1) num1=0 num2=0 # 判断哪个类别多 for i in range(k): if dlist[i][1]==1: num1+=1 else: num2+=1 #预测 if(num1>num2): return 1 else: return -1 f = open(“heart_scale”, “r”) labels = []#类别 samples = []#样本 #读取文本, max_index = 0 line = f.readline() while line: elems = string.split(line) sample = {} for e in elems[1:]: points = string.split(e, “:”) sample[int(points[0])] = float(points[1]) if int(points[0]) > max_index: max_index = int(points[0]) labels.append(float(elems[0])) samples.append(sample) line = f.readline() f.close() #print labels #print samples # #转换格式 m=len(samples)#总的数量 n=13#特征数目 data=[] data=[[] for row in range(m)] for j in range(m): temp=[] for i in range(1,n+1): if i in samples[j]: temp.append(samples[j][i]) else: temp.append(0) data[j].append(temp) data[j].append(labels[j]) #print data #原始数据集上的预测 for i in range(len(data)): print knnpredict(data, data[i][0]),data[i][1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值