K-近邻算法之约会网站配对及手写识别系统 一、约会网站配对 1.1案例分析 我的朋友海伦一直使用在线约会网站寻找适合自己的约会对象。尽管约会网站会推荐不同的人选,但她没有从中找到喜欢的人。经过一番总结,她发现曾交往过三种类型的人: □ 不喜欢的人 □ 魅力一般的人 □ 极具魅力的人 海伦收集了自己的一些约会记录的数据信息。每个样本数据占据一行,总共有1000行。 数据文件 datingTestSet2.txt 海伦的样本数据局主要包含以下3种特征: □ 每年获得的飞行常客里程数 □ 玩视频游戏所耗时间百分比 □ 每周消费的冰淇淋公升数 她希望通过以上这三个特征来进行判断自我感觉。 1.2数据格式 数据存储在文件datingTestSet.txt 中,每个样本数据占据一行,总共有1000行,以下是样本特征
□ 每年获得的飞行常客里程数 □ 玩视频游戏所耗时间百分比 □ 每周消费的冰激凌公升数 1.3代码实现
def file2matrix1(filename):
fr = open(filename)
arrayLines = fr.readlines()
numberLines = len(arrayLines)
returnMat = zeros((numberLines,3))
classlabelVector = []
index = 0
for line in arrayLines:
line = line.strip()
listFromLine = line.split('\t')
returnMat[index,:] = listFromLine[0:3]
classlabelVector.append(int(listFromLine[-1]))
index +=1
return returnMat,classlabelVector
def file2matrix(filename):
love_dictionary={'largeDoses':3, 'smallDoses':2, 'didntLike':1}
fr = open(filename)
arrayOLines = fr.readlines()
numberOfLines = len(arrayOLines)
returnMat = zeros((numberOfLines,3))
classLabelVector = []
index = 0
for line in arrayOLines:
line = line.strip()
listFromLine = line.split('\t')
returnMat[index,:] = listFromLine[0:3]
print(returnMat)
if(listFromLine[-1].isdigit()):
classLabelVector.append(int(listFromLine[-1]))
else:
classLabelVector.append(love_dictionary.get(listFromLine[-1]))
index += 1
return returnMat,classLabelVector
datingDataMat,datingLabels = file2matrix("datingTestSet.txt")
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1], datingDataMat[:,2], 15.0*array(datingLabels), 15.0*array(datingLabels))
ax.axis([-2,25,-0.2,2.0])
plt.xlabel("df")
plt.ylabel('每周消耗冰激凌公升数')
plt.show()
result = classify0([1,1],group,labels,3)
print(result)
import matplotlib
print(matplotlib.matplotlib_fname())
1.4归一化数值
需求分析 1.5运行结果 二、手写识别系统 1.1案例分析 手写数字识别,或者说图像识别的本质就是把图所示的一张图片转换成计算机能够处理的数字形式 数据集(手写字图片被保存为32*32的二进制文件)
具体训练数集需另行下载
1.2代码实现
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
sample_data=datasets.load_digits()
train_data,test_data,train_target,test_target=train_test_split(sample_data.data,sample_data.target,test_size=0.2)
knn_model=KNeighborsClassifier(n_neighbors=8)
knn_model.fit(train_data,train_target)
pred=knn_model.predict(test_data)
print(pred[0:9])
print(test_target[0:9])
for r in range(0,1791):
print(sample_data.images[r])
print('共训练了%d个样本'%r)
acc=accuracy_score(pred,test_target)
print('准确度: '+str(acc*100)+'%')
|