K近邻算法在机器学习算法中是最容易理解并且是最容易使用的算法,下面是机器学习实战中对K近邻算法的注释。
''' Created on Sep 16, 2010 kNN: k Nearest Neighbors Input: inX: vector to compare to existing dataset (1xN) dataSet: size m data set of known vectors (NxM) labels: data set labels (1xM vector) k: number of neighbors to use for comparison (should be an odd number) Output: the most popular class label @author: pbharrin ''' from numpy import * import operator from os import listdir def classify0(inX, dataSet, labels, k): dataSetSize = dataSet.shape[0] #shape函数读取numpy矩阵或者数组的指定维度长度 diffMat = tile(inX, (dataSetSize,1)) - dataSet#tile函数重复某个数组,构成一个新的数组 sqDiffMat = diffMat**2#每个元素进行平方 sqDistances = sqDiffMat.sum(axis=1)#sum按指定维度求和 distances = sqDistances**0.5#每个元素开方 sortedDistIndicies = distances.argsort()#argsort排序后得到原来数据的下标 classCount={} #定义一个字典 for i in range(k): voteIlabel = labels[sortedDistIndicies[i]]#返回指定下标的标签值 classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1#更新字典,对指定key值对应的值加1操作 #sorted函数用来排列字典,items返回字典的元组对的列表,key是用列表的某个属性作为关键字,reverse指定是否逆序排列 sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0] #创建数据集,返回数组 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 #从文件中解析数据 def file2matrix(filename): fr = open(filename)#根据filename指定的文件地址打开文件 numberOfLines = len(fr.readlines()) #以行的形式读取整个文件 returnMat = zeros((numberOfLines,3)) #分配空间用来接下来存储特征向量 classLabelVector = [] #分配空间用来接下来存储特征值对应的类别 fr = open(filename)#再一次打开指定文件 index = 0 for line in fr.readlines():#以行为单位遍历整个文档 line = line.strip()#用于移除字符串头尾指定的字符(默认为空格) listFromLine = line.split('t')#通过指定分隔符对字符串进行切片 returnMat[index,:] = listFromLine[0:3]#将在3维空间每个样本的特征向量存入returnMat classLabelVector.append(int(listFromLine[-1]))#将listFromLine最后一维的值存入classLabelVector index += 1#更新index return returnMat,classLabelVector def drawing(fileMat,classLabels): import matplotlib.pyplot as plt#导入绘图库 fig=plt.figure()#新建一个figure对象 ax=fig.add_subplot(111)#增加一个子窗口到fig ax.scatter(fileMat[:,1],fileMat[:,2],15.0*array(classLabels),15.0*array(classLabels))#在指定窗口绘制散点图 plt.show()#显示窗口 #数值归一化 def autoNorm(dataSet): minVals = dataSet.min(0) maxVals = dataSet.max(0) ranges = maxVals - minVals#得到最大值和最小值的差 normDataSet = zeros(shape(dataSet))#shape返回多维数组最长维度,初始化normDataSet容器 m = dataSet.shape[0] normDataSet = dataSet - tile(minVals, (m,1))#数组每个元素减去最小值 normDataSet = normDataSet/tile(ranges, (m,1)) #得到最终归一化结果 return normDataSet, ranges, minVals#返回归一化结果 def datingClassTest(): hoRatio = 0.50 #hold out 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):#取前0.5的数据进行测试 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))) print(errorCount)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889相关知识
【机器学习基础】第三十一课:集成学习之多样性
清华高材生:机器学习,没有捷径
机器学习训练过程中常见问题
【机器学习基础】机器学习的模型评估(评估方法及性能度量原理及主要公式)
机器学习之数据预处理(Python 实现)
机器学习模型评估与选择(关于训练集和测试集)
Airbnb机器学习框架Aerosolve
机器学习:训练集与测试集的划分
MS Learn 学堂|机器学习工作坊
北理工团队用机器学习分析大鼠在跑步机上“遮目”双足行走
网址: 机器学习之K近邻 https://m.mcbbbk.com/newsview471451.html
上一篇: 炫舞时代情侣之间如何刷心动 |
下一篇: 经典宠物连连看 |