【机器学习】K-近邻算法的Python实现
来源:互联网 发布:linux命令行调整音量 编辑:程序博客网 时间:2024/05/18 01:00
'''Created on Jan 27, 2015@author: 史帅'''from numpy import *import operatorimport redef fileToDataSet(filename,n): ''' 此方法功能是从文件中读取样本集数据,样本数据的格式为:数据以空白字符分割,最后一列为正整数型的类标签 参数: filename:存放样本集数据的文件路径 n:取每条数据的前n个特征值作为分类的特征值 返回值: dataSet:样本集数据组成的二维数组 labels:样本集数据对应的类标签 ''' file=open(filename, mode='r') lines=file.readlines() lineslen=len(lines) dataSet=zeros((lineslen,n)) labels=[] index=0 p=re.compile(r"\s+") for line in lines: line=p.split(line.strip()) dataSet[index,:]=line[0:n] labels.append(int(line[-1])) index+=1 return dataSet,labelsdef formatDataSet(dataSet): ''' 此方法功能是归一化样本集数据,将每一项特征值归一化为0~1之间的浮点数 参数: dataSet:样本集数据组成的二维数组 返回值: formatDataSet:归一化之后的样本集数据组成的二维数组 ranges:特征值最大值与最小值的差组成的一维数组 mins:最小特征值组成的一维数组 ''' mins=dataSet.min(axis=0) maxs=dataSet.max(axis=0) ranges=maxs-mins len=dataSet.shape[0] formatDataSet=zeros(shape(dataSet)) formatDataSet=dataSet-tile(mins,(len,1)) formatDataSet=formatDataSet/tile(ranges,(len,1)) return formatDataSet,ranges,minsdef classify(inX,dataSet,labelValues,k,labels): ''' 此方法是K-近邻算法的主算法,功能是对待分类数据进行分类 参数: inX:归一化后的待分类数据,与样本集数据格式一致 dataSet:归一化后的样本集数据组成的二维数组 labelValues:样本集数据的正整数型类标签 k:样本集数据中与待分类数据的距离最相近的前k条数据,k一般不大于20 labels:样本集数据中类标签从小到大依次代表的实际类别组成的一维数组 返回值: inXClass:待分类数据的实际类别 ''' dataSetSize=dataSet.shape[0] inXdataSet=tile(inX,(dataSetSize,1))-dataSet inXdataSet=inXdataSet**2 inXdataSet=inXdataSet.sum(axis=1) inXdataSet=inXdataSet**0.5 inXdataSetIndex=inXdataSet.argsort() classCount={} for i in range(k): voteLabel=labelValues[inXdataSetIndex[i]] classCount[voteLabel]=classCount.get(voteLabel,0)+1 sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) inXClass=labels[sortedClassCount[0][0]-1] return inXClass def classifyTest(filename,n,k,testRate=0.1): ''' 此方法功能是测试K-近邻算法的错误率 参数: filename:存放样本集数据的文件路径 n:取每条数据的前n个特征值作为分类的特征值 k:样本集数据中与待分类数据的距离最相近的前k条数据,k一般不大于20 testRate:数据集中作为测试数据占的比例,真实的样本集数据的比例为1-testRate.默认值为0.1 返回值: K-近邻算法的错误率,返回值类型为float ''' dataSet,labelValues=fileToDataSet(filename,n) len=dataSet.shape[0] testLen=int(len*testRate) testDataSet=dataSet[0:testLen] dataSet,ranges,mins=formatDataSet(dataSet[testLen:]) errorCount=0 for i in range(int(testLen)): if labelValues[i]!=classify((testDataSet[i]-mins)/ranges,dataSet,labelValues[testLen:],k): errorCount+=1 print("错误数:{0}".format(errorCount)) print("错误率为:{0}".format(errorCount/float(testLen))) return errorCount/float(testLen)
0 0
- 【机器学习】K-近邻算法的Python实现
- 用Python实现机器学习算法---k近邻算法
- python机器学习实战1:实现k-近邻算法
- 机器学习:K-近邻算法原理与Python代码实现
- 机器学习—K近邻,KD树算法python实现
- 【机器学习算法-python实现】KNN-k近邻算法的实现(附源码)
- 【机器学习算法-python实现】KNN-k近邻算法的实现(附源码)
- 【机器学习算法-python实现】KNN-k近邻算法的实现(附源码)
- python实现最简单的机器学习算法之一-----K-近邻算法
- 机器学习算法的python实现(1)---k近邻算法(kNN)
- python机器学习之K近邻算法
- 机器学习 & python k-近邻算法
- python机器学习之 K-近邻算法
- 机器学习(K-近邻算法)Python的基础知识
- 【机器学习系列】kNN(k近邻算法)的python实现
- 机器学习笔记1-k近邻算法的实现
- 《机器学习实战》k最近邻算法(K-Nearest Neighbor,Python实现)
- K近邻---Python---机器学习
- Unity3D游戏开发之委托(Delegate)
- Android内存分析和调优(上)
- 关于Java socket通信的随笔
- hdu 4856 水dp
- 基于TCP和UDP的套接字编程步骤学习
- 【机器学习】K-近邻算法的Python实现
- ffmpeg编译 for ios
- 1020. Tree Traversals (25)
- Intent四个重要属性
- 生肖屬相/十二生肖與十二地支
- “Ceph浅析”系列之三——Ceph的设计思想
- Android内存分析和调优(中)
- Restricted Boltzman Machine
- 给UIView 添加边框