k算法实现的步骤:
第一:确定K值(就是指最近邻居的个数)。一般是一个奇数,因为测试样本个数有限,
第二:确定度量的长度,也就是余弦值,根据公式来算:
 
 
然后根据这个距离,排序大小,从中选出前k个值出来进行比较,然后根据字典的形式进行根据值进行获取相对应的类别,然后进行类别的统计。
最后,统计完类别的数量之后,则进行排序,按从小到大进行排序,然后得到第一个值对应的类别,则测试样点就是哪个类别。
 具体代码如下:
# -*- coding: utf-8 -*-
import sys
import os
import time
from numpy import *
import numpy as np
import matplotlib.pyplot as plt
import operator
from test1 import *
# 夹角余弦距离公式
def cosdist(vector1,vector2):
return dot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2)) # kNN分类器
# 测试集:testdata
# 训练集:trainSet
# 类别标签:listClasses
# k:k个邻居数
def classify(testdata, trainSet, listClasses, k):
# 返回样本集的行数
#dataSetSize = trainSet.shape[0]
dataSetSize=len(trainSet)#计算出训练集文本数,上面这两种方法都可以
# 计算测试集与训练集之间的距离:夹角余弦
#print(dataSetSize)
classcount={}
distances = array(zeros(dataSetSize))
print(distances)
for i in range(dataSetSize):
distances[i]=cosdist(testdata,trainSet[i])
print(distances)
sortdistances=argsort(distances)
print(sortdistances)
for indx in range(k):
votelabel=listClasses[sortdistances[indx]]
classcount[votelabel]=classcount.get(votelabel,0)+1
print(classcount)
print(classcount)
sortedclasscount=sorted(classcount.items(),key=operator.itemgetter(1),reverse=True)
return sortedclasscount[0][0] #d = sorted(s.iteritems(), key=lambda t: t[1], reverse=False)
dataSet,listClasses = loadDataSet()
nb = NBayes()
nb.train_set(dataSet,listClasses)
k = 3
print(classify(nb.tf[3], nb.tf, listClasses, k))

最新文章

  1. JQuery Datatables服务器端处理示例
  2. Android Multimedia框架总结(二)MediaPlayer框架及播放网络视频案例
  3. 分享Kali Linux 2016.2第46周镜像文件
  4. [CareerCup] 4.9 All Paths Sum 所有路径和
  5. linux命令备份
  6. js中的循环语句
  7. (原)torch和caffe中的BatchNorm层
  8. [HDU 1428]--漫步校园(记忆化搜索)
  9. Sliverlight之 特效
  10. [转] 传说中的WCF
  11. 强连通分量tarjan缩点——POJ2186 Popular Cows
  12. 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
  13. [Swift]LeetCode94. 二叉树的中序遍历 | Binary Tree Inorder Traversal
  14. IIC协议理解(转)
  15. Linux操作汇总
  16. python学习Day8 三种字符类型、文件操作
  17. mui 事件管理及自定义事件详解
  18. C语言的通用指针类型(void *)
  19. Android开发 - 掌握ConstraintLayout(四)创建基本约束
  20. BZOJ5384 有趣的字符串题 回文树

热门文章

  1. QQLogin
  2. poj1696Space Ant(逆时针螺旋形)
  3. jQuery学习笔记:attr()与prop()的区别
  4. unsigned 整型实现无溢出运算
  5. ajax小技巧,防止多次点击发送多个请求
  6. C++——友元、异常和其他
  7. 转:对TCP/IP网络协议的深入浅出归纳
  8. eclipse 中发布 maven 项目到 tomcat
  9. NKW
  10. webstorm搭建node服务器