机器学习实战学习笔记(一)
来源:互联网 发布:电气工程算量软件 编辑:程序博客网 时间:2024/06/06 02:34
- shape的用法
- numpy.tile()函数
- numpy.sum()的用法
- KNN算法和kmeans算法的异同
- numpy.argsort()
- 字典的get方法
- python中iteritems()函数
一开始看问题还是蛮多的,看python的基础语法看完就忘了,只有到真正需要用的时候才会了解到相应的用法。
下面是带注释的代码。
from numpy import *import operatorfrom os import listdirdef classify0(inX, dataSet, labels, k):#inx需要进行分类的样本向量 dataSetSize = dataSet.shape[0]#获得dataset的行数,也就是训练样本的数量 diffMat = tile(inX, (dataSetSize,1)) - dataSet#将inx复制多列,列数和样本数一样,然后和样本相减 sqDiffMat = diffMat**2#将结果平方 sqDistances = sqDiffMat.sum(axis=1)#axis=1的意思是按行求和,就是将每一行所有元素相加 distances = sqDistances**0.5#和开方 sortedDistIndicies = distances.argsort() #对矩阵进行排序,将行好或者说索引按递增序列返回 classCount={} for i in range(k): voteIlabel = labels[sortedDistIndicies[i]]#距离最近的第i个点的标签(类别) classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1#对应的类别的数量加一(字典中没有此类别就返回0) sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)#根据value值进行降序排序 return sortedClassCount[0][0]#返回value值最大的类
- zeros的用法
- strip函数的用法
- readlines的用法
- 注意切片是前切后不切
- 循环之前记得再把文件读一遍
def file2matrix(filename): fr = open(filename) numberoflines = len(fr.readlines()) returnMat = zeros([numberoflines, 3]) classlabelvec = [] fr = open(filename)#这行很重要,一开始以为是多余的就截掉了,后来发现截掉以后循环不执行 index = 0 for line in fr.readlines(): line = line.strip()#截取掉所有的回车符 listfromline = line.split('\t') returnMat[index, :] = listfromline[0:3] classlabelvec.append(int(listfromline[-1]))#注意类型转换 index += 1 return returnMat, classlabelvec
直接贴一下代码,拉长一下篇幅。
def autonorm(dataset): minval = dataset.min(0)# maxval = dataset.max(0)# ranges = maxval - minval m = dataset.shape[0] normdataset = zeros(shape(dataset)) normdataset = dataset - tile(minval, (m, 1)) normdataset = normdataset/tile(ranges, (m, 1)) return normdataset, rangesdef datingclasstest(): ratio = 0.1 a,b = file2matrix('datingtestset2.txt') c,d = autonorm(a) m = c.shape[0] index = int(m*ratio) down = 0.0 for i in range(index): z = classify0(c[i,:], c[index:m,:], b[index:m], 3) if(z != b[i]): down+=1 downratio = down / index print downratiodef img2vec(filename): returnvec = zeros((1,1024)) fr = open(filename) for i in range(32): line = fr.readline() for j in range(32): returnvec[0, 32*i+j] = int(line[j]) return returnvecdef handwritingClassTest(): hwLabels = [] trainingFileList = listdir('trainingDigits')#获取目录下文件,类似于readlines 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') #iterate through the test set errorCount = 0.0 mTest = len(testFileList) for i in range(mTest): fileNameStr = testFileList[i] fileStr = fileNameStr.split('.')[0] #take off .txt 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
阅读全文
0 0
- 《机器学习实战》学习笔记(一)
- 《机器学习实战》学习笔记(一)
- 机器学习实战学习笔记(一)
- 机器学习实战笔记(一)概述
- 机器学习实战笔记(一):KNN
- 机器学习实战(一)
- 《机器学习实战》笔记一——机器学习基础
- Python 《机器学习实战》学习笔记(一)——机器学习基础
- 机器学习实战 笔记 debug(一) kNN
- 《机器学习实战》笔记_k-近邻算法(一)
- 机器学习实战笔记
- 笔记-《机器学习实战》
- 机器学习实战笔记
- 《机器学习实战》笔记
- 机器学习实战 学习笔记
- 《机器学习实战》学习笔记
- 机器学习实战学习笔记
- 机器学习实战---学习笔记
- MySQL
- 测试流程
- WIN32 C++ 操作剪贴板
- Android Studio3.0开发JNI流程------JNI入门级
- PV、UV、IP之间的区别与联系
- 机器学习实战学习笔记(一)
- 实现多标签页效果
- HTTP POST GET区别
- 【金融财经】金融市场一周简报(2017-11-24)
- 今天测试代码时发现代码报错,解决后,记录之。
- 查询全部数据库 修改同一个字段的值存储过程
- ubuntu centos 安装kvm
- 云星数据---Scala实战系列(精品版)】:Scala入门教程036-Scala实战源码-Scala match语句01
- xml源文件的文档生成工具--DITA Open Toolkit(DITA-OT)的使用入门