Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing libsvm liblinear如何使用直方图交点/卡方核_Image Processing_Computer Vision_Svm_Libsvm_Pattern Recognition - Fatal编程技术网

Image processing libsvm liblinear如何使用直方图交点/卡方核

Image processing libsvm liblinear如何使用直方图交点/卡方核,image-processing,computer-vision,svm,libsvm,pattern-recognition,Image Processing,Computer Vision,Svm,Libsvm,Pattern Recognition,是否可以在LIBLINEAR中使用直方图相交/chi-sauare核 我的问题是我有一个5000大小的特征向量,所有的都是直方图特征。我不知道如何使用SVM进行训练/测试 我如何使用SVM来训练它 libSVM支持4种类型的内核 0 -- linear: u'*v 1 -- polynomial: (gamma*u'*v + coef0)^degree 2 -- radial basis function: exp(-gamma*|u-v|^2) 3 -- sigmoid: tanh(g

是否可以在LIBLINEAR中使用直方图相交/chi-sauare核

我的问题是我有一个5000大小的特征向量,所有的都是直方图特征。我不知道如何使用SVM进行训练/测试

我如何使用SVM来训练它

libSVM支持4种类型的内核

    0 -- linear: u'*v
1 -- polynomial: (gamma*u'*v + coef0)^degree
2 -- radial basis function: exp(-gamma*|u-v|^2)
3 -- sigmoid: tanh(gamma*u'*v + coef0)

LibSVM支持线性内核在这种情况下,LibSVM和linearSVM有什么区别?

不,不能在liblinear中使用自定义内核

要做您想做的事情,您需要使用LibSVM和“预计算内核”选项,其中提供gram矩阵(这在LibSVM自述文件中有描述)

对于线性核,LibSVM和LibLinear产生类似的结果。作者说:

他们的预测是相似的,但超平面是不同的。Libsvm 解L1损失支持向量机,但liblinear解L2正则化逻辑 回归和L2损失支持向量机


不,不能在liblinear中使用自定义内核

要做您想做的事情,您需要使用LibSVM和“预计算内核”选项,其中提供gram矩阵(这在LibSVM自述文件中有描述)

对于线性核,LibSVM和LibLinear产生类似的结果。作者说:

他们的预测是相似的,但超平面是不同的。Libsvm 解L1损失支持向量机,但liblinear解L2正则化逻辑 回归和L2损失支持向量机


只有将特征明确映射到非线性特征空间时,才能使用线性SVM解算器,我建议阅读:

  • “用于检测的最大余量加法分类器”——
  • “大型内核机器的随机特性”——
  • “通过显式特征映射有效添加内核”——

  • 只有将特征明确映射到非线性特征空间时,才能使用线性SVM解算器,我建议阅读:

  • “用于检测的最大余量加法分类器”——
  • “大型内核机器的随机特性”——
  • “通过显式特征映射有效添加内核”——

  • 晚了一点,但可能会帮助其他人:机器学习软件包scikit learn()至少提供了chi2内核。

    晚了一点,但可能会帮助其他人:机器学习软件包scikit learn()至少提供了chi2内核。

    最近我只是在Libsvm中使用了chi2内核。我将代码粘贴在这里,希望它有用

    function [chi2_ans]=chi2_kernel(x,y)
       f=@(x,y) 1-sum(((x'-y').*(x'-y'))./(x'+y'+eps)*2);
       [m, ~]=size(x);
       chi2_ans=zeros(size(x,1),size(y,1));
       for i=1:size(x,1)
            veci=x(i,:);
             for j=1:size(y,1)
                vecj=y(j,:);
                chi2_ans(i,j)=f(veci,vecj);
            end 
       end
    end
    
    并使用它

    function [ acc ] = singleChi2Kernel(   trainData,testData,trainLabel,testLabel )
    
    numTrain = size(trainData,1);
    numTest = size(testData,1);
    
    
    %# compute kernel matrices between every pairs of (train,train) and
    %# (test,train) instances and include sample serial number as first column
    K =  [ (1:numTrain)' , chi2_kernel(trainData,trainData) ];
    KK = [ (1:numTest)'  , chi2_kernel(testData,trainData)  ];
    
    %# train and test
    model = svmtrain(trainLabel, K, '-t 4  ');
    [predClass, acc, decVals] = svmpredict(testLabel, KK, model);
    
    %# confusion matrix
    %C = confusionmat(testClass,predClass)
    
    end
    

    最近我在Libsvm中只使用了chi2内核。我把代码粘贴在这里,希望它能有用

    function [chi2_ans]=chi2_kernel(x,y)
       f=@(x,y) 1-sum(((x'-y').*(x'-y'))./(x'+y'+eps)*2);
       [m, ~]=size(x);
       chi2_ans=zeros(size(x,1),size(y,1));
       for i=1:size(x,1)
            veci=x(i,:);
             for j=1:size(y,1)
                vecj=y(j,:);
                chi2_ans(i,j)=f(veci,vecj);
            end 
       end
    end
    
    并使用它

    function [ acc ] = singleChi2Kernel(   trainData,testData,trainLabel,testLabel )
    
    numTrain = size(trainData,1);
    numTest = size(testData,1);
    
    
    %# compute kernel matrices between every pairs of (train,train) and
    %# (test,train) instances and include sample serial number as first column
    K =  [ (1:numTrain)' , chi2_kernel(trainData,trainData) ];
    KK = [ (1:numTest)'  , chi2_kernel(testData,trainData)  ];
    
    %# train and test
    model = svmtrain(trainLabel, K, '-t 4  ');
    [predClass, acc, decVals] = svmpredict(testLabel, KK, model);
    
    %# confusion matrix
    %C = confusionmat(testClass,predClass)
    
    end
    
    源代码