介绍
小编给大家分享一下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如何使用资讯实现特征向量分类