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 相关文章推荐
Python中实现结构相似的函数调用方法
Mar 10 Python
Python实现JSON反序列化类对象的示例
Jan 31 Python
Python的argparse库使用详解
Oct 09 Python
Python3 log10()函数简单用法
Feb 19 Python
超简单使用Python换脸实例
Mar 27 Python
利用python求积分的实例
Jul 03 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
pytorch实现mnist数据集的图像可视化及保存
Jan 14 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
Feb 04 Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
Apr 29 Python
python把一个字符串切开的实例方法
Sep 27 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
php zip文件解压类代码
2009/12/02 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
php字符集转换
2017/01/23 PHP
PHP钩子实现方法解析
2019/05/21 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
树结构之JavaScript
2017/01/24 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
css3图片边框border-image的用法
2017/06/30 HTML / CSS
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
Linux操作面试题
2012/05/16 面试题
儿科护士自我鉴定
2013/10/14 职场文书
上海世博会口号
2014/06/19 职场文书
公司员工管理制度
2015/08/04 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
MySQL 聚合函数排序
2021/07/16 MySQL
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python