python如何使用资讯实现特征向量分类

  介绍

小编给大家分享一下python如何使用资讯实现特征向量分类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

这是一个使用资讯把特征向量进行分类的演示。

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

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

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

代码:

# - *安康;编码:utf-8  - * -   时间=__author__  & # 39; Rossie& # 39;   得到numpy  import  *   import 运营商      & # 39;& # 39;& # 39;构造数据& # 39;& # 39;& # 39;   def  createDataSet ():   ,=,字符数组([[1.0,1.1],[1.0,1.0],[0],[0,0.1]])   标签才能=[& # 39;一个# 39;& # 39;一个# 39;,& # 39;b # 39;, & # 39; b # 39;】   return 才能;字符,标签      & # 39;& # 39;& # 39;从文件中读取数据,将文本记录转换为矩阵,提取其中特征和类标& # 39;& # 39;& # 39;   def  file2matrix(文件名):   fr=才能打开(文件名)   arrayOLines才能=fr.readlines ()   numberOfLines才能=len (arrayOLines),,,, #得到文件行数   returnMat才能=0 ((numberOfLines 3)),,, #创建以零填充的numberOfLines * 3的NumPy矩阵   classLabelVector才能=[]   ,指数=0   for 才能;line 拷贝arrayOLines:,,,,,,, #解析文件数据到列的表   ,,,行=line.strip ()   ,,,listFromLine=line.split (& # 39; \ t # 39;)   ,,,returnMat[指数,:]=listFromLine (0:3)   ,,,classLabelVector.append (listFromLine [1])   ,,,指数+=1   return 才能returnMat classLabelVector ,, #返回特征矩阵和类标集合      & # 39;& # 39;& # 39;归一化数字特征值到0 - 1范围& # 39;& # 39;& # 39;   & # 39;& # 39;& # 39;输入为特征值矩阵& # 39;& # 39;& # 39;   def  autoNorm(数据):   minVals才能=dataSet.min (0)   maxVals才能=dataSet.max (0)   ,=maxVals-minVals范围   normDataSet才能=0(形状(数据集)   m=才能dataSet.shape [0]   normDataSet才能=dataSet-tile (minVals (m, 1))   normDataSet才能=normDataSet/瓷砖(范围,(m, 1))   return 才能;normDataSet范围,minVals   ,,   def 分类(样本、数据集、标签,k):   dataSetSize才能=dataSet.shape[0],,, #数据集行数即数据集记录数   & # 39;才能& # 39;& # 39;距离计算& # 39;& # 39;& # 39;   diffMat才能=瓷砖(样本,(dataSetSize 1) -dataSet ,,,, #样本与原先所有样本的差值矩阵   sqDiffMat才能=diffMat * * 2,,, #差值矩阵平方   sqDistances才能=sqDiffMat.sum(轴=1),,,,#计算每一行上元素的和   距离才能=sqDistances * * 0.5,, #开方   sortedDistIndicies才能=distances.argsort(),,, #按距离中元素进行升序排序后得到的对应下标的列的表   & # 39;才能& # 39;& # 39;选择距离最小的k个点& # 39;& # 39;& # 39;   classCount才能={}   for 才能小姐:拷贝范围(k):   ,,,voteIlabel=标签(sortedDistIndicies[我]]   ,,,classCount [voteIlabel]=classCount.get (voteIlabel, 0) + 1   & # 39;才能& # 39;& # 39;从大到小排序& # 39;& # 39;& # 39;   sortedClassCount才能=排序(classCount.items(),关键=operator.itemgetter(1)反向=True)   return 才能sortedClassCount [0] [0]      & # 39;& # 39;& # 39;针对约会网站数据的测试代码& # 39;& # 39;& # 39;   def  datingClassTest ():   荷瑞修才能=0.20,,,,,#测试样例数据比例   datingDataMat datingLabels=才能file2matrix (& # 39; datingTestSet1.txt& # 39;)   normMat才能,,,,minVals=autoNorm (datingDataMat)   m 才能=normMat.shape [0]   numTestVecs才能=int (m *荷瑞修)   ,errorCount=0.0   ,k=4   for 才能小姐:拷贝范围(numTestVecs):   ,,,classifierResult=分类(normMat (,,,): normMat [numTestVecs: m,,,):, datingLabels [numTestVecs: m], k)   ,,,print (“, classifier  came  back :, % s,, thereal  answer 是:,% s", % (classifierResult, datingLabels[我]))   ,,,如果(classifierResult !=, datingLabels [我],),:   ,,,,,errorCount  1.0 +=,   打印才能(“,total  error  rate 是:,% f", %, (errorCount/浮动(numTestVecs)))      def  main ():   样才能=(0,0)#简单样本测试   sampleText 才能=,(39948年,6.830795,1.213342)#文本中向量样本测试   ,k=3   组织才能,标签=createDataSet ()   label1=才能分类(样本、组标签,k) #简单样本的分类结果   fileN =,才能“datingTestSet.txt"   矩阵,才能label =, file2matrix (fileN)   label2 才能=分类(sampleText、矩阵、标签、k) #文本样本的分类结果   打印才能(“ClassifiedLabel  of 从而simple 示例:“+ label1)   打印才能(“Classified  Label  of 从而textsample:“+ label2)            if  __name__==& # 39; __main__ # 39;:   ,,main ()   # datingClassTest才能()

python如何使用资讯实现特征向量分类