from numpy import *
import operator
def createDataSet():#建立訓練集
group=array([[,],[,],[,],[,]])
labels=['A','A','B','B']
return group,labels
def classify0(inX,dataSet,labels,k):
#index為輸入 如[2,3],dataset為訓練樣本集,k為選擇最近鄰居的數目
dataSetSize=dataSet.shape[] #行數
diffMat=tile(inX,(dataSetSize,))-dataSet
sqDiffMat=diffMat**
sqDistances=sqDiffMat.sum(axis=)#行向量相加
distances=sqDistances** #計算歐氏距離
sortedDisIndicies=distances.argsort() #距離由小到大的數組索引值,
classCount={}
for i in range(k):
voteIlabel=labels[sortedDisIndicies[i]] #統計前k個點所在類别出現的頻率
classCount[voteIlabel]=classCount.get(voteIlabel,)+
sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(),reverse=True)#按類别的頻率書降序排列
return sortedClassCount[][]#排第一的類别
group,labels=createDataSet()
myclass=classify0([,],group,labels,)
print myclass
結果: B
# -*- coding:utf-8 -*-
from numpy import *
import operator
def classify0(inX,dataSet,labels,k):
#index為輸入 如[2,3],dataset為訓練樣本集,k為選擇最近鄰居的數目
dataSetSize=dataSet.shape[] #行數
diffMat=tile(inX,(dataSetSize,))-dataSet
sqDiffMat=diffMat**
sqDistances=sqDiffMat.sum(axis=)#行向量相加
distances=sqDistances** #計算歐氏距離
sortedDisIndicies=distances.argsort() #距離由小到大的數組索引值,
classCount={}
for i in range(k):
voteIlabel=labels[sortedDisIndicies[i]] #統計前k個點所在類别出現的頻率
classCount[voteIlabel]=classCount.get(voteIlabel,)+
sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(),reverse=True)#按類别的頻率書降序排列
return sortedClassCount[][]#排第一的類别
def file2matrix(filename):#資料處理
fr=open(filename)
arrayOfLines=fr.readlines()
numberOfLines=len(arrayOfLines)
returnMat=zeros((numberOfLines,))
classLabelVector=[]
i=
for line in arrayOfLines:
line=line.strip()
listFromLine=line.split('\t')
returnMat[i,:]=listFromLine[:]
classLabelVector.append(int(listFromLine[-]))
i=i+
return returnMat,classLabelVector
def autoNorm(dataSet):#歸一化特征值
minValues=dataSet.min()
maxValues=dataSet.max()
DValues=maxValues-minValues
normDataSet=zeros(shape(dataSet))
m=dataSet.shape[]
normDataSet=dataSet-tile(minValues,(m,))
normDataSet=normDataSet/tile (DValues,(m,))
return normDataSet,DValues,minValues
def datingClassTest():#劃分訓練集和測試集
hoRatio=#10%用于test
datingDataMat,datingLabels=file2matrix('datingTestSet2.txt')
normMat,Dvalues,minValues=autoNorm(datingDataMat)
m=normMat.shape[]
numTestVecs=int(m*hoRatio)
errorCount=
for i in range(numTestVecs):
classifierResult=classify0(normMat[i,:],normMat[numTestVecs:,:],datingLabels[numTestVecs:],)
print "the classifier comeback with:%d,the real answer is:%d"%(classifierResult,datingLabels[i])
if(classifierResult!=datingLabels[i]):
errorCount+=
print "the total error rate is:%f"%(errorCount/float(numTestVecs))