首页 文章

如何在Matlab中使用libsvm?

提问于
浏览
9

我是matlab的新手,不知道如何使用libsvm . 是否有任何示例代码用于使用SVM对某些数据(具有2个功能)进行分类,然后可视化结果?内核(RBF,多项式和Sigmoid)怎么样?我在libsvm包中看到了自述文件,但我无法做出它的头或尾请你在matlab中使用支持向量机(SVM)给出一个2类分类的例子:

Attribute_1    Attribute_2   Class
170            66            -1
160            50            -1
170            63            -1
173            61            -1
168            58            -1
184            88            +1
189            94            +1
185            88            +1

任何帮助将非常感激 .

1 回答

  • 12

    在libsvm包中,在matlab / README文件中,您可以找到以下示例:

    Examples
    ========
    
    Train and test on the provided data heart_scale:
    
    matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');
    matlab> model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
    matlab> [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model); % test the training data
    
    For probability estimates, you need '-b 1' for training and testing:
    
    matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');
    matlab> model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07 -b 1');
    matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');
    matlab> [predict_label, accuracy, prob_estimates] = svmpredict(heart_scale_label, heart_scale_inst, model, '-b 1');
    
    To use precomputed kernel, you must include sample serial number as
    the first column of the training and testing data (assume your kernel
    matrix is K, # of instances is n):
    
    matlab> K1 = [(1:n)', K]; % include sample serial number as first column
    matlab> model = svmtrain(label_vector, K1, '-t 4');
    matlab> [predict_label, accuracy, dec_values] = svmpredict(label_vector, K1, model); % test the training data
    
    We give the following detailed example by splitting heart_scale into
    150 training and 120 testing data.  Constructing a linear kernel
    matrix and then using the precomputed kernel gives exactly the same
    testing error as using the LIBSVM built-in linear kernel.
    
    matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');
    matlab>
    matlab> % Split Data
    matlab> train_data = heart_scale_inst(1:150,:);
    matlab> train_label = heart_scale_label(1:150,:);
    matlab> test_data = heart_scale_inst(151:270,:);
    matlab> test_label = heart_scale_label(151:270,:);
    matlab>
    matlab> % Linear Kernel
    matlab> model_linear = svmtrain(train_label, train_data, '-t 0');
    matlab> [predict_label_L, accuracy_L, dec_values_L] = svmpredict(test_label, test_data, model_linear);
    matlab>
    matlab> % Precomputed Kernel
    matlab> model_precomputed = svmtrain(train_label, [(1:150)', train_data*train_data'], '-t 4');
    matlab> [predict_label_P, accuracy_P, dec_values_P] = svmpredict(test_label, [(1:120)', test_data*train_data'], model_precomputed);
    matlab>
    matlab> accuracy_L % Display the accuracy using linear kernel
    matlab> accuracy_P % Display the accuracy using precomputed kernel
    
    Note that for testing, you can put anything in the
    testing_label_vector.  For more details of precomputed kernels, please
    read the section ``Precomputed Kernels'' in the README of the LIBSVM
    package.
    

相关问题