1 def datingclassTest():
2 hoRatio = 0.20
3 datingDataMat,datingLabels = file2matrix('datingTestSet2.txt')
4 normMat,ranges,minVals = autoNorm(datingDataMat)
5 m = normMat.shape[0] #m为样本条目数
6 numTestVecs = int(m*hoRatio) #10%的样本数据量
7
8 errorCount = 0.0
9 for i in range(numTestVecs):
10 classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],\
11 datingLabels[numTestVecs:m],12)
12 #normMat[i,:]~输入某一的特征向量 (1,3)
13 #normMat[numTestVecs:m,:]~训练样本数据为后90%的特征向量(900,3)
14 #datingLabels[numTestVecs:m]~训练样本标签值(900,)
15 #k取3,表示取训练样本中与输入向量相距最近的3个样本
16 #classify0()函数返回值为3个样本中,标签值数量最多的那个标签值
17 print('the classifier came back with:%d, the real answer is:%d'\
18 %(classifierResult, datingLabels[i]))
19 #打印根据k近邻算法得到的标签值,和样本数据中实际的标签值
20 if classifierResult != datingLabels[i]:
21 errorCount += 1.0
22 #如果两者不相等,则错误数量自增1.
23 print('the total error rate is: %f'%(errorCount/float(numTestVecs)))
24 #用错误数量总数 / 总的测试样本数得到错误率。