KNN和线性分类器

news/2024/11/23 3:28:36/

author:DivinerShi

学习cs231n的笔记,之前一直手写保存在笔记本上,现在准备面试复习下,就顺便过一遍,放到博客上,方便日后再看。
这个英文笔记很不错,我的博客写得比较乱,只适合自己看,大家可以看这个:http://cs231n.github.io/
K最近邻和线性分类器

K最近邻

从图像分类入手:将图像表示成一个向量,进行分类(文中以猫为例)
图像一般比较复杂,会产生旋转、缩放、平移、聚集点不同等,如何让图片样式不同,还有亮度的影响都要有鲁棒性,还有形变、判别类别不全、背景纹理相似不用的猫等----------这些都是希望去解决的问题。

图像处理初期:通过检测并勾画出图片的边界,按照边界形状与连接方式进行分类。这会让你学习到这类东西的‘样本集合’,我们可以尽量去找到他们的各种形态,比如看到任何像猫的耳朵(猫的某些结构),便可以认为检测到猫了。
但是如果要去分类船只,那又要去找船的特征,所以并没有扩展性。

L1距离度量差异

用数据训练模型,把很多图片输入模型,让模型记住这些图片,对新来的图片进行比较,看和哪一类的图片最像。最简单的相似度度量是L1距离算法,又叫曼哈顿算法,其实就是绝对差,之所以叫曼哈顿算法好像当时是用曼哈顿街区到街区之间距离计算来表示的,所以就取了这个名字。如下图所示:
这里写图片描述
直接比较图片和图片直接的绝对差,最后将差值直接相加,即:
50+7+26+31+20+12+4+54+20+7+11+59+1+8+40+9=359,这就是用L1计算得到的相似度,当图片相同时就是0。

因此最近邻算法是一个及时的训练方法,但同时他又是一个昂贵的测试方法:
训练阶段大量计算

这里写图片描述
测试的性能非常有效,对于每一张测试图像它将进行数量恒定的计算
这里写图片描述
让近邻算法中有相似性的合并为一个,这就变成了K近邻。

那么为了提高准确率,K要多大?假如:K的值为5,K最近邻分类器在训练中的准确率是多少呢?
其实K最近邻是有很大的局限性的,就算K为全部的训练数,测试图片也可能在其附近的其他点。这样还是会有误差,影响准确率。

超参数K选择

K这个超参数的两种选择方法
1、从1开始测试,然后训练集训练,测试集测试找出最后的参数,但是测试集测试结果好,不一定其它地方效果好,泛化能力不佳,就是说对测试集过拟合。
2、将我们的训练集分成‘折’,比如我们用一个‘5折验证’,把训练数据分成5等份,也就是说我们会使用训练数据中的20%来作为想象中的验证集来调整超参数。在另外4折中进行训练,取不同数量的近邻值做多数投票,通过对比不同K值下验证集的平均正确率,来得到究竟取多少个近邻值才能得出最准确的结果。如果由于你的训练数据点太少而感到不太满意,有时可以使用交叉验证法。如果由于你的训练数据点太少而感到不太满意,有时可以使用交叉验证法,在使用交叉验证法的过程中,就是反复选择测试验证折,首先使用1到4折训练,测试第5折,然后循环,用2到5折训练,测试第1折;3到1,4到2,5到3,在所有可能的测试折的选择中选出效果最好的。这就是交叉验证法。如下图:
这里写图片描述

每个K值有5个点,就是5个折分别为测试折时的准确率。折线为平均值,可以找出最好的K为4。

但是KNN现在很少用了,因为
1、效率低
2、当图片发生平移,部分缺失,亮度变化等后差值(误差很大),无法识别出来。所以想通过距离来进行高纬度物体的判断,就会有不直观的结果出现。

总结

通常用交叉验证法来得到超参数,但是大多时候,不完全使用交叉验证集,它们只用一个单一的验证集(validation set)从中得到最合适的超参数。

(Linear Classification)线性分类

这里写图片描述
**如上图所示:,**图像大小为32323,把像素值组成一个3072维的列向量

线性分类器的输入为一个30721的列向量,W为一个103072的矩阵,经过函数f变换f(X,W)即可得到10*1的向量,分别表示十个类别的分数,从中选择出分数最大的值表示为判断为该值的分数最大。

有时会加10个b,作为一个偏置项,因为有时W不是最优的,可以通过b来来权衡10种类别,使分类更准确。表示为WX+b

线性分类器过程

下面走一遍线性分类器的过程:

假设:现在输入图像x为一只猫,用一个22的图片表示,那么x就是一个4个值的向量。这里要分类的全部类包括三类,猫或船或狗三种类别。
那么W就是一个3
4的矩阵,因为只有让W是34的矩阵才有可能Wx为一个31的向量来表示三个类的分数。
按如下计算X的分数:
这里写图片描述
那么分数为:
这里写图片描述
这样就可以分别计算出这个x属于cat dog ship的分数,可以看出猫的分数很低,所以W不是很好。所以就需要去训练调整W,这里其实对于每个类的分数得到的结果对其他类别来说都是相互独立的,这里的矩阵计算之间,在计算过程中并没用相互干预。Cat类只由W的第一行进行计算,dog只有W的第二行进行计算,ship只有第三行。
W矩阵由许多类似与这些不同种类的分类器组成,每个分类器分别位于W矩阵的每一行,如图片通过所有分类器然后给出每个类别的分数。
Wx:
W有关注或不关注空间上点的能力,图片上每个点x都有权重(Wi),如果权重重设为零,则W不会关注那部分图片,W中0的项对计算没有影响,有值就会产生分数。也可以理解为从图片空间映射到标志空间。

