精华内容
下载资源
问答
  • 2020-12-23 21:31:57

    除了具有两个特征(即可以表示在二维坐标图)的数据分类,实际应用中的数据往往具有很多个特征,fitclinear函数可以训练用于高维数据的SVM二分类模型。
    以下内容基于MATLAB官网的介绍文档,进行了一点个人的理解和整理,不算原创,但也不是单纯的翻译,也就恬不知耻的算作原创了。具体内容缺斤少两的,想看具体的英文内容请点击链接fitclinear

    fitclinear

    要在高维数据集(即包含许多预测变量的数据集)上训练用于二分类的线性支持向量机模型,可以改用fitclinear

    fitclinear训练线性分类模型,用于高维、完整或稀疏的预测数据的二类(binary)学习。现有的线性分类模型包括正则化支持向量机(SVM)和logistic回归模型。fitclinear使用减少计算时间的技术(如随机梯度下降)最小化目标函数。

    为了减少在包含多个预测变量的高维数据集上的计算时间,利用fitchinear训练一个线性分类模型。对于低维到中维预测数据集,请参阅低维数据的备选方案

    几个例子

    Train Linear Classification Model

    训练线性分类模型,样本大小为31572*34023,比较大。

    % 导入NLP数据集
    load nlpdata
    
    % X是预测数据的稀疏矩阵,Y是类别标签的分类向量,数据中有两个以上的类。
    % 标识与“统计和机器学习工具箱”文档网页对应的标签。
    Ystats = Y == 'stats';
    
    % 训练一个二进制线性分类模型,该模型可以识别文档网页中的字数是否来自统计和机器学习工具箱文档。使用整个数据集训练模型。通过提取拟合摘要,确定优化算法将模型拟合到数据的程度。
    rng(1); % For reproducibility 
    [Mdl,FitInfo] = fitclinear(X,Ystats);
    

    Mdl是一个线性分类模型。可以通过模型和训练数据(或新数据)的损失来检查样本中的分类错误,也可以通过Mdl预测新的数据。

    FitInfo是一个结构数组,其中包含终止状态(TerminationStatus)以及解算器将模型拟合到数据所需的时间(FitTime)。最好使用FitInfo来确定优化终止测量是否令人满意。因为训练时间很短,可以尝试重新训练模型,但要增加通过数据的次数。这可以改进诸如DeltaGradient之类的措施。

    Find Good Lasso Penalty Using Cross-Validation

    使用交叉验证找到好的套索惩罚(Lasso Penalty),Lasso是Least Absolute Shrinkage and Selection Operator的简称,是一种采用了L1正则化(L1-regularization)的线性回归方法,采用了L1正则会使得部分学习到的特征权值为0,从而达到稀疏化和特征选择的目的。

    具体是个啥我也不太懂,还是得学习啊。

    要为使用Logistic回归学习器的线性分类模型确定良好的lasso-penalty strength,实施5倍交叉验证。使用的数据集和前一个例子的一样。具体过程见代码:

    % 导入数据集
    load nlpdata
    Ystats = Y == 'stats';
    
    % 生成从10-6次方到10-0.5次方之间按对数等分的11个元素的行向量,即11个正则化强度
    Lambda = logspace(-6,-0.5,11);
    
    % 对模型进行交叉验证。 要提高执行速度,请转置预测变量数据并指定观察值在列中。 
    % 使用SpaRSA估算系数。 将目标函数的梯度公差降低到1e-8。
    X = X'; 
    rng(10); % For reproducibility
    CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns','KFold',5,...
        'Learner','logistic','Solver','sparsa','Regularization','lasso',...
        'Lambda',Lambda,'GradientTolerance',1e-8)
    
    numCLModels = numel(CVMdl.Trained)
    
    % CVMdl是ClassificationPartitionedLinear模型。由于fitclinear实现5折交叉验证,因此CVMdl包含5个ClassificationLinear模型,该软件在每次折叠时进行训练。
    % 显示第一个训练有素的线性分类模型。
    Mdl1 = CVMdl.Trained{1}
    
    % Mdl1是线性分类模型,fitclinear通过在前四个折叠中进行训练来构造Mdl1。 
    % 因为Lambda是一系列正则化强度,所以可以将Mdl1视为11个模型,Lambda中每个正则化强度都对应一个模型。
    % 估计交叉验证的分类误差。
    % 因为有11个正则化强度,所以ce是分类错误率组成的1×11向量。
    ce = kfoldLoss(CVMdl);
    
    % 较高的Lambda值导致预测变量稀疏性,这是一个良好的分类器质量。
    % 对于每个正则化强度,使用整个数据集和交叉验证模型时的相同选项来训练线性分类模型。确定每个模型的非零系数的数量。
    Mdl = fitclinear(X,Ystats,'ObservationsIn','columns',...
        'Learner','logistic','Solver','sparsa','Regularization','lasso',...
        'Lambda',Lambda,'GradientTolerance',1e-8);
    numNZCoeff = sum(Mdl.Beta~=0);
    
    % 在同一图中,针对每个正则化强度绘制交叉验证的分类错误率和非零系数的频率。 在对数刻度上绘制所有变量。
    figure;
    [h,hL1,hL2] = plotyy(log10(Lambda),log10(ce),...
        log10(Lambda),log10(numNZCoeff)); 
    hL1.Marker = 'o';
    hL2.Marker = 'o';
    ylabel(h(1),'log_{10} classification error')
    ylabel(h(2),'log_{10} nonzero-coefficient frequency')
    xlabel('log_{10} Lambda')
    title('Test-Sample Statistics')
    hold off
    
    % 选择平衡预测变量稀疏性和低分类误差的正则化强度指标。在这种情况下,10-4次方至10-1次方之间的值就足够了。
    idxFinal = 7;
    
    % 从Mdl中选择具有选定正则化强度的模型。
    % MdlFinal是包含一个正则化强度的ClassificationLinear模型。可以使用MdlFinal和新数据预测新数据的标签。
    MdlFinal = selectModels(Mdl,idxFinal);
    

    Optimize Linear Classifier

    本示例说明如何使用fitclinear在线性分类器中最小化交叉验证误差。 该示例仍然使用NLP数据集,但是我没看,哈哈哈。

    输入参数Input Arguments

    X是预测数据,指定为n×p全矩阵或稀疏矩阵。
    注意,如果调整预测数据矩阵的方向,使观测值对应于列并指定“ ObservationsIn”,“ columns”,则优化执行时间可能会大大减少。

    Y是分类模型的类标签,指定为分类,字符或字符串数组,逻辑或数字向量或字符向量的单元格数组。fitclinear仅支持二进制分类。 Y必须完全包含两个截然不同的类,或者必须使用’ClassNames’名称/值对参数指定两个用于训练的类。有关多类学习的信息,请参见fitcecoc。如果Y是一个字符数组,则每个元素必须对应于该数组的一行。Y的长度必须等于X中的观测数目。一个好的做法是使用ClassNames名称/值对参数指定类顺序。

    输出参数Output Arguments

    输出参数包括经过训练的分类模型Mdl,优化的详细信息FitInfo,以及超参数的交叉验证优化结果。

    此外,More About和Tips中还给出了更多的注意事项,值得学习。

    应用

    ClassificationLinear class介绍了线性分类器的应用。分类线性模型是经过训练的线性模型对象,用于二元分类。线性模型是支持向量机(SVM)或逻辑回归模型。fitclinear通过使用减少高维数据集(例如,随机梯度下降)的计算时间的技术来最小化目标函数,从而拟合了CategoryLinear模型。分类损失加正则项构成目标函数。

    与其他分类模型不同,出于节省内存的目的,ClassificationLinear模型对象不存储训练数据。 但是,它们存储了估计的线性模型系数,先验概率和正则化强度。

    可以使用训练过的ClassificationLinear模型来预测新数据的标签或分类分数。有关详细信息,请参见predict

    更多相关内容
  • matlab 使用svm进行分类含实例代码(适用于二分类和多分类

    matlab 使用svm进行分类(适用于二分类和多分类

    1. 简单二分类

    clear,clc
    
    %% 二分类
    %训练数据20×2,20行代表20个训练样本点,第一列代表横坐标,第二列纵坐标
    Train_Data =[-3 0;4 0;4 -2;3 -3;-3 -2;1 -4;-3 -4;0 1;-1 0;2 2;3 3;-2 -1;-4.5 -4;2 -1;5 -4;-2 2;-2 -3;0 2;1 -2;2 0];
    %Group 20 x 1,20行代表训练数据对应点属于哪一类(1,-1)
    Train_labels =[1 -1 -1 -1 1 -1 1 1 1 -1 -1 1 1 -1 -1 1 1 1 -1 -1]';
    TestData = [3 -1;3 1;-2 1;-1 -2;2 -3;-3 -3];%测试数据
    classifier  = fitcsvm(Train_Data,Train_labels); %train
    test_labels  = predict(classifier ,TestData); % test
    

    这里 test_labels 就是最后的分类结果啦,大家可以按照这个格式对自己的数据进行修改

    2. 多分类(不调用工具箱)

    因为

    %% 多分类
    TrainingSet=[ 1 10;2 20;3 30;4 40;5 50;6 66;3 30;4.1 42];%训练数据
    TestSet=[3 34; 1 14; 2.2 25; 6.2 63];%测试数据
    GroupTrain=[1;1;2;2;3;3;2;2];%训练标签
    results =my_MultiSvm(TrainingSet, GroupTrain, TestSet);
    disp('multi class problem');
    disp(results);
    

    results为最终的分类结果,上述中有用到 my_MultiSvm.m() 函数,以下是my_MultiSvm.m函数的全部内容

    function [y_predict,models] = my_MultiSvm(X_train, y_train, X_test)
    % multi svm
    % one vs all 模型
    % Input:
    % X_train: n*m矩阵 n为训练集样本数 m为特征数
    % y_train: n*1向量 为训练集label,支持任意多种类
    % X_test: n*m矩阵 n为测试集样本数 m为特征数
    % Output:
    % y_predict: n*1向量 测试集的预测结果
    % 
    % Copyright(c) lihaoyang 2020
    %
    
        y_labels = unique(y_train);
        n_class = size(y_labels, 1);
        models = cell(n_class, 1);
        % 训练n个模型
        for i = 1:n_class
            class_i_place = find(y_train == y_labels(i));
            svm_train_x = X_train(class_i_place,:);
            sample_num = numel(class_i_place);
            class_others = find(y_train ~= y_labels(i));
            randp = randperm(numel(class_others));
            svm_train_minus = randp(1:sample_num)';
            svm_train_x = [svm_train_x; X_train(svm_train_minus,:)];
            svm_train_y = [ones(sample_num, 1); -1*ones(sample_num, 1)];
            disp(['生成模型:', num2str(i)])
            models{i} = fitcsvm(svm_train_x, svm_train_y);
        end
        test_num = size(X_test, 1);
        y_predict = zeros(test_num, 1);
        % 对每条数据,n个模型分别进行预测,选择label为1且概率最大的一个作为预测类别
        for i = 1:test_num
            if mod(i, 100) == 0
                disp(['预测个数:', num2str(i)])
            end
            bagging = zeros(n_class, 1);
            for j = 1:n_class
                model = models{j};
                [label, rat] = predict(model, X_test(i,:));
                bagging(j) = bagging(j) + rat(2);
            end
            [maxn, maxp] = max(bagging);
            y_predict(i) = y_labels(maxp);
        end
    end
    

    3.多分类(调用libsvm工具箱)

    以下代码是调用matlab工具箱libsvm的一种方法

    TrainingSet=[ 1 10;2 20;3 30;4 40;5 50;6 66;3 30;4.1 42];%训练数据
    TestSet=[3 34; 1 14; 2.2 25; 6.2 63];%测试数据
    GroupTrain=[1;1;2;2;3;3;2;2];%训练标签
    GroupTest=[1;2;1;3];%测试标签
    
    %svm分类
    model = svmtrain(GroupTrain,TrainingSet);
    % SVM网络预测
    [predict_label] = svmpredict(GroupTest,TestSet,model);
    

    之所以放到最后,是因为需要在matlab安装libsvm的工具箱,具体方法可参看此链接在Matlab中安装LibSVM工具箱

    展开全文
  • 采用MATLAB实现支持向量机(SVM)解决二分类问题,分别采用二次规划凸优化求解、半不无穷规划(线性核与非线性...带IRIS数据、实验报告与SVM二分类原理数学推导文档,可直接运行,不使用MATLAB的SVM工具箱,比较基础。
  • matlab平台下实现SVM二分类问题;共两个:一个是线性分类问题;另一个是非线性分类问题。
  • 可直接编译成功
  • SVM基础二分类

    2019-03-17 23:45:24
    支持向量机二分类图像,matlab代码实现
  • 利用MATLAB实现SVM分类

    千次阅读 2021-10-07 10:57:21
    利用MATLAB实现SVM分类 %% LibSVM clc;clear;close all; %% 加载文件 [Iris1,Iris2,Iris3,Iris4,IrisClass]=textread('iris.data','%f%f%f%f%s','delimiter',','); Wine=load('wine.data'); % 仅读数字 Abalone=...

    利用MATLAB实现SVM分类

    %% LibSVM
    clc;clear;close all;
    %% 加载文件
    [Iris1,Iris2,Iris3,Iris4,IrisClass]=textread('iris.data','%f%f%f%f%s','delimiter',','); 
    Wine=load('wine.data'); % 仅读数字
    Abalone=importdata('abalone.data');%既可以读取数据又可以读取字符
    %% 数据预处理
    % Iris数据预处理
    Iris_all=[Iris1,Iris2,Iris3,Iris4];
    Iris_class = zeros(1, 150);
    for i = 1: size(IrisClass,1)
                 if (strcmp(IrisClass(i), 'Iris-setosa' ))
                   Iris_class(1,i) = 1;     
                elseif(strcmp(IrisClass(i), 'Iris-versicolor') )
                   Iris_class(1,i) = 2;
                else
                   Iris_class(1,i) = 3;  
                 end 
    end
    Iris_class=Iris_class(:);
    %------数据类别放在第一列-----%
    Iris=[Iris_class Iris_all];
    % Wine数据预处理
    Wine_class=Wine(:,1);
    Wine_data=Wine(:,2:14);
    % Abalone数据预处理
    Abalone_gendar = zeros(1, 4177);
    for i = 1: size(Abalone.textdata,1)
                 if (strcmp(Abalone.textdata(i), 'F' ))
                   Abalone_gendar(1,i) = 1;     
                elseif(strcmp(Abalone.textdata(i), 'M') )
                   Abalone_gendar(1,i) = 2;
                else
                   Abalone_gendar(1,i) = 3;  
                 end 
    end
    Abalone_gendar = Abalone_gendar(:);
    Abalone_Data=Abalone.data(:,1:8);
    Abalone_class=Abalone_gendar;
    Abalone_all=[Abalone_class Abalone_Data];
    % 分割部分
    times=2;
    %% -----Iris样本的选取-----
    % 随机选取
    Data = Iris;%创建随机矩阵样本
    indices = crossvalind('Kfold', size(Data,1), times);%将数据样本随机分割为3部分
    for i = 1:times %循环3次,分别取出第i部分作为测试样本,其余两部分作为训练样本
        test = (indices == i);
        train = ~test;
        trainData = Data(train, :);
        testData = Data(test, :);
    end
    train_1=trainData(:,2:5);
    train_label=trainData(:,1);
    test_1=testData(:,2:5);
    test_label=testData(:,1);
    % 分类选取(先分类再随机再组合)
    Data = Iris;%创建随机矩阵样本
    % 第一类数据
    Iris_Index1=logical(Iris(:,1)==1);
    Iris_class1=Data(Iris_Index1==1,:);
    indices = crossvalind('Kfold', size(Iris_class1,1), times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData1 = Iris_class1(train, :);
        testData1 = Iris_class1(test, :);
    end
    % 第二类数据
    Iris_Index2=logical(Iris(:,1)==2);
    Iris_class2=Data(Iris_Index2==1,:);
    indices = crossvalind('Kfold', size(Iris_class2,1), times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData2 = Iris_class2(train, :);
        testData2 = Iris_class2(test, :);
    end
    % 第三类数据
    Iris_Index3=logical(Iris(:,1)==3);
    Iris_class3=Data(Iris_Index3==1,:);
    indices = crossvalind('Kfold', size(Iris_class3,1), times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData3 = Iris_class3(train, :);
        testData3 = Iris_class3(test, :);
    end
    trainData_all=[trainData1;trainData2;trainData3];
    testData_all=[testData1;testData2;testData3];
    train_cross=trainData_all(:,2:5);
    train_label_cross=trainData_all(:,1);
    test_cross=testData_all(:,2:5);
    test_label_cross=testData_all(:,1);
    %% -------Wine样本的选取------
    % 随机选取
    times=10;
    Data = Wine;%创建随机矩阵样本
    indices = crossvalind('Kfold', size(Data,1), times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData = Data(train, :);
        testData = Data(test, :);
    end
    train_1=trainData(:,2:14);
    train_label=trainData(:,1);
    test_1=testData(:,2:14);
    test_label=testData(:,1);
    % 分类选取(先分类再随机再组合)
    Data = Wine;%创建随机矩阵样本
    % 第一类数据
    Wine_Index1=logical(Wine(:,1)==1);
    Wine_class1=Data(Wine_Index1==1,:);
    indices = crossvalind('Kfold', size(Wine_class1,1), times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData1 = Wine_class1(train, :);
        testData1 = Wine_class1(test, :);
    end
    % 第二类数据
    Wine_Index2=logical(Wine(:,1)==2);
    Wine_class2=Data(Wine_Index2==1,:);
    indices = crossvalind('Kfold', size(Wine_class2,1), times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData2 = Wine_class2(train, :);
        testData2 = Wine_class2(test, :);
    end
    % 第三类数据
    Wine_Index3=logical(Wine(:,1)==3);
    Wine_class3=Data(Wine_Index3==1,:);
    indices = crossvalind('Kfold', size(Wine_class3,1), times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData3 = Wine_class3(train, :);
        testData3 = Wine_class3(test, :);
    end
    trainData_all=[trainData1;trainData2;trainData3];
    testData_all=[testData1;testData2;testData3];
    train_cross=trainData_all(:,2:14);
    train_label_cross=trainData_all(:,1);
    test_cross=testData_all(:,2:14);
    test_label_cross=testData_all(:,1);
    % 训练
    % 随机分类训练
    cmd1 =['-t  1']; %线性核函数
    cmd2 =['-t  1 –c  100']; %线性核函数
    model = svmtrain(train_label, train_1, cmd2);
    svmpredict(test_label,test_1,model);
    % 按类别随机分类训练
    cmd1 =['-t  1']; %线性核函数
    cmd2 =['-t  1 –c  100']; %线性核函数
    model = svmtrain(train_label_cross, train_cross, cmd1);
    svmpredict(test_label_cross,test_cross,model);
    % 换核函数
    cmd1 =['-t  1']; %线性核函数
    cmd2 =['-t  1 –c  100']; %线性核函数
    model = svmtrain(train_label_cross, train_cross, cmd2);
    svmpredict(test_label_cross,test_cross,model);
    %% -----Abalone样本的选取-----
    % 对于分布不均匀样本的随机选取方法
    % 随机选取
    times=10;
    Data = Abalone_all;%创建随机矩阵样本
    indices = crossvalind('Kfold', size(Data,1), times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData = Data(train, :);
        testData = Data(test, :);
    end
    train_1=trainData(:,2:9);
    train_label=trainData(:,1);
    test_1=testData(:,2:9);
    test_label=testData(:,1);
    % 分类选取(先分类再随机再组合)
    Data = Abalone_all;%创建随机矩阵样本
    % 第一类数据
    Abalone_Index1=logical(Abalone_all(:,1)==1);
    Abalone_class1=Data(Abalone_Index1==1,:);
    indices = crossvalind('Kfold', size(Abalone_class1,1),times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData1 = Abalone_class1(train, :);
        testData1 = Abalone_class1(test, :);
    end
    % 第二类数据
    Abalone_Index2=logical(Abalone_all(:,1)==2);
    Abalone_class2=Data(Abalone_Index2==1,:);
    indices = crossvalind('Kfold', size(Abalone_class2,1), times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData2 = Abalone_class2(train, :);
        testData2 = Abalone_class2(test, :);
    end
    % 第三类数据
    Abalone_Index3=logical(Abalone_all(:,1)==3);
    Abalone_class3=Data(Abalone_Index3==1,:);
    indices = crossvalind('Kfold', size(Abalone_class3,1), times);
    for i = 1:times 
        test = (indices == i);
        train = ~test;
        trainData3 = Abalone_class3(train, :);
        testData3 = Abalone_class3(test, :);
    end
    trainData_all=[trainData1;trainData2;trainData3];
    testData_all=[testData1;testData2;testData3];
    train_cross=trainData_all(:,2:9);
    train_label_cross=trainData_all(:,1);
    test_cross=testData_all(:,2:9);
    test_label_cross=testData_all(:,1);
    % % 随机分类训练
    % cmd1 =['-t  1']; %线性核函数
    % cmd2 =['-t  1 –c  100']; %线性核函数
    % model = svmtrain(train_label, train_1, cmd1);
    % svmpredict(test_label,test_1,model);
    % 按类别随机分类训练
    cmd1 =['-t  1']; %线性核函数
    cmd2 =['-t  1 –c  100']; %线性核函数
    model = svmtrain(train_label_cross, train_cross, cmd1);
    svmpredict(test_label_cross,test_cross,model);
    % 按类别随机分类训练
    cmd1 =['-t  1']; %线性核函数
    cmd2 =['-t  1 –c  100']; %线性核函数
    model = svmtrain(train_label_cross, train_cross, cmd2);
    svmpredict(test_label_cross,test_cross,model);
    %% 训练
    % 随机分类训练
    cmd1 =['-t  1']; %线性核函数
    cmd2 =['-t  1 –c  100']; %线性核函数
    model = svmtrain(train_label, train_1, cmd1);
    svmpredict(test_label,test_1,model);
    % 按类别随机分类训练
    cmd1 =['-t  1']; %线性核函数
    cmd2 =['-t  1 –c  100']; %线性核函数
    model = svmtrain(train_label_cross, train_cross, cmd1);
    svmpredict(test_label_cross,test_cross,model);
    
    %% 换样本进行操作
    
    
    
    
    展开全文
  • matlab自带svm函数进行二分类

    万次阅读 2019-03-25 21:10:11
    今天讲一讲支持向量机(svm二分类的用法。 1 原理 具体的推导笔者就不说了,可以自行百度。SVM本质就是找出最小类间距离并使其最大化。分离面称作超平面。核函数本质上决定了它的分类精度,包括多项式核...

    今天讲一讲支持向量机(svm)二分类的用法。

    1 原理

    具体的推导笔者就不说了,可以自行百度。SVM本质就是找出最小类间距离并使其最大化。分离面称作超平面。核函数本质上决定了它的分类精度,包括多项式核(polynomial kernel),径向基函数核(RBF kernel),拉普拉斯核(Laplacian kernel),Sigmoid核(Sigmoid kernel)。svm有很多类型。libsvm是其中使用最为广泛的。现在matlab有自带的svm包,但是只能用于二分类,如果需要三分类或者多分类,则要使用libsvm,必须下载其软件包。

    下载链接:https://www.csie.ntu.edu.tw/~cjlin/libsvm/#matlab

    安装教程:https://blog.csdn.net/cherry4500/article/details/71257973

    libsvm实例:https://blog.csdn.net/weixin_42296976/article/details/81160114

    2 matlab自带的svm函数

    主要是svmtrain和svmclassify函数。可以在svmtrain中选择核函数类型,曲线拟合程度(c与sigma参数的选择)等。

    贴参数选择实例:https://blog.csdn.net/red_stone1/article/details/54313821

    https://blog.csdn.net/weiqiwu1986/article/details/56056860

    3 实例

    我这个是对小麦白粉病和条锈病做分类。

    function [accuracy,predict_group] =FITCSVM_classification(training,training_group,test,test_group)
    %training数据行是样本数目,列是样本特征数目(维数),此处我的每个样本特征是40维。训练样本60个。
    %group 分为0和1,1正例,0反例,行是样本数目,列是标签,就一列。

    SVMStruct=svmtrain(training,training_group,'kernel_function','linear','showplot',true);%FITCSVM
    % sigma=0.5;
    % sigma=3;%sigma越小曲线越复杂,越容易过拟合,对测试集的预测越不准
    % SVMStruct=svmtrain(training,training_group,'kernel_function','rbf','rbf_sigma',...
    %      sigma,'showplot',true);
    % C = 1;%c越大曲线越复杂,越容易过拟合,对测试集的预测越不准,也不是绝对。sigma的影响更普遍。
    % SVMStruct = svmtrain(training,training_group,'kernel_function','rbf','boxconstraint',...
    %     C,'showplot',true);
    %样本的行是样本数目,列是样本特征数,与training数据一致
    predict_group=svmclassify(SVMStruct,test,'showplot',true);%ClassificationSVM,默认是线性分类函数
    accuracy = (1-sum(abs(predict_group-test_group))/length(test_group))*100;
    figure(6)
    a = randperm(30);%测试集30个样本
    b = sort(a);
    plot(b,predict_group,'r*');
    hold on
    plot(b,test_group,'go');%,'MarkerFaceColor','g'
    title('SVM分类结果')
    %加一个预测标签和测试集标签的回归分析图

    %超过3维分类超平面就无法画出。
    %xlswrite('output.xlsx',group)

    结果图如下所示:

    红色*表示预测标签,绿色圆表示真实的标签。用linear能达到93.33%的精度。

    展开全文
  • 使用Matlab实现二分类SVM,优化技术使用的是Matlab自带优化函数quadprog。只为检查所学,更为熟悉;不为炫耀。也没有太多时间去使用更多的优化方法。function model = svm0311(data,options)%SVM0311 解决2分类...
  • 傻瓜攻略(十七)——MATLAB实现SVM二分类之fitcsvm

    万次阅读 多人点赞 2020-12-23 21:23:44
    MATLAB实现SVM二分类 SVM是名噪一时的机器学习方法,自20世纪末 以来在模式识别领域风生水起,至今仍然活跃在各大论文期刊中。无论是和其他特征提取方法的结合,还是和其他模式识别方法的对比,SVM的表现都可圈可点...
  • SVM二分类MATLAB实现

    2018-07-12 22:54:58
    是基于课程SVM原理内容写的SVM的底层实现,包括线性的和非线性采用核函数的。初学者,比较。。。
  • MatLab实现SVM分类

    千次阅读 2021-04-23 09:45:17
    在当前数据挖掘和机器学习领域,最为热门的话题莫过于SVM和Boosting方法了。只要是涉及到这两个主题,那么论文就会容易被杂志和会议接受了。看来不管做什么,都讲究眼球效应啊。搞研究其实也有点类似超级女声,呵呵...
  • matlabsvm图片分类代码pointCloudsClassification 该Matlab代码实现了Andrew E. Johnson和Martial Hebert撰写的论文中的解决方案。 目标是识别代表道路上的物体​​(行人,汽车等)的3D点云。 属性的选择基于本文...
  • 在代码中修改一下资源文件的路径,采用的MATLAB自带svmtrain函数,配置libsvm时需要进行一定处理,避免svmtrain函数冲突,该Demo完全有效
  • matlab版hog+svm图像二分类

    千次下载 热门讨论 2016-12-20 14:29:42
    该代码实现的是图像的二分类,hog用于图像的特征提取,svm表示的是对特征的分类。解压缩后,在添加到matlab的工作目录后,需要在代码中修改一下资源文件的路径(比如正负样本的图片路径),才可以正确运行。
  • 对于大数据的非线性分类,可以使用 fitckernel 训练类高斯核分类模型。
  • % 估计广义分类误差,误差越小说明分类器的泛化效果越好 genError = kfoldLoss(CVMdl) Estimate Posterior Probabilities Using ECOC Classifier 使用SVM二进制学习器训练ECOC分类器。首先预测训练样本标签和类后验...
  • 这也接受所有选项作为 varargin 无需担心这是完美的工作我使用以下参考进行分类多类支持向量机多类 SVM 旨在通过使用支持向量机为实例分配标签,其中标签是从几个元素的有限集合中提取的。 这样做的主要方法是将...
  • Matlab 基于svm的图像物体分类发布时间:2018-05-16 20:27,浏览次数:1623, 标签:Matlabsvm本周工作日志,老师布置了一个小作业,让我们使用matlab实现图像物体分类matlab 图像分类1分类原理基于一个很朴素的观点,...
  • 一个不平衡数据分类的东西,数据来源于UCI数据集中的AREM人体姿态,用于检测二分类的好坏。程序是用NCL+SVMSVM用的是LIBSVM-3.14的工具箱
  • 利用matlabSVM算法的参数进行优化,从而更好的提升分类性能
  • MatlabSVM分类问题?

    2021-04-29 05:20:54
    由于刚接触SVM,用的程序是网上下载的一个标准的演示程序,在该程序基础上改进的.请帮忙看看!谢谢!其中Calckernel函数是一般的核函数计算,没有错误,就不再贴这部分程序了。clear all% --------------------------...
  • matlab实现分类svm

    千次阅读 2020-04-19 00:41:08
    SVM也叫支持向量机,其是一个分类器,但是对于多分类SVM也可以实现。主要方法就是训练多个分类器。常见的有以下两种方式: 一对一(one-vs-one) 给定m个类,对m个类中的每两个类都训练一个分类器,总共....
  • svm分类问题matlab程序代码 SVM Introduction 支持向量机 (Support Vector Machines) 在机器学习中是一个重要的学习课题。 近两年在学习的同时也尝试给其他人讲解支持向量机的相关理论知识,个人认为也是十分有益...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,445
精华内容 2,578
关键字:

matlab实现svm二分类

matlab 订阅
友情链接: Linux.zip