Machine Learning in Action/机器学习实践:kNN算法之约会问题
来源:互联网 发布:感恩节的由来 知乎 编辑:程序博客网 时间:2024/05/16 17:48
因为自己比较忙,就没有太多时间去学习python的基础知识,所以简单的看了一点py的语法,就直接上书开始敲代码了,中间遇到比较多的问题,所以就加了很多注释(用的python3)
from numpy import * #导入科学计算包Numpyimport operator #导入运算符包# 创建数据集和标签def createDataSet(): group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]]) labels = ['A', 'A', 'B', 'B'] return group, labels''' (1)计算已知类别数据集中的点与当前点的距离 (2)按照距离递增次序排列 (3)选取与当前点距离最小的k个点 (4)确定前k个点所属类别出现的频率 (5)返回频率最高的类别,作为当前点的预测分类'''def classify0(inX, dataSet, labels, k): #set.shape[0] 求数组的行数。 set.shape[1]求数组的列数。求出源数据的行数 dataSetSize = dataSet.shape[0] #tile(inX,(dataSetSize,1))将inX复制成一个dataSetSize行的数列, inX用于分类的向量,dataSet用于训练的向量,diffMat,用于分类的点,到各个点的向量 diffMat = tile(inX, (dataSetSize, 1)) - dataSet sqDiffMat = diffMat**2 #.sum(axis=1)矩阵的每一行相加的和 sqDistances = sqDiffMat.sum(axis=1) distances = sqDistances**0.5 #argsort()将数组排序之后的下标,由大到小返回 sortedDistIndicies = distances.argsort() classCount = {} for i in range(k): #从1到k读取第一到第k元素的标签 voteIlabel = labels[sortedDistIndicies[i]] #对读取到的标签加一 classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 #排序后输出标签数最大的那个 sortedClassCount = sorted(classCount.items(),key = operator.itemgetter(1), reverse = True) return sortedClassCount[0][0]#创建file2matrix讲txt文件中的数据转化为矩阵的形式,并返回def file2matrix(filename):#打开filename文件,并返回文件指针 fr = open(filename) #读取文件的所有行并作为一个列表放回,包含所有的行结束符 arrayOLines = fr.readlines()#获取文件的行数 numberOfLines = len(arrayOLines)#创建一个列为3,行为数据行数的矩阵,用于储存数据 returnMat = zeros((numberOfLines,3)) classLabelVector = [] index = 0 for line in arrayOLines: #line.strip()删除行中的空白字符 line = line.strip() #通过制表字符\t对line切片 listFromLine = line.split('\t')#将数据读取到returnMat矩阵中 returnMat[index,:] = listFromLine[0:3]#将标签读取到classLabelVecor矩阵中 classLabelVector.append(int(listFromLine[-1])) index += 1 return returnMat,classLabelVector#将数据归一化def autoNorm(dataSet): #找到最大和最小的数据 minVals = dataSet.min(0) maxVals = dataSet.max(0) ranges = maxVals - minVals #创建一个行数和dataSet相同的空矩阵 normDataSet = zeros(shape(dataSet)) #获取数据集合的行数 m = dataSet.shape[0] #将数据集合的每个数据都减去最小值 normDataSet = dataSet - tile(minVals,(m,1)) #将减之后的数据,处以范围 normDataSet = dataSet/tile(ranges,(m,1)) #返回归一化之后的数据,数据的极差,数据的最小值 return normDataSet, ranges, minVals#testdef datingClassTest(): #测试的数据和总数据的占比 hoRatio = 0.10 #通过文件读取约会数 datingDataMat, datingLabels = file2matrix('datingTestSet2.txt') #归一化约会数据 normMat, ranges, minVals = autoNorm(datingDataMat) #获取归一化数据后的行数 m = normMat.shape[0] #得到需要测试的数据大小 numTestVecs = int(m*hoRatio) #用于计算预测失误的数量 errorCount = 0.0 #遍历测试数据 for i in range(numTestVecs): #将数据带入函数进行比较,k取3 classifierResult = classify0(normMat[i,:], normMat[numTestVecs:m,:], datingLabels[numTestVecs:m],3) #打印测试结果,和真实结果 print("The classifier came back with: %d, the real answer is: %d" %(classifierResult, datingLabels[i])) #判断对错 if(classifierResult != datingLabels[i]): errorCount += 1.0 #打印测试错误率 print("The total error rate is :%f" %(errorCount/float(numTestVecs)))#预测函数def classifyPerson(): #创建结果集合 resultList = ['not at all', 'in small does', 'in large doess'] #对数据进行输出 py3将raw_input改为input percentTats = float(input("percenttage of time spent playing video games?")) ffMiles = float(input("frequent flier miles earned per year?")) iceCream = float(input("liters of ice cream consumed per year?")) #获取原始数据 datingDataMat, datingLabels = file2matrix("datingTestSet2.txt") normMat, ranges, minVals = autoNorm(datingDataMat) #获取需要测试数据 inArr = array([ffMiles, percentTats, iceCream]) #进行预测 classifierResult = classify0((inArr-minVals)/ranges,normMat,datingLabels,3) #打印 print("you will probably like this man:%s" %(resultList[classifierResult-1]))
阅读全文
0 0
- Machine Learning in Action/机器学习实践:kNN算法之约会问题
- MACHINE LEARNING IN ACTION KNN
- 小白学习Machine Learning in Action-机器学习实战------分类之k近邻算法
- 机器学习实战Machine Learning In Action 中的KNN代码详细解释
- Machine Learning in Action 学习笔记-(2)kNN k近邻算法
- Machine Learning In Action:KNN(Python)
- Machine learning in action ch02 KNN笔记
- 【Machine Learning in Action】Chap1|Classification|kNN
- 人工智能--机器学习实战总结(Machine Learning in Action )
- 机器学习实战(Machine Learning in Action)参考答案以及原始数据
- 《 机器学习实战》(Machine Learning in Action) 一书 中的错误之处(内容、代码)
- 机器学习-kNN算法改进约会效果
- 【machine learning】KNN算法
- Machine Learning 笔记之KNN算法
- Machine Learning In Action -- kNN的python实现
- Machine Learning In Action -- kNN (k Nearest Neighbors)
- Machine Learning in action –kNN(已勘误)
- 机器学习实战(Machine Learning in Action)笔记--Chapter1:机器学习基础
- 1101---递归求解
- java判断某个点是否在所画范围内(多边形/圆形)
- 【十八掌●内功篇】第五掌:HDFS之基础知识
- 解决tomcat闪退问题
- 博弈论模板
- Machine Learning in Action/机器学习实践:kNN算法之约会问题
- 再生龙盘对盘拷贝Linux
- 登陆界面设计
- 《设计模式之禅》学习-----工厂方法模式
- 组策略轻松实现软件发布,Active Directory系列之二十二
- YARN node labels
- GC
- mongodb 常见问题
- 【思维导图】02-图论