图像分类之KNN算法

本文介绍了使用KNN算法对Cifar10数据集进行图像分类的尝试,尽管正确率仅为30%左右。KNN算法在训练时效率高,但在测试时计算量较大。同时,对比MNIST数据集,KNN表现更好,因为MNIST中的黑白图像像素差异能提供更多信息。
摘要由CSDN通过智能技术生成

简介

这两天我用了KNN方法对Cifar10数据进行分类,结果却是差强人意,只有30%左右的正确率。

KNN算法的训练只是将训练数据集存储起来,所以训练不需要花费很多时间,但是测试就需要花费大量时间。
在这里插入图片描述
对于MNIST数据集,该分类器效果很好,原因我觉得主要是MNIST数据集都是黑白照片,KNN本质上是通过图象的像素差来进行计算的,所以MNIST数据集图像像素差包含的信息比较多。
在这里插入图片描述

代码

my_utils.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : my_utils.py
# @Author: Fly_dragon
# @Date  : 2019/11/29
# @Desc  : 

import numpy as np


def getXmean(x_train):
    x_train = np.reshape(x_train, (x_train.shape[0], -1))  # Turn the image to 1-D
    mean_image = np.mean(x_train, axis=0)  # 求每一列均值。即求所有图片每一个像素上的平均值
    return mean_image


def centralized(x_test, mean_image):
    x_test = np.reshape(x_test, (x_test.shape[0], -1))
    x_test = x_test.astype(np.float)
    x_test -= mean_image  # Subtract the mean from the graph, and you get zero mean graph
    return x_test

#%% KNN class
class Knn:

    def __init__(self):
        pass

    def fit(self, X_train, y_train):
        self.Xtr = X_train
        self.ytr = y_train

    def predict(self, k, dis, X_test):
        """

        """
        assert dis == 'E' or dis == 'M'
        num_test = X_test.shape[0]
        label_list = []
        # 使用欧拉公式作为距离测量
        if dis == 'E':
            for i in range(num_test):
                distances = np.sqrt(np.sum(((self.Xtr - np.tile(X_test[i],
                                                                (self.Xtr.shape[0], 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值