【事例:关于约会网站配对的效果】Python程序解析
准备数据
def file2matrix(filename):
love_dictionary = {
'largeDoses': 3, 'smallDoses': 2, 'didntLike': 1}
fr = open(filename) # 打开文件
arrayOLines = fr.readlines() #读文件的所有行
numberOfLines = len(arrayOLines) # get the number of lines in the file(得到文件行数)
returnMat = zeros((numberOfLines, 3)) # prepare matrix to return(创建Numpy矩阵)
classLabelVector = [] # prepare labels return 设置返回的级别的数组
index = 0
for line in arrayOLines:
line = line.strip()#用于移除字符串头尾的空格
listFromLine = line.split('\t')#根据空格截取,txt文件中不同种类就是用空格来差分的
returnMat[index, :] = listFromLine[0:3]# 一行的前三个
if (listFromLine[-1].isdigit()):#方法检测字符串是否只由数字组成
classLabelVector.append(int(listFromLine[-1]))#直接添加123的数字
else:
classLabelVector.append(love_dictionary.get(listFromLine[-1]))#将文字转换成文字进行
index += 1#+1之后准备返回2个集合,一个是矩阵,一个是好感度
return returnMat, classLabelVector
实施分类算法
步骤
- 计算已知类别数据集中的点与当前点之间的距离;
- 按照距离递增次序排序;
- 选取与当前点距离最小的k个点;
- 确定前k个点所在类别的出现频率;
- 返回前k个点出现频率最高的类别作为当前点的预测分类
代码解析
可以直接调用上文的抽出数据,可以在控制台数据若干数组,下面需要通过图形化展示这些内容,Matplotlib创建散点图。
fig = plt.figure() # 创建plot的图像展示
ax = fig.add_subplot(111) # z整体展示
datingDataMat, datingLabels = kNN.file2matrix('datingTestSet.txt') # 读文件,得到3项数据的矩阵,和好感度的数组
# ax.scatter(datingDataMat[:,1], datingDataMat[:,2])
#scatter是做散点图的函数,分别是
print("***************