700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 机器学习实战之k-近邻算法

机器学习实战之k-近邻算法

时间:2019-01-22 17:16:34

相关推荐

机器学习实战之k-近邻算法

python算法实例

#The first machine learning algorithm--kNN'''导入科学计算包Numpy和运算符模块'''from numpy import *import operatordef creatDataSet():group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])labels=['A','A','B','B']return group,labels'''inX是用于分类的输入向量,dataSet输入的训练样本集,labels标签向量,k确定选择最近邻居的数目'''def classify0(inX,dataSet,labels,k):#计算距离dataSetSize=dataSet.shape[0] #数据集的行diffMat=tile(inX,(dataSetSize,1))-dataSetsqDiffMat=diffMat**2sqDistance=sqDiffMat.sum(axis=1)distances=sqDistance**0.5sortedDistanceIndicies=distances.argsort()classCount={}#选择距离最小的K个点for i in range(k):voteIlabel=labels[sortedDistanceIndicies[i]]classCount[voteIlabel]=classCount.get(voteIlabel,0)+1#排序sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)return sortedClassCount[0][0]# group,labels=creatDataSet()# classify0([0,0],group,labels,3)# print(classify0([0,0],group,labels,3))'''准备数据:从文本文件中解析数据,将文本记录转为numpy的解析程序'''def file2matrix(filename):fr=open(filename)arrayOLines=fr.readlines()numberOfLines=len(arrayOLines) #得到文件行数returnMat=zeros((numberOfLines,3)) #创建0矩阵,用作返回的numpy矩阵classLabelVector=[]index=0#解析文件数据到列表for line in arrayOLines:line=line.strip() #去掉所有回车字符listFromLine=line.split('\t') #使用tab字符将上一步得到的整行数据分割为一个元素列表returnMat[index,:]=listFromLine[0:3] #选取前三个元素,存到特征矩阵中classLabelVector.append(int(listFromLine[-1])) #-1代表最后一列元素index+=1return returnMat,classLabelVectordatingDataMat,datingLabels=file2matrix('datingTestSet.txt')'''分析数据:使用matplotlib创建散点图'''import matplotlibimport matplotlib.pyplot as pltfig=plt.figure()ax=fig.add_subplot(111)ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15.0*array(datingLabels),15.0*array(datingLabels)) #使用datingDataMat矩阵第二列和第三列的数据plt.show'''准备数据:归一化数据,将数据的取值范围处理为0到1或者-1到1autoNorm()函数可以自动将数字特征值转化为0到1的区间tile(x,(2))函数将x将函数沿着X轴扩大两倍,tile(x,(1,2))将x向Y轴扩大1倍,向X轴扩大2倍'''def autoNorm(dataSet):minVals=dataSet.min(0) #使得函数可以从列中选取最小值,列!!!maxVals=dataSet.max(0) #最大特征值ranges=maxVals-minValsnormDataSet=zeros(shape(dataSet))m=dataSet.shape[0] #1000,和前面特征矩阵的行数相同normDataSet=dataSet-tile(minVals,(m,1)) #统一特征矩阵1000x3和minVals、range(1x3)的大小normDataSet=normDataSet/tile(ranges,(m,1)) #特征值相除return normDataSet,ranges,minValsnormMat,ranges,minVals=autoNorm(datingDataMat)'''测试算法:作为完整程序验证分类器'''def datingClassTest():hoRatio=0.1datingDataMat,datingLabels=file2matrix('datingTestSet.txt')normMat,ranges,minVals=autoNorm(datingDataMat)m=normMat.shape[0]numTestVecs=int(m*hoRatio)errorCount=0.0for i in range(numTestVecs):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.0print("the total error rate is %f" %(errorCount/float(numTestVecs)))

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。