精华内容
下载资源
问答
  • 多类分类器
    万次阅读 多人点赞
    2018-01-18 21:59:43

    线性分类和SVM原理

    网上有很多写的好的博客讲解线性分类和SVM,本人讲解能力差,就给个链接。
    http://blog.csdn.net/mm_bit/article/details/46988925

    SVM实现代码

    训练svm分类器实际上是解二次规划问题,matlab里用到的是quadprog函数,其使用用法可参见matlab官方文档:
    http://cn.mathworks.com/help/optim/ug/quadprog.html
    或者不想读英文文档的人可以看别人写的博客:
    http://blog.csdn.net/jbb0523/article/details/50598641
    会使用quadprog函数基本上就会写svm分类器了,这里贴上源码:
    svmTrain.m

    function [ svm ] = svmTrain( trainData,trainLabel,kertype,C )
    options=optimset;
    options.LargerScale='off';
    options.Display='off';
    
    n=length(trainLabel);
    H=(trainLabel'*trainLabel).*kernel(trainData,trainData,kertype);
    f=-ones(n,1);
    A=[];
    b=[];
    Aeq=trainLabel;
    beq=0;
    lb=zeros(n,1);
    ub=C*ones(n,1);
    a0=zeros(n,1);
    [a,fval,eXitflag,output,lambda]=quadprog(H,f,A,b,Aeq,beq,lb,ub,a0,options);
    epsilon=1e-8;
    sv_label=find(abs(a)>epsilon);
    svm.a=a(sv_label);
    svm.Xsv=trainData(:,sv_label);
    svm.Ysv=trainLabel(sv_label);
    svm.svnum=length(sv_label);
    end
    
    

    kernel.m(更新)

    function K = kernel( X,Y,type )
    switch type
        case 'linear'
            K=X'*Y;
        case 'rbf'
            delta=5;
            delta=delta*delta;
            XX=sum(X'.*X',2);
            YY=sum(Y'.*Y',2);
            XY=X'.*Y;
            K=abs(repmat(XX,[1 size(YY,1)])+repmat(YY',[size(XX,1) 1])-2*XY);
            K=exp(-K./delta);
    end
    end

    svmTest.m:

    function result = svmTest(svm, Xt, Yt, kertype)  
    temp = (svm.a'.*svm.Ysv)*kernel(svm.Xsv,svm.Xsv,kertype);  
    %total_b = svm.Ysv-temp;  
    b = mean(svm.Ysv-temp);  %b取均值  
    w = (svm.a'.*svm.Ysv)*kernel(svm.Xsv,Xt,kertype);  
    result.score = w + b;  
    Y = sign(w+b);  %f(x)  
    result.Y = Y;  
    result.accuracy = size(find(Y==Yt))/size(Yt);  
    end  
    
    

    test.m

    %------------主函数----------------  
    clc;
    clear;
    C = 10;  %成本约束参数  
    kertype = 'linear';  %线性核  
    
    %①------数据准备  
    n = 30;  
    %randn('state',6);   %指定状态,一般可以不用  
    x1 = randn(2,n);    %2行N列矩阵,元素服从正态分布  
    y1 = ones(1,n);       %1*N个1  
    x2 = 4+randn(2,n);   %2*N矩阵,元素服从正态分布且均值为5,测试高斯核可x2 = 3+randn(2,n);   
    y2 = -ones(1,n);      %1*N个-1  
    
    figure;  %创建一个用来显示图形输出的一个窗口对象  
    plot(x1(1,:),x1(2,:),'bs',x2(1,:),x2(2,:),'k+');  %画图,两堆点  
    axis([-3 8 -3 8]);  %设置坐标轴范围  
    hold on;    %在同一个figure中画几幅图时,用此句  
    
    %②-------------训练样本  
    X = [x1,x2];        %训练样本2*n矩阵,n为样本个数,d为特征向量个数  
    Y = [y1,y2];        %训练目标1*n矩阵,n为样本个数,值为+1或-1  
    svm = svmTrain(X,Y,kertype,C);  %训练样本  
    plot(svm.Xsv(1,:),svm.Xsv(2,:),'ro');   %把支持向量标出来  
    
    %③-------------测试  
    [x1,x2] = meshgrid(-2:0.05:7,-2:0.05:7);  %x1和x2都是181*181的矩阵  
    [rows,cols] = size(x1);    
    nt = rows*cols;                    
    Xt = [reshape(x1,1,nt);reshape(x2,1,nt)];  
    %前半句reshape(x1,1,nt)是将x1转成1*(181*181)的矩阵,所以xt是2*(181*181)的矩阵  
    %reshape函数重新调整矩阵的行、列、维数  
    Yt = ones(1,nt);  
    
    result = svmTest(svm, Xt, Yt, kertype);  
    
    %④--------------画曲线的等高线图  
    Yd = reshape(result.Y,rows,cols);  
    contour(x1,x2,Yd,[0,0],'ShowText','on');%画等高线  
    title('svm分类结果图');     
    x1=xlabel('X轴');    
    x2=ylabel('Y轴');   

    分类结果:
    这里写图片描述

    多类分类器

    多类线性问题的一种解法是将多类分为多个两类分类器。
    如训练集有1,2,3,4个类,让1与2作两类分类器训练得到12分类器,1与3得到13分类器,等等两两训练,得到(4-1)*4/2 6个分类器,再将测试数据用这6个分类器一一测试,如果对12,13,14三个都是正的,则该类属于1类。
    代码:
    multiLiner:

    clc;
    clear;
    C=10;
    kertype='linear';
    %生成测试数据
    n=30;
    x1=randn(2,n);
    x2=4+randn(2,n);
    
    x3=randn(2,n);
    x3=[x3(1,:)+4;x3(2,:)-4];
    
    x4=randn(2,n);
    x4=[x4(1,:)+8;x4(2,:)];
    %可视化生成数据
    plot(x1(1,:),x1(2,:),'bs',x2(1,:),x2(2,:),'k+');
    hold on;
    plot(x3(1,:),x3(2,:),'r*',x4(1,:),x4(2,:),'y.');
    axis([-3 11 -7 7]);
    hold on;
    %两两合成一个训练组训练模型
    trainData12=[x1,x2];
    trainData13=[x1,x3];
    trainData14=[x1,x4];
    trainData23=[x2,x3];
    trainData24=[x2,x4];
    trainData34=[x3,x4];
    trainLabel=[ones(1,n),-ones(1,n)];
    
    svm_12=svmTrain(trainData12,trainLabel,kertype,C);
    svm_13=svmTrain(trainData13,trainLabel,kertype,C);
    svm_14=svmTrain(trainData14,trainLabel,kertype,C);
    svm_23=svmTrain(trainData23,trainLabel,kertype,C);
    svm_24=svmTrain(trainData24,trainLabel,kertype,C);
    svm_34=svmTrain(trainData34,trainLabel,kertype,C);
    
    %生成测试数据
    [x1,x2] = meshgrid(-2:0.05:10,-6:0.05:6);  %x1和x2都是181*181的矩阵  
    [rows,cols] = size(x1);    
    nt = rows*cols;                    
    Xt = [reshape(x1,1,nt);reshape(x2,1,nt)];  
    %前半句reshape(x1,1,nt)是将x1转成1*(181*181)的矩阵,所以xt是2*(181*181)的矩阵  
    %reshape函数重新调整矩阵的行、列、维数  
    Yt = ones(1,nt);  
    result12=svmTest(svm_12,Xt,Yt,kertype);
    Yd = reshape(result12.Y,rows,cols); 
    contour(x1,x2,Yd,[0,0],'ShowText','on');%画等高线  
    hold on;
    result13=svmTest(svm_13,Xt,Yt,kertype);
    Yd = reshape(result13.Y,rows,cols); 
    contour(x1,x2,Yd,[0,0],'ShowText','on');%画等高线  
    hold on;
    result14=svmTest(svm_14,Xt,Yt,kertype);
    Yd = reshape(result14.Y,rows,cols); 
    contour(x1,x2,Yd,[0,0],'ShowText','on');%画等高线  
    hold on;
    result23=svmTest(svm_23,Xt,Yt,kertype);
    Yd = reshape(result23.Y,rows,cols); 
    contour(x1,x2,Yd,[0,0],'ShowText','on');%画等高线  
    hold on;
    result24=svmTest(svm_24,Xt,Yt,kertype);
    Yd = reshape(result24.Y,rows,cols); 
    contour(x1,x2,Yd,[0,0],'ShowText','on');%画等高线  
    hold on;
    result34=svmTest(svm_34,Xt,Yt,kertype);
    Yd = reshape(result34.Y,rows,cols); 
    contour(x1,x2,Yd,[0,0],'ShowText','on');%画等高线
    
    %测试一个样本点属于哪一类
    Xt=[10;2];
    Yt=1;
    result12=svmTest(svm_12,Xt,Yt,kertype);
    result13=svmTest(svm_13,Xt,Yt,kertype);
    result14=svmTest(svm_14,Xt,Yt,kertype);
    result23=svmTest(svm_23,Xt,Yt,kertype);
    result24=svmTest(svm_24,Xt,Yt,kertype);
    result34=svmTest(svm_34,Xt,Yt,kertype);
    if result12.Y==1&&result13.Y==1&&result14.Y==1
        testLabel=1;
    elseif result12.Y==-1&&result23.Y==1&&result24.Y==1
        testLabel=2;
    elseif result13.Y==-1&&result23.Y==-1&&result34.Y==1
        testLabel=3;
    elseif result14.Y==-1&&result24.Y==-1&&result34.Y==-1
        testLabel=4;
    else
        testLabel=-1;
        disp('测试点不属于这4类中');
    end

    分类结果:
    这里写图片描述

    更多相关内容
  • 类分类器构造多类分类器

    千次阅读 2012-11-20 10:52:03
     从 SVM的那几张图可以看出来,SVM是一种典型的两类分类器,即它只回答属于正类还是负类的问题。而现实中要解决的问题,往往是类的问题(少部分例外,例如垃圾邮件过滤,就只需要确定“是...如何由两类分类器得到

    from: http://tech.ddvip.com/2009-03/1238054080112304.html

                从 SVM的那几张图可以看出来,SVM是一种典型的两类分类器,即它只回答属于正类还是负类的问题。而现实中要解决的问题,往往是多类的问题(少部分例外,例如垃圾邮件过滤,就只需要确定“是”还是“不是”垃圾邮件),比如文本分类,比如数字识别。如何由两类分类器得到多类分类器,就是一个值得研究的问题。

      还以文本分类为例,现成的方法有很多,其中一种一劳永逸的方法,就是真的一次性考虑所有样本,并求解一个多目标函数的优化问题,一次性得到多个分类面,就像下图这样:

      多个超平面把空间划分为多个区域,每个区域对应一个类别,给一篇文章,看它落在哪个区域就知道了它的分类。

      看起来很美对不对?只可惜这种算法还基本停留在纸面上,因为一次性求解的方法计算量实在太大,大到无法实用的地步。

      稍稍退一步,我们就会想到所谓微笑“一类对其余”的方法,就是每次仍然解一个两类分类的问题。比如我们有5个类别,第一次就把类别1的样本定为正样本,其余2,3,4,5的样本合起来定为负样本,这样得到一个两类分类器,它能够指出一篇文章是还是不是第1类的;第二次我们把类别2 的样本定为正样本,把1,3,4,5的样本合起来定为负样本,得到一个分类器,如此下去,我们可以得到5个这样的两类分类器(总是和类别的数目一致)。到了有文章需要分类的时候,我们就拿着这篇文章挨个分类器的问:是属于你的么?是属于你的么?哪个分类器点头说是了,文章的类别就确定了。这种方法的好处是每个优化问题的规模比较小,而且分类的时候速度很快(只需要调用5个分类器就知道了结果)。但有时也会出现两种很尴尬的情况,例如拿一篇文章问了一圈,每一个分类器都说它是属于它那一类的,或者每一个分类器都说它不是它那一类的,前者叫分类重叠现象,后者叫不可分类现象。分类重叠倒还好办,随便选一个结果都不至于太离谱,或者看看这篇文章到各个超平面的距离,哪个远就判给哪个。不可分类现象就着实难办了,只能把它分给第6个类别了……更要命的是,本来各个类别的样本数目是差不多的,但“其余”的那一类样本数总是要数倍于正类(因为它是除正类以外其他类别的样本之和嘛),这就人为的造成了上一节所说的“数据集偏斜”问题。

      因此我们还得再退一步,还是解两类分类问题,还是每次选一个类的样本作正类样本,而负类样本则变成只选一个类(称为“一对一单挑”的方法,哦,不对,没有单挑,就是微笑“一对一”的方法,呵呵),这就避免了偏斜。因此过程就是算出这样一些分类器,第一个只回答“是第1类还是第2类”,第二个只回答“是第1类还是第3类”,第三个只回答“是第1类还是第4类”,如此下去,你也可以马上得出,这样的分类器应该有5 X 4/2=10个(通式是,如果有k个类别,则总的两类分类器数目为k(k-1)/2)。虽然分类器的数目多了,但是在训练阶段(也就是算出这些分类器的分类平面时)所用的总时间却比“一类对其余”方法少很多,在真正用来分类的时候,把一篇文章扔给所有分类器,第一个分类器会投票说它是“1”或者“2”,第二个会说它是“1”或者“3”,让每一个都投上自己的一票,最后统计票数,如果类别“1”得票最多,就判这篇文章属于第1类。这种方法显然也会有分类重叠的现象,但不会有不可分类现象,因为总不可能所有类别的票数都是0。看起来够好么?其实不然,想想分类一篇文章,我们调用了多少个分类器?10个,这还是类别数为5的时候,类别数如果是1000,要调用的分类器数目会上升至约500,000个(类别数的平方量级)。这如何是好?

      看来我们必须再退一步,在分类的时候下功夫,我们还是像一对一方法那样来训练,只是在对一篇文章进行分类之前,我们先按照下面图的样子来组织分类器(如你所见,这是一个有向无环图,因此这种方法也叫做DAG SVM)

     

    展开全文
  • 1. 问题背景 生物学研究...本文将探讨如何基于DNA序列的数据集设计一个性能良好的多类分类器。 2. 数据集简介 数据集中有共20000条基于序列,一共来自10个物种。其中一条基因是一个72个碱基的序列,如下所示: AGGGG

    1. 问题背景

    	生物学研究中,用检测DNA序列来判断检测对象的物种越来越成为一种简便、快捷的手段。
    	现在的测量技术已经能够很方便地测量出物种的DNA序列,将其进行分类可以运用机器学习的方法。
    	本文将探讨如何基于DNA序列的数据集设计一个性能良好的多类的分类器。
    

    2. 数据集简介

    	 数据集中有共20000条基于序列,一共来自10个物种。其中一条基因是一个72个碱基的序列,如下所示:
    
    AGGGGGCTGGCCCGTGACGAGCGGACCATCGTCGGCACCCCCGAGACGATCGCCGACCACATCCAGGAGTGG
    
    在分类器的设计过程中,可以将数据集分割成训练集和测试集。
    如采用5-fold交叉验证时,将数据集均分成5份,每次取其中一份作为测试集,其余四份作为训练集,将五次的准确率取平均作为分类器的准确率。
    

    3. 数据处理和特征提取

    	 基因序列这样的原始数据不能直接用于计算,因此我们将对数据进修处理得到特征。
    	设K=5,则特征是长度为5的基因片段,总共有4^5个。
    
    		AAAAA, AAAAT, AAAAG, AAAAC,
    		AAATA …
    		ATCGA…TTTTT…GGGGG…CCCCC
    
    每个特征即基因片段的值是基因序列中该基因片段出现的次数。
    

    特征提取

    4. 算法设计

    	我们先回顾下整个问题,现在要设计一个10类的分类器,如下图所示。
    

    分类器示意图
    最简单的分类算法是二类logistical regression,然而现在我们要处理的是多类问题,因此要采用 Multinomial logistic regression,也称softmax算法。
    另外SVM分类算法也是非常出名的,它高效,性能好,被很多人认为是分类算法中最好的。

    5. 结果分析

    	 K值选取对分类的影响
    

    这里写图片描述
    两种算法的对比
    这里写图片描述

    6. 提高与增强

    为了进一步提高准确率,再做一些尝试。

    6.1引入更多特征

    综合K=3,4,5的特征,但是这样又使得特征的维度太大,可能混入了太多不显著的特征使得准确率不会提高,因此辅以PCA降维。实验结果如下。

    可以看到K=3,4,5,dim=500时,准确率比K=4时有所提高。

    6.2使用lasso进行特征的筛选

    lasso算法可以筛选出显著的特征,以降低无关特征对分类的影响。先通过lasso筛选特征,再用softmax构建分类器,我们得到了本文中最好的分类器,准确率高达63%,大大超过了不使用特征选取的softmax和最好的SVM分类器。可见下图。
    三种方法的最优分类器的比较

    展开全文
  • 本文在CIFAR-10数据集上举例。CIFAR-10的训练集有50000张32*32*3...一个机器学习(包括深度学习)多分类器的生命周期包括3大模块: 1.Score Function: 将3072维的input xi转化成一个10维的classfication score ve...

    本文在CIFAR-10数据集上举例。CIFAR-10的训练集有50000张32*32*3的图片,包括10个类别。因此形成一个32*32*3 = 3072维的样本空间,此空间中其中包括50000个样本点。

    一个机器学习(包括深度学习)多分类器的生命周期包括3大模块:

    1.Score Function

    将3072维的input xi转化成一个10维的classfication score vector。这个模块可以plug in包括线性分类器、Neural Network, CNN, RNN等等。score function就是一个mapping,把高维input vector map到想要的低维输出空间上去。linear classifier用matrix multiplication完成了这个mapping,而NN、CNN、RNN则是用多个连接主义的matrix mul、filtering等操作来实现这个mapping。

    (1)线性分类器:f(x) = W * x + b:

    这里W是10 * 3072 维的matrix,x是3072 * 1维的一个input image flattened vector,b是10 * 1 维的scalar bias values。对于此线性分类器的训练,就是在学习W和b。当W和b训练完成固定之后,分类的test过程就是很简单的矩阵乘法(和加法)

    那么如何理解线性分类器呢?换言之,如何理解由W完成一次matrix multiplication就可以实现分类呢?W又有什么物理意义呢?

    i. W的ensemble理解

    10*3072的W可以理解为10个1*3072维的row vector,每个row vector是CIFAR-10 10中类别中一类的打分器。每个row vector对应最终10*1维输出中的一维,即某个1*3072 vector of W 乘以 xi输出一个scalar value,这个实数就是该样本xi属于这个row vector对应类别的classification score。换言之,W * xi的矩阵乘法而不是向量乘法,是一中并行计算的模式,一次性完成10个类别的打分。

    那么,W的每个row vector中的3072个数字又各自有什么意义呢?当将row vector与xi(3072 * 1)这个flattened image vector进行dot-product时,是对位相乘再相加:\sum_j W^j_k * x^j_i其中k = (1,2,。。。,10),i属于(1,50000),j属于(1,3072)。第k个row vector Wk的3072个数中的每一个对应着input image vector 3072个数字中的每一个。即,输入图像的每一个pixel location的每一个color channel(RGB)上的取值(itensity value)都对应一个专属于它的w,这个w表达出分类器对这个pixel location的这个color channel(RGB)上的取值(itensity value)的“喜欢程度”当w大于0时,表示分类器喜欢这个pixel location的这个color channel上的取值(一定是正值,所以乘积为正)喜欢,且w越大越喜欢,喜欢的物理意义就是有更大的正的乘积值在最终求sum时会有更大的contribution,得到更高的分类得分。反之,w小于0则意味着分类器不喜欢这个pixel上这个颜色有值3072个小w各司其职监控表达着自己对自己所看护的pixel颜色的态度,通过乘积来表达态度。而最后的求sum,就是3072个小w(pixel-wise classifier)的ensemble,一次voting

    举例来看,假设Wk是对ship这个类别的分类器。那么Wk的3072个数中对应input图片边缘pixel的Blue channel的小w应该有较大的正值,因为ship图片往往会在边沿显示蓝色的水,因此ship W classifier会对这样的图片打出高分。从这个角度讲,虽然讲32*32*3的input图片faltten成3072d的vector,但图像中的spatail info还是能够在vector的sequence信息中得以部分保留

    ii. W的template matching理解

    因为同样是3072维,Wk可以看做是input image vector的一个template。即,3072个中的每一个小w时对其对应pixel位置的对应color channel的一个“模仿”。这其实与第一种理解中“喜欢”的概念异曲同工:即,如果小w喜欢x在这个位置这个颜色的值,那么小w就会给出正值,越喜欢正值越大。而小w的这个正值,既可以理解为是w的权值,也可以直接理解为是tempalte W对应位置对应颜色上的itensity value。这样一来,\sum_j W^j_k * x^j_i这个dot-product就从ensemble voting变成了template matching,即用dot-product来衡量input图像xi与ship模板Wk的similarity,这个similarity score就是分类score

    如上图所示是CIFAR-10上10个类别的template(即将Wi∈[3072, 1], i = 1, ...., 10个weight vectorde-flattened回32 * 32 * 3后得到的weight image,maybe rescale by * 255 element-wise)。

    (2)NNs、CNN、RNN:

    同样是一个mapping,只是用了不同的工具和手段,此处不赘述。

    2. Loss Function:

    在map到的低维期待输出的空间比较预测输出与Ground truth之间的差别。在本例中就是用linear classifier输出的10dim分类score与该样本GT的10dim one-hot encoding的score进行比对打分。

    (1)SVM+Hinge Loss:

    SVM是最常用的多分类器之一。与传统意义上的矩阵乘法的线性分类器不同,SVM是一个optimal margin classifer,即求得3072dim样本空间中的一组分类hyper-plane(HP,共10个,每个HP是一个3072维的vector来表示,即一个3072维空间中的单位向量、一个基)。接的过程用到了拉格朗日算子转化拉格朗日型,再求其dual problem。最终求得的3072dim HP其实一个由50000个样本中极少量个support vector(与HP最近的、functional margin = 1的样本点)的线性组合。(HP=\sum_{i}\alpha_i*y_i*x_i,i是所有的样本 = 50000,α是拉格朗日算子,只有当xi是SV时,α不等于0)。所以,在SVM测试时,就是把输入的新的3072dim的iamge vector与HP做vector multiplication \sum \alpha_i * y_i * <x_i * x_{test}>, 即test sample与SV两两计算dot-product。这个计算內积的步骤可以用kernel来代替。任意一个对称的、自相关矩阵半正定的函数都可以是kernel fucntion。每个kernel function implicitly将3072dim的样本空间映射到一个更高维的RKHS再生核希尔伯特空间中去,这个转换可能是非线性的,但是某些低维空间中不可分的问题,在高维空间中可分。

    Hinge loss是一个中marginal loss,大概理解就是对于ship这一类,将样本的所有非ship类的socre与ship score求距离,如果距离大于margin(pre-defined,常常=1),那么max()operation就会取0;如果小于margin,max()就会取小于的那部分值。所有非ship类别求和。Hinge loss的特性就是只要某个样本的某个非ship分类足够好,对这一类的区辩力超过了margin的约束(即个非ship类打的分足够低),那么这一类就不产生loss。过关即可,不锱铢必较。

    (2) Softmax classfier + Cross-Entropy loss:

    Softmax是一个函数的名字,这个函数起的作用和logistic regression中logistic(sigmoid)function一样,都是将score funciton的raw output score squash或者转化成特定范围的值(0/1之间,或者一个add-to-1的prob distribution)(注,binary softamx classifier = logistic regression)。

    其中zj是对目标类的(j类 = ship)的raw score打分。fj(z)则是softmax函数output的j类的得分。Softmax其实完成了两个操作:1. 将原先的score function raw output(在这里raw output被理解为log probability,所以求exp之后就变成了probability)转化成probability;2. 再将10类的probability normalzied使得10类的socre add-to-1,变成一个10分类的probability distribution

    对raw score output施加softmax操作的目的是使用Cross Entropy Loss。Cross entropy是信息论中的概念,是用来衡量两个probability distribution相似度的指标。显然,每个样本的one-hot encoding GT vector是一个完美的01值得probability distribution(add-to-1),所以要用softmax将raw output classfication scores也转化成一个prob idstribution。

    Cross-entropy:其中p是GT one-hot distribution,q是softmax之后的calssfication score distribution。因为P是one-hot,所以对与非本类 p都=0,因此corss-entropy loss就变成如下:

    其中括号里是softamx score,负号之前其实还乘了p = 1;

    (3)SVM & Softmax classifier:

     

    3. Optimization:GD+BP

    BP(chain rule复合函数求导)是计算score function中从后到前所有wi关于loss function的偏导的方法。计算所得的所有wi关于loss的偏导组成的vector就是此次GD update的下降方向(加负号)。

    在计算得到loss之后,下一步就是通过不断iteratively地微调W使得loss越来越低。训练(学习)就是在学习一组使得loss最小的最优W。loss function可以看做是定义在30720维(W参数量 = 10 * 3072)parameter空间上的函数(每一组W是这个高维空间上的一个点),w是自变量,x是fixed的定量(在执行每次BP时,x的值fix在本次FP时的值)。所以优化就是在30720高维parameter空间中找到loss function这个曲面上的最低点(linear score function的loss 函数在W空间的曲面是bowl-like,因为loss是convex;NN则是非convex,loss的曲面是多峰多谷的)。

    选择的优化算法是gradient descent(当然,convex loss function的优化可以选择现成的优化器)。GD的核心思想是iteratively tiny update and tweak,每次update选择W在当前位置朝着负梯度方向微调。根据update的频次和梯度计算用到的样本数目不同,GD又分为GD、SGD、mini-batch GD。

    在运行GD算法时,计算score fucntion在当前状态下的全部W的偏导vector是核心,因为这个偏导的vector就是梯度下降的方向(加负号)。计算W(海量chained up参数)vector的方法是Back-propagation,即计算score function从后到前所有wi相对于最后loss fucntion的偏导。

    整个score function(Neural Network)可以看做是多个模块化的gate(比如Add、Multiply、Max等gate)相chain所得。BP的过程中可以以每个gate为单元进行由后向前的gradient的加工和继续向网络前端传。

    在每个gate处,它对BP gradient的加工是一个完全local的计算,只需要此gate在FP时各个input关于此gate function的local gradient(FP local gradient的计算往往会用到FP时计算留下的input的值),以及BP时input到这个gate的gradient value。在这些值得到之后,

    该gate在其FP时每个input上的BP gradient output) = (该FP input上的local gradient) * (该gate BP graddient input)

    展开全文
  • svm多分类器详解

    万次阅读 2016-04-13 21:33:26
    如何由两类分类器得到多类分类器,就是一个值得研究的问题。 其中一种一劳永逸的方法,就是真的一次性考虑所有样本,并求解一个目标函数的优化问题,一次性得到个分类面。个超平面把空间划分为个区域,
  • 【火炉炼AI】机器学习010-用朴素贝叶斯分类器解决分类问题 【本文所使用的Python库和版本号】: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2   前面讲到了使用逻辑回归分类器解决分类问题...
  • 分类器解决分类问题

    千次阅读 2019-05-14 16:38:20
    对于第1,训练一个分类器:第1是正样本,其余的样本都是负样本 对于第2,训练一个分类器:第2是正样本,其余的样本都是负样本 以此类推,一共训练出五个分类器 在预测阶段,对于输入的待分类样本,...
  • 基于sklearn的LogisticRegression鸢尾花多类分类实践

    千次阅读 多人点赞 2020-02-20 00:26:58
    本文使用sklearn的逻辑斯谛回归模型,进行鸢尾花多分类预测,对OvR与OvO多分类方法下的预测结果进行对比。
  • 模式识别(Pattern Recognition)学习笔记(十三)--类线性分类器 如有错误还望海涵,谢谢。 引言  在之前的学习和讨论中,均是围绕的两类问题来展开,但这毕竟不结合实际,实际应用中面临更的往往是多类...
  • 原理SVM被提出于1964年,在二十世纪90年代后得到快速发展并...支持向量机(Support Vector Machine, SVM)是一按监督学习(supervised learning) 方式对数据进行二元分类的广义线性分类器(generalized linear classi...
  • 详解sigmoid与softmax, 多分类标签分类

    万次阅读 多人点赞 2018-09-19 21:35:50
    详解sigmoid与softmax, 多分类标签分类激活函数介绍sigmoid激活函数sigmoid激活函数的性质sigmoid激活函数的使用 激活函数介绍 对于熟悉机器学习或神经网络的读者来说,sigmoid与softmax两个激活函数并不陌生,...
  • SVM实现多分类

    千次阅读 2019-03-20 21:18:09
    SVM算法最初是为二值分类问题设计的,当处理类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:直接法 和 间接法。 1. 直接法 直接在目标函数上进行修改,将个分类面的参数求解...
  • matlab 使用svm进行分类含实例代码(适用于二分类多分类
  • 为解决采用 softmax 作为卷积神经网络分类器导致图形分类识别模型泛化能力的不足,不能较好适用图像分类等问题,本次博客使用SVM代替CNN网络的softmax分类层,即CNN提取特征后利用SVM进行分类。为了验证模型更改后的...
  • 支持向量机用于多分类

    千次阅读 2018-07-27 09:48:10
    &nbsp;&nbsp;从 SVM的那几张图可以看出来,SVM是一种典型的两类分类器,即它只回答属于正类还是负类的问题。而现实中要解决的问题,往往是类的问题(少部分...如何由两类分类器得到多类分类器,就是一个值...
  • 对于组合二元支持向量机模型的多类学习,使用纠错输出码(ECOC,error-correcting output codes )。有关详细信息,请参阅fitcecoc。 ECOC 可以用来将 Multiclass Learning 问题转化为 Binary Classification 问题。...
  • 2.3.1 线性分类 现在,我们将开发⼀种功能更强⼤的图像分类⽅法,最终将其⾃然地扩展到整个神经⽹络和卷积神经⽹络。线性分类⽅法。这种⽅法来主要由两部分,⼀个函数将输⼊数据映射到⼀个类别分数,另⼀个就是损失...
  • 贝叶斯分类器

    万次阅读 多人点赞 2018-07-27 22:22:41
    贝叶斯分类器是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类器。而朴素贝叶斯分类器是贝叶斯分类器中最简单,也是最常见的一种分类方法。并且,朴素贝叶斯算法仍然是流行的十大挖掘算法之...
  • 图像分类基本流程及 KNN 分类器

    千次阅读 2018-09-07 16:14:06
    虽然看起来挺简单的,但这可是计算机视觉领域的核心问题之一,计算机视觉领域中很看似不同的问题(比如物体检测和分割),都可以被归结为图像分类问题。 1.2 图像分类的挑战   物体分类与检测的难点与挑战在本....
  • 多分类问题下的评价指标分析(Precision, Recall, F1)二分类下的评价指标Accuracy几个常用的术语PrecisionRecallF1-score 二分类下的评价指标 Accuracy 分类算法有很,不同分类算法有很不同的变种。不同的分类...
  • 贝叶斯分类器原理——学习笔记

    千次阅读 2022-01-25 17:07:48
    贝叶斯分类器原理简介一、逆概率推理与贝叶斯公式1、确定性推理与概率推理2、贝叶斯公式二、贝叶斯分类的原理三、概率估计1、先验概率的估计2、条件概率的估计四、贝叶斯分类的错误率五、常用贝叶斯分类器1、最小...
  • SVM多类分类---个二值分类combine

    万次阅读 2014-11-18 21:17:05
    SVM算法最初是为二值分类问题设计的,当处理类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将个分类面的参数求解合并到一个最优化...
  • 理解高斯分类器

    千次阅读 2019-06-20 08:37:13
    在本文中,我们讨论了单变量和变量正态分布,以及如何使用贝叶斯定理导出高斯分类器。像高斯这样的分类器简单而直观,并且可以解释。 正态/高斯分布 在现实生活中,我们总是会对某些现象产生不确定性...
  • 机器学习中的多分类任务详解

    万次阅读 多人点赞 2018-10-08 20:29:58
    现实中常遇到分类学习任务。有些二分类学习方法可直接推广到分类,如LR。但在更情形下,我们是基于一些基本策略,利用二分类学习器来解决...那么我们可以得到个二分类器。(简单解释一下,相当于在N个类别里面...
  • 利用pytorch实现多分类器

    千次阅读 2019-09-10 17:56:29
    训练分类器 就是这个。您已经了解了如何定义神经网络,计算损耗并更新网络权重。 现在你可能在想 数据怎么样? 通常,当您必须处理图像,文本,音频或视频数据时,您可以使用标准的python包将数据加载到numpy数组中...
  •  SVM算法最初是为二值分类问题设计的,当处理类问题时,就需要构造合适的多类分类器。  目前,构造SVM多类分类器的方法主要有两类  (1)直接法,直接在目标函数上进行修改,将个分类面的参数求解合并到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 840,329
精华内容 336,131
关键字:

多类分类器

友情链接: 32519.rar