对机器学习实战这本书的KNN部分进行整理,代码分两部分,一部分是myKNN.py,包含了所需的函数,另一部分是myKNN_run.py,对所需函数进行调用。python版本为3.X。
myKNN.py:
# coding: utf-8
# In[3]:
from numpy import *
import operator
import os
def classify0(inX, dataSet, labels, k):
#inX:用于分类的输入向量,1*2
#dataSet:训练样本集,4*2
dataSetSize = dataSet.shape[0]
#距离计算,用矩阵快
diffMat = tile(inX, (dataSetSize, 1)) - dataSet# (A-B)
#tile:重复
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
#按距离从小到大排序
sortedDistIndices = distances.argsort()
#确定前k个点所在类别出现频率
classCount = {}
for i in range(k):
voteIlabel = labels[sortedDistIndices[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1#字典统计每个label出现的次数
#出现频率最高点为预测类别
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
print(sortedClassCount)
return sortedClassCount[0][0]
def file2matrix(filename):
#将约会数据文件转成矩阵
fr = open(filename)
arrayOLines = fr.readlines()
numberOfLines = len(arrayOLines)
returnMat = zeros((numberOfLines,3))
classLabelVector = []
index = 0
for line in arrayOLines:
line = line.strip()