示例:在约会网站上使用k近邻算法
(1)收集数据:提供文本文件。
(2)准备数据: 使用python解析文本文件。
(3)分析数据:使用Matplotlib画二维扩散图。
(4)训练算法:此步驟不适用于k近邻算法。
(5)测试算法:使用海伦提供的部分数据作为测试样本。
测试样本和非测试样本的区别在于:测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。
(6)使用算法:产生简单的命令行程序,然后海伦可以输入一些特征数据以判断对方是否为自己喜欢的类型。
准备数据:从文本文件中解析数据
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import numpy as np
import operator
from openpyxl.chart.label import DataLabel
def file2matrix(filename):
#打开文件
fr = open(filename)
#读取文件所有内容
arrayOfLines = fr.readlines()
#文件行数
numberOfLines = len(arrayOfLines)
#创建特征矩阵
returnMat = np.zeros((numberOfLines,3))
#创建标签数组
classLabelVector = []
index = 0
for line in arrayOfLines:
#移除字符串头尾空格
line = line.strip()
#按'\t'切片
listFromLine = line.split('\t')
#把特征存放到特征矩阵中
returnMat[index,:] = listFromLine[0:3]
#标签分类并存放到标签数组
if listFromLine[-1] == 'didntLike':
classLabelVector.append(1)
elif listFromLine[-1] == 'smallDoses':
classLabelVector.append(2)
elif listFromLine[-1] == 'largeDoses':
classLabelVector.append(3)
index += 1
return returnMat, classLabelVector
if __name__=='__main__':
dataMat, DataLabel = file2matrix('datingTestSet.txt')
print(dataMat)
print(DataLabel)
分析数据:使用使用Matplotlib画二维扩散图
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import numpy as np
import operator
from openpyxl.chart.label import DataLabel
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import matplotlib.lines as mlines
from IPython.core.pylabtools import figsize
def file2matrix(filename):
#打开文件
fr = open(filename)
#读取文件所有内容
arrayOfLines = fr.readlines()
#文件行数
numberOfLines = len(arrayOfLines)
#创建特征矩阵
returnMat = np.zeros((numberOfLines,3))
#创建标签数组
classLabelVector = []
index = 0
for line in arrayOfLines:
#移除字符串头尾空格
line = line.strip()
#按'\t'切片
listFromLine = line.split('\t')
#把特征存放到特征矩阵中
returnMat[index,:] = listFromLine[0:3]
#标签分类并存放到标签数组
if listFromLine[-1] == 'didntLike':
classLabelVector.append(1)
elif listFromLine[-1] == 'smallDoses':
classLabelVector.append(2)
elif listFromLine[-1] == 'largeDoses':
classLabelVector.append(3)
index += 1
return returnMat, classLabelVector
def showDatas(dataMat, dataLabel):
#把画布分成4块,即2行2列,并设置画布大小
fig, axs = plt.subplots(nrows=2, ncols=2,figsize=(12,8))
#用matplotlib画图后,如果要添加汉字标签,比如设置汉字格式
font = FontProperties(fname=r"c:\Windows\Fonts\simsun.ttc&#