图像分类是最基础的
challenges
- 拍摄角度
- 亮度
- 形变
- 遮蔽一部分
- 背景杂斑
数据驱动
- 收集数据
- 用机器学习的方法训练数据
- 用得到的模型进行预测
近邻分类器
待分类对象的类别可以通过在它附近的训练数据的类别来确定,所以采取的策略就是找到离待分类对象最近的邻居进行分析。
如何定义距离
曼哈顿距离
差的绝对值
欧氏距离
差的平方
复杂度分析
随规模增大线性减慢
近似近邻算法
FLANN
加快速度
KNN
def classify(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0] # 数据集大小
# 计算距离
diffMat = tile(inX, (dataSetSize, 1)) - dataSet
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
# 按距离排序
sortedDistIndicies = distances.argsort()
# 统计前k个点所属的类别
classCount = {}
for i in range(k):
votaIlabel = labels[sortedDistIndicies[i]]
classCount[votaIlabel] = classCount.get(votaIlabel, 0) + 1
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
# 返回前k个点中频率最高的类别
return sortedClassCount[0][0
用什么距离?
k等于多少?
只能自己测试
缺点
效率低
对于形变效果不好