一.k-近邻算法电影类别分类
实现代码
import numpy as np
import operator
def knn(trainData, testData, labels, k):
# 计算训练样本的行数
rowSize = trainData.shape[0]
# 计算训练样本和测试样本的差值
diff = np.tile(testData, (rowSize, 1)) - trainData
# 计算差值的平方和
sqrDiff = diff ** 2
sqrDiffSum = sqrDiff.sum(axis=1)
# 计算距离
distances = sqrDiffSum ** 0.5
# 对所得的距离从低到高进行排序
sortDistance = distances.argsort()
count = {}
for i in range(k):
vote = labels[sortDistance[i]]
count[vote] = count.get(vote, 0) + 1
# 对类别出现的频数从高到低进行排序
sortCount = sorted(count.items(), key=operator.itemgetter(1), reverse=True)
# 返回出现频数最高的类别
return sortCount[0][0]
trainData = np.array([[5, 8], [4, 1], [3, 3], [4, 4]])
labels = ['动作片', '动作片', '爱情片', '爱情片']
testData = [4, 2]
X = knn(trainData, testData, labels, 3)
print(X)
实验结果
二.手写识别系统
首先得有两个数据文件夹测试集和训练集(testDigits和trainingDigits里的数据要不一样),里面存放不同写法的数字。训练集中的数据作为训练样本 ,之后在测试集中检验
需要识别的数字已经用图像处理软件处理过。如下图所示,具有相同的像素和形状:都是32像素×32像素的黑白图像。黑白像素分别由0和1表示. 然后再转换成文本存储形式存储。例如,如下三张图是直接从TEXT文档中截取的数字0,1,2