**问:**如果图片大小不一样,如何把图片转化成大小一样的向量?

**答:**把图片改变到一个相同的大小,我们没有办法去应对不同大小的图片,但是我们可以做到最简单的事是把图片变成大小一样的。现在最好的方法是改变为统一大小的方形,如果是一条长的数据,效果会很差,所以我们大多数选择压缩它,而且效果好。

这里要注意一点,实际上Wx是在做全部像素的颜色加权和。
我们将每个分类器,也就是W的每一行取出来,重新拼成一张图片,(一行的长度和图片向量长度一样)其实就是比较模糊的图片,一辆模糊的车或者一只青蛙等。但是如果训练集中有一些车,车头朝左,一些车头朝右,而这个分类器的功能呢又不是很强大,就会结合这两种状态,它因为需要去同时做这两件事情所以最后会出现双头车。而神经网络没有这个缺点,所以线性分类器有局限性。

**注意一点:**线性分类器没有能力同时获取所有的模型。

线性分类器解释

可以把图片看成很高维度的,由很多像素点组成的点,而每一个分类器都在描述高维空间上(比如3072维度)上的梯度,而这个分数就是在取样空间中负点指向正点方向的梯度。
这里写图片描述

如上图所示,每条线代表一个分割,我们要做的就是找出这些线。
**问:**对于线性分类器来说,哪种图片很难分类

答:
1、在各个分类器的交点处,如上图红色标记处。
2、如果你只有一个灰度图像集,分类器会工作的不是很好,因为不能得到必需的用来得出纹理,寻找细节用的颜色,无法定位。

损失函数定义:

**损失函数:**损失函数表达的是一个可以定量的测定分类器工作的好还是坏的函数。
之前我们通过肉眼观察分数来判断哪些分类器工作好,哪些不好。通过这个函数,我们能够得出一个数学表达式,用来确切的告诉我们对于一个确定的分类器W,在我们的测试中得到的结果有多坏,可能是10,可能是1000。
根据损失值改变权值W,然后一点点优化到最优。

下一篇复习线性分类器损失函数与优化


http://www.ppmy.cn/news/679461.html

相关文章

CSDN博文创作编辑器新增投票功能啦

投票:增添博文趣味,增强博主与粉丝之间的粘性 互联网时代,网络投票无疑是各种遴选的主要方式,投票功能甚至也逐渐成为各大网站的标配。 why?因为投票不仅可以快速收集用户意愿,还能打通互动体系&#xff0…

Python搭建投票分类器模型来进行机器学习实验

投票分类器模型是一种很常用的模型,在很多外文论文中多次见到,诸如随机森林这般强悍的分类器核心的思想就是:投票。投票分类器简单来说并不是一种固定具体的分类器模型,而是一种框架,在这种框架里面可以套用各式各样的…

投票分类器VotingClassfier的使用

投票分类器有硬投票和软投票两种,硬投票是对结果进行投票,软投票是对多种结果的预测精度加权后取最高值投票。 这里使用硬投票举个例子 from sklearn.model_selection import train_test_split from sklearn.datasets import make_moons x,ymake_moons(…

可视化h5界面编辑器_超优秀 H5可视化制作编辑器H5DS

今天给大家推荐一款超棒的H5可视化网页制作编辑工具H5DS。 h5ds 基于 技术栈 前端:ReactMobxLessjQuery 后端:NodeJsNgnixMySQL 工具:BabelWebpackGulp 项目模块架构 项目结构 安装 $ npm i h5ds -S 快速使用 import React, { Component } fr…

Verilog 7人投票表决器

7人投票表决,当票数大于等于4(即半数以上),输出1表示通过,否则输出0表示未通过。 方法一: module vote_7( input clk, input[6:0] in, output out);wire[2:0] vote_count;assign vote_count = in[

课程设计题二:7人多数表决器

要求: 1、7人多数表决逻辑:多数通过。 2、在主持人控制下,10秒内表决有效。 3、采用数码管显示表决10秒倒计时。 4、表决结束后用发光二极管及数码管显示表决结果,数码管显示结果:通过、不通过,同意人数…

霍夫投票直观理解

霍夫投票法最典型的示例是二维图像中霍夫直线检测。过二维平面中的定点可以得到无数条直线。如果以顶点参数为做一条直线,即将这些直线变换到参数空间,那么这个定点对应参数空间中的一条直线。如果在参数空间中有两条直线相交于同一个点,那么…

从0开始制作微信投票系统(二):如何创建微信投票链接和二维码?

生成二维码无非就是先生成一个网址。 第一种方案:我们可以借助在线二维码生成器直接生成即可。如下: http://qr.topscan.com/api.php?text你的网址 第二种方案:js实现二维码生成. // 简单方式 new QRCode(document.getElementById(qrcode), your c…