python使用knn实现特征向量分类


Posted in Python onDecember 26, 2018

这是一个使用knn把特征向量进行分类的demo。

Knn算法的思想简单说就是:看输入的sample点周围的k个点都属于哪个类,哪个类的点最多,就把sample归为哪个类。也就是说,训练集是一些已经被手动打好标签的数据,knn会根据你打好的标签来挖掘同类对象的相似点,从而推算sample的标签。

Knn算法的准确度受k影响较大,可能需要写个循环试一下选出针对不同数据集的最优的k。

至于如何拿到特征向量,可以参考之前的博文。

代码:

#-*- coding: utf-8 -*-
__author__ = 'Rossie'
from numpy import *
import operator

'''构造数据'''
def createDataSet():
  characters=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
  labels=['A','A','B','B']
  return characters,labels

'''从文件中读取数据,将文本记录转换为矩阵,提取其中特征和类标'''
def file2matrix(filename):
  fr=open(filename)
  arrayOLines=fr.readlines()
  numberOfLines=len(arrayOLines)    #得到文件行数
  returnMat=zeros((numberOfLines,3))   #创建以零填充的numberOfLines*3的NumPy矩阵
  classLabelVector=[]
  index=0
  for line in arrayOLines:       #解析文件数据到列表
    line=line.strip()
    listFromLine=line.split('\t')
    returnMat[index, :]=listFromLine[0:3]
    classLabelVector.append(listFromLine[-1])
    index+=1
  return returnMat,classLabelVector   #返回特征矩阵和类标集合

'''归一化数字特征值到0-1范围'''
'''输入为特征值矩阵'''
def autoNorm(dataSet):
  minVals=dataSet.min(0)
  maxVals=dataSet.max(0)
  ranges=maxVals-minVals
  normDataSet=zeros(shape(dataSet))
  m=dataSet.shape[0]
  normDataSet=dataSet-tile(minVals,(m,1))
  normDataSet=normDataSet/tile(ranges,(m,1))
  return normDataSet,ranges, minVals
  
def classify(sample,dataSet,labels,k):
  dataSetSize=dataSet.shape[0]   #数据集行数即数据集记录数
  '''距离计算'''
  diffMat=tile(sample,(dataSetSize,1))-dataSet     #样本与原先所有样本的差值矩阵
  sqDiffMat=diffMat**2   #差值矩阵平方
  sqDistances=sqDiffMat.sum(axis=1)    #计算每一行上元素的和
  distances=sqDistances**0.5  #开方
  sortedDistIndicies=distances.argsort()   #按distances中元素进行升序排序后得到的对应下标的列表
  '''选择距离最小的k个点'''
  classCount={}
  for i in range(k):
    voteIlabel=labels[sortedDistIndicies[i]]
    classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
  '''从大到小排序'''
  sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
  return sortedClassCount[0][0]

'''针对约会网站数据的测试代码'''
def datingClassTest():
  hoRatio=0.20     #测试样例数据比例
  datingDataMat,datingLabels=file2matrix('datingTestSet1.txt')
  normMat, ranges, minVals=autoNorm(datingDataMat)
  m =normMat.shape[0]
  numTestVecs=int(m*hoRatio)
  errorCount=0.0
  k=4
  for i in range(numTestVecs):
    classifierResult=classify(normMat[i, : ],normMat[numTestVecs:m, : ],datingLabels[numTestVecs:m],k)
    print("The classifier came back with: %s, thereal answer is: %s" %(classifierResult, datingLabels[i]))
    if(classifierResult!= datingLabels [i] ) :
      errorCount += 1.0
  print("the total error rate is: %f" % (errorCount/float(numTestVecs)))

def main():
  sample=[0,0]#简单样本测试
  sampleText = [39948,6.830795,1.213342]#文本中向量样本测试
  k=3
  group,labels=createDataSet()
  label1=classify(sample,group,labels,k)#简单样本的分类结果
  fileN = "datingTestSet.txt"
  matrix,label = file2matrix(fileN)
  label2 =classify(sampleText,matrix,label,k)#文本样本的分类结果
  print("ClassifiedLabel of the simple sample:"+label1)
  print("Classified Label of the textsample:"+label2)



if __name__=='__main__':
  main()
  #datingClassTest()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Django查找网站项目根目录和对正则表达式的支持
Jul 15 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
Jul 27 Python
AI人工智能 Python实现人机对话
Nov 13 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
Dec 20 Python
Python3 中文文件读写方法
Jan 23 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 Python
python爬虫之遍历单个域名
Nov 20 Python
python wxpython 实现界面跳转功能
Dec 17 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
python函数指定默认值的实例讲解
Mar 29 Python
python调用staf自动化框架的方法
Dec 26 #Python
Django unittest 设置跳过某些case的方法
Dec 26 #Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 #Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 #Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 #Python
Python使用requests提交HTTP表单的方法
Dec 26 #Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 #Python
You might like
php+mysql实现数据库随机重排实例
2014/10/17 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
phpinfo的知识点总结
2019/10/10 PHP
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
tensorflow实现简单的卷积神经网络
2018/05/24 Python
Python unittest单元测试框架总结
2018/09/08 Python
Python selenium根据class定位页面元素的方法
2019/02/26 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
农村婚礼证婚词
2014/01/10 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
质量保证书格式模板
2015/02/27 职场文书
大学生英文求职信范文
2015/03/19 职场文书
企业计划生育责任书
2015/05/09 职场文书
初中毕业感言300字
2015/07/31 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python