分类器针对约会网站的测试

def datingClassTest():__ _hoRatio = 0.1 _#从数据集中选取为测试样本的比例<br /> _datingDataMat,datingLabels = knn.file2matrix("datingTestSet.txt") _#由数据集文件获得数据矩阵、类别列表<br /> _normMat = knn.autoNorm(datingDataMat) _#对数据进行归一化,获得归一化处理后的矩阵<br /> _m = normMat.shape[0] _#获取矩阵行数<br /> _numTestVecs = int(m * hoRatio) _#选取为测试样本的数据条数<br /> _errorCount = 0.0 _#初始化错误率<br /> _for i in range(numTestVecs):<br /> classifierResult = knn.classify0(normMat[i,:],normMat[numTestVecs:m,:],<br /> datingLabels,5)<br /> print(datingDataMat[i],"预测类别:",classifierResult,"真实类别:",datingLabels[i])<br /> _#计算错误率<br /> _if(classifierResult != datingLabels[i]):<br /> errorCount += 1.0<br /> print("错误率 = ",errorCount / float(numTestVecs))
通过设置classify0()方法中K的值来调整错误率。


通过接收用户输入的特征值,对感兴趣程度进行预测

_#约会网站预测函数<br />_def classifyPerson():<br /> resultList = ["not at all","in small does","in large doses"]<br /> print("请输入你要预测感兴趣程度的人的下列特征:")<br /> milesFlown = float(input("一年的飞行里程:"))<br /> gameTime = float(input("每周的游戏时间:"))<br /> iceCream = float(input("每周吃多少升冰淇淋?:"))<br /> datingDateMat,datingLabels = knn.file2matrix("datingTestSet2.txt")<br /> normMat,ranges,minValue = knn.autoNorm(datingDateMat)<br /> inArr = np.array([milesFlown,gameTime,iceCream])<br /> _# 对输入矩阵进行归一化<br /> _normIntArr = (inArr - minValue) / ranges<br /> classifierResult = knn.classify0(normIntArr,normMat,datingLabels,k=5)<br /> print("classifierResult = ",classifierResult)<br /> print("你可能对此人感兴趣程度为:",resultList[int(classifierResult)-1])

以训练数据集中的第72行数据进行测试:

image.png
分类器的预测结果与数据集中该条数据的真实类别相同。