k最近邻(k-nn)
2016-01-26 15:03
239 查看
本文介绍一种最简答的有监督学习算法:knn。具体算法如下:
如在下图中,训练样本只有四个记录,待分类样本为(3,7)。取k=3 。计算结果发现。1,3,4三条记录是最近邻样本。其中属于“好”类的有两个,“坏”类的有一个,所以待分类样本(3,7)的结果是“好”。如果取k=1,距离待分类样本最近是第三条记录,他的结果是“好”,所以待分类样本的结果也是“好”。可见这里使用knn是比较合理的。
源数据如下(raw_data)
1:7 71:7 4
0:3 4
0:1 4
代码如下(main.py)
#encoding=utf-8#获取两个整型列表的平方差之和
def get_distance(list1,list2):
length=len(list1)
total=0
for i in xrange(0,length):
#print i,list1[i],list2[i]
result1= (list1[i] - list2[i]) ** 2
#print result1
total = total + result1
return total
predict_data=[3,7]#判断它的类别
raw_data=open("raw_data","r+")#读取源数据
raw_list=raw_data.readlines()
map_list=[]
record_index=0#
for ele in raw_list:#对于源数据的每一行 1:7 7
ele=ele.strip()
split_list=ele.split(":")
tag=split_list[0]
feature=split_list[1]
feature_list=feature.split(" ")
feature_list_int=[]
for ele in feature_list:
feature_list_int.append(int(ele.strip()))
list1=[]
list1.append(record_index)#每条记录的id
record_index = record_index + 1
for ele in feature_list:#每条记录的特性
list1.append(int(ele.strip()))
distance=get_distance(predict_data,feature_list_int)#每条记录和预测特征的欧式距离
list1.append(distance)
list1.append(int(tag.strip()))#每条记录的标签
#print list1
map_list.append(list1)
#list1=[ [0,7,7,16,1],[1,7,4,25,1],[2,3,4,9,0],[3,1,4,13,0] ]#未排序前的map_list: id feature1 feature2 distance tag
map_list.sort(key=lambda x:x[3])
map_file=open("map_data","w+")
for ele in map_list:#将处理后的数据写入文件
map_file.write(str(ele))
map_file.write("\n")
#下面开始knn算法
class1 = 0 #好
class2 = 1 #坏
class1_no = 0
class2_no = 0
k = 3
top_k_neighbor=map_list[0:k]#k个最近邻
for ele in top_k_neighbor:#统计k个最近邻中每个标签的数量
if ele[4] == class1:
class1_no = class1_no + 1
#print class1,ele[3]
if ele[4] == class2:
class2_no = class2_no + 1
#print class2,ele[3]
if(class1_no > class2_no):#哪个标签的数量最多,就是属于哪一类
print "good"
if(class1_no < class2_no):
print "bad"
if(class1_no == class2_no):
print "choose another k"
数据处理结果如下(map_data)
[2, 3, 4, 9, 0][3, 1, 4, 13, 0]
[0, 7, 7, 16, 1]
[1, 7, 4, 25, 1]
相关文章推荐
- nodejs实现获取某宝商品分类
- php通过分类列表产生分类树数组的方法
- asp飞飞无限级分类v1.0 Asp+sql+存储过程+ajax提供下载
- Oracle表的分类以及相关参数的详解
- Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
- WordPress中用于获取文章信息以及分类链接的函数用法
- 详解WordPress中分类函数wp_list_categories的使用
- PHP实现无限级分类(不使用递归)
- PHP实现递归无限级分类
- Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
- php+mysql实现无限分类实例详解
- thinkphp实现无限分类(使用递归)
- WordPress中获取指定分类及其子分类下的文章数目
- 详解WordPress开发中用于获取分类及子页面的函数用法
- JavaScript+CSS无限极分类效果完整实现方法
- 用Python从零实现贝叶斯分类器的机器学习的教程
- My Machine Learning
- 机器学习---学习首页 3ff0
- 反向传播(Backpropagation)算法的数学原理
- 也谈 机器学习到底有没有用 ?