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实现绘制树枝简单示例
Jul 24 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
Jul 07 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
分析经典Python开发工程师面试题
Apr 08 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
Win10环境python3.7安装dlib模块趟过的坑
Aug 01 Python
Python基础之字符串常见操作经典实例详解
Feb 26 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
Mar 13 Python
浅析关于Keras的安装(pycharm)和初步理解
Oct 23 Python
python 爬虫如何实现百度翻译
Nov 16 Python
基于django和dropzone.js实现上传文件
Nov 24 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
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
PHP常用技巧汇总
2016/03/04 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
使用javascipt---实现二分查找法
2013/04/10 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
Python列表计数及插入实例
2014/12/17 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Python爬取成语接龙类网站
2018/10/19 Python
Python实现DDos攻击实例详解
2019/02/02 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
python2 对excel表格操作完整示例
2020/02/23 Python
python为什么要安装到c盘
2020/07/20 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
电信营业员自我评价分享
2014/01/17 职场文书
物流业务员岗位职责
2014/02/08 职场文书
大学四年个人的自我评价
2014/02/26 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
关于责任的演讲稿
2014/05/20 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL