最近邻算法

最近邻算法是最朴素的一种想法,比较两张图片之间每个像素差异大小来确定分类。

import numpy as np

# 最近邻算法
class NearsetNeigbor:
    def __init__(self):
        pass

    # @param X   对应图片集
    # @param y   分类标号
    def train(self, X, y):
        self.Xtr = X
        self.ytr = y

    # 用1范数的最近邻给出预测结果
    # @param X   待预测图片集
    # @return    最有可能的分类
    def predict(self, X):
        numTest = X.shape[0]

        # 构建一个大小与待预测图片相同的全零矩阵,数值类型与标号的类型相同
        Ypred = np.zeros(numTest, dtype = self.ytr.dtype)

        for i in xrange(numTest):
            # 逐行进行计算并求和
            distances = np.sum(np.abs(self.Xtr - X[i,:]), axis = 1)

            # 找出对于第几个测试集是最小的,给出标号
            minIndex = np.argmin(distances)
            Ypred[i] = self.ytr[minIndex]

        return Ypred