《机器学习实战》(一)knn算法
2017-04-13 16:43
387 查看
K最近邻(k-Nearest Neighbor,KNN)分类算法可以说是最简单的机器学习算法了。它采用测量不同特征值之间的距离方法进行分类。它的思想很简单:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中最相似数据(最近邻)的分类标签。一般来说,只选择样本数据集中前 k 个最相似的数据,这就是KNN算法的出处, 通常k是不大于20的整数。最后,选择 k 个最相似数据中出现次数最多的分类,作为新数据的分类。
实验准备
numpy是python中的一款高性能科学计算和数据分析的基础包
matplotlib是一个Python的图形框架
代码如下
实验准备
numpy是python中的一款高性能科学计算和数据分析的基础包
matplotlib是一个Python的图形框架
代码如下
from numpy import * from os import listdir import operator def classify0(inX, dataSet, labels, k): dataSetSize = dataSet.shape[0] diffMat = tile(inX, (dataSetSize, 1)) - dataSet sqDiffMat = diffMat**2 sqDistances = sqDiffMat.sum(axis=1) distances = sqDistances**0.5 sortedDistIndicies = distances.argsort() classCount = {} for i in range(k): voteIlabel = labels[sortedDistIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0] def img2vector(filename): rows = 32 cols = 32 returnVect = zeros((1, rows * cols)) fr = open(filename) for row in range(rows): lineStr = fr.readline() for col in range(cols): returnVect[0, 32*row+col] = int(lineStr[col]) return returnVect def handwritingClassTest(): hwLabels = [] trainingFileList = listdir('trainingDigits') m = len(trainingFileList) trainingMat = zeros((m,1024)) for i in range(m): fileNameStr = trainingFileList[i] fileStr = fileNameStr.split('.')[0] classNumStr = int(fileStr.split('_')[0]) hwLabels.append(classNumStr) trainingMat[i,:] = img2vector('trainingDigits/%s' % fileNameStr) testFileList = listdir('testDigits') errorCount = 0.0 mTest = len(testFileList) for i in range(mTest): fileNameStr = testFileList[i] fileStr = fileNameStr.split('.')[0] classNumStr = int(fileStr.split('_')[0]) vectorUnderTest = img2vector('testDigits/%s' % fileNameStr) classifierResult = classify0(vectorUnderTest, \ trainingMat, hwLabels, 3) print "the classifier came back with: %d, the real answer is: %d"\ % (classifierResult, classNumStr) if (classifierResult != classNumStr): errorCount += 1.0 print "\nthe total number of errors is: %d" % errorCount print "\nthe total error rate is: %f" % (errorCount/float(mTest))
相关文章推荐
- 机器学习实战(一)——kNN算法
- 《机器学习实战》(1)——kNN算法
- 机器学习实战(第一章)---KNN算法
- 《机器学习实战》读书笔记(一) kNN算法
- 《机器学习实战》-- KNN算法
- KNN算法
- 《机器学习实战》之KNN代码基础
- 《机器学习实战》读书笔记
- 《机器学习实战》读书笔记 第四章 朴素贝叶斯(part 1)
- 《机器学习实战》中实例名称汇总
- [机器学习&数据挖掘]机器学习实战决策树plotTree函数完全解析
- 《机器学习实战》(二)k-近邻算法(KNN)
- 《机器学习实战》学习笔记:基于朴素贝叶斯的垃圾邮件过滤
- 《机器学习实战》笔记之七——利用AdaBoost元算法提高分类性能
- 机器学习笔记——(1)kNN算法
- 决策树实践,参考《机器学习实战》
- 机器学习实战——kNN算法
- 《机器学习实战》预测数值型数据-回归(Regression)
- 《机器学习实战》读书笔记之k-近邻算法
- 【2】机器学习实战 第三章 决策树的构造