前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K最近邻与线性分类器(上)

K最近邻与线性分类器(上)

作者头像
听城
发布2018-08-30 11:11:35
1.3K0
发布2018-08-30 11:11:35
举报
文章被收录于专栏:杂七杂八

图像分类

图像分类的基本任务就是将图片分类,那如何进行图片分类呢?图片是不可能直接当作输入传递给我们的机器学习任务的,一个通用的做法就是将图片转换成一张巨大的数字表单。这时候输入有了,那么就可以使用机器学习的算法从所有种类中,给这个表单选定一个标签。 图像分类的难题在于我们所说的语义鸿沟问题

我们人眼所看到的是一个完整的图像画面,但是计算机所看到的是一张巨大的数字表单,表单的数字反映的是亮度以及每个单点三基色的权值。图像分类难点就在于要去处理这个巨大的表单,然后根据其进行分类。 下面列出了一些其它方面的挑战:

  • 视角变化:摄像机可以从多角度来拍摄物体。
  • 光线变化 :发光物体其它光线的影响
  • 形变:很多东西的形状并非一成不变,会有很大变化。
  • 遮挡:目标物体可能被挡住。有时候只有物体的一小部分(可以小到几个像素)是可见的。
  • 背景干扰:物体可能混入背景之中,使之难以被辨认。
  • 类内差异:一类物体的个体之间的外形差异很大,比如椅子。这一类物体有许多不同的对象,每个都有自己的外形。 数据驱动方法:怎么写一个识别猫的算法?随着网络的发展,在网络上可以找到许许多多猫的图片,就可以以此作为训练集,训练出识别猫的模型,当有新的图片时,我们就可以参考训练数据,给出答案。

NN

CIFAR-10数据集

该数据集共有60000张彩色图像,这些图像是32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。

Nearest Neighbor算法

现在我们用CIFAR-10的50000张图片作训练集,训练模型,然后Nearest Neighbor算法用测试图片和训练集中每一张图片去比较,然后将它认为最近邻的一个样本的类别来决定待分样本所属的类别。 那最近邻是怎么判断的呢?最简单的方式就是曼哈顿距离算法,即L1距离算法,计算方式如下:

distance

下面就是使用L1距离的Nearest Neighbor分类器的实现套路:

代码语言:javascript
复制
import numpy as np

class NearestNeighbor(object):
  def __init__(self):
    pass

  def train(self, X, y):
    """ X is N x D where each row is an example. Y is 1-dimension of size N """
    # the nearest neighbor classifier simply remembers all the training data
    self.Xtr = X
    self.ytr = y

  def predict(self, X):
    """ X is N x D where each row is an example we wish to predict label for """
    num_test = X.shape[0]
    # lets make sure that the output type matches the input type
    Ypred = np.zeros(num_test, dtype = self.ytr.dtype)

    # loop over all test rows
    for i in xrange(num_test):
      # find the nearest training image to the i'th test image
      # using the L1 distance (sum of absolute value differences)
      distances = np.sum(np.abs(self.Xtr - X[i,:]), axis = 1)
      min_index = np.argmin(distances) # get the index with smallest distance
      Ypred[i] = self.ytr[min_index] # predict the label of the nearest example

    return Ypred

其实我们可以看到,分类器的时间复杂度是和样本的大小有关系的,它是一个线性的减慢的过程。近邻算法分类器速度加快的方法,可以用一个近似近邻算法FLANN。 距离选择:计算向量间的距离有很多种方法,另一个常用的方法是L2距离,从几何学的角度,可以理解为它在计算两个向量间的欧式距离。

k-Nearest Neighbor分类器

为什么只用最相似的1张图片的标签来作为测试图像的标签呢?这不是很奇怪吗!是的,使用k-Nearest Neighbor分类器就能做得更好。它的思想很简单:与其只找最相近的那1个图片的标签,我们找最相似的k个图片的标签,然后让他们针对测试图片进行投票,最后把票数最高的标签作为对测试图片的预测。所以当k=1的时候,k-Nearest Neighbor分类器就是Nearest Neighbor分类器。从直观感受上就可以看到,更高的k值可以让分类的效果更平滑,使得分类器对于异常值更鲁棒。 设置参数

  • Choose hyperparameters that work best on the data
  • Split data into train and test, choose hyperparameters that work best on test data
  • Split data into train, val, and test; choose hyperparameters on val and evaluate on test
  • Cross-Validation: Split data into folds, try each fold as validation and average the results

knn处理图片分类的缺点

  • 效率很低
  • 像素上的距离度量难以表达图像信息

knn总结

  • 在图像分类中,由被标注了分类标签的图像组成的集合,要求算法能预测没有标签的图像的分类标签,
  • 距离评价方式和K是超参数
  • 用交叉验证选择超参数,仅在测试集上运行一次。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 图像分类
  • NN
    • CIFAR-10数据集
      • Nearest Neighbor算法
        • k-Nearest Neighbor分类器
        • knn处理图片分类的缺点
        • knn总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档