本章介绍图像分类和图像内容分类算法。
8.1 K邻近分类法(KNN)
KNN(K-Nearest Neighbor ,K邻近分类法),把要分类的对象(例如一个特征向量)与训练集中已知类标记的所有对象进行对比,并由k近邻对指派到哪个类进行投票。这种方法通常分类效
果较好,但是也有很多弊端:与K-means 聚类算法一样,需要预先设定k 值,k 值的选择会影响分类的性能;此外,这种方法要求将整个训练集存储起来,如果训练集非常大,搜索起来就非常慢。
将定义的类对象添加到名为knn.py 的文件里:
class KnnClassifier(object):
def __init__(self,labels,samples):
""" 使用训练数据初始化分类器"""
self.labels = labels
self.samples = samples
def classify(self,point,k=3):
""" 在训练数据上采用k 近邻分类,并返回标记"""
# 计算所有训练数据点的距离
dist = array([L2dist(point,s) for s in self.samples])
# 对它们进行排序
ndx = dist.argsort()
# 用字典存储k 近邻
votes = {}
for i in range(k):
label = self.labels[ndx[i]]
votes.setdefault(label,0)
votes[label] += 1
return max(votes)
def L2dist(p1,p2):
return sqrt( sum( (p1-p2)**2) )