LibSVM中MATLAB自带README文件的介绍

目录:

介绍

安装

使用

返回的模型结构

结果的预测

其它用法

示例

一、介绍

这个工具提供了一个简单的界面,用于使用LIBSVM,它易于使用,因为其用法和参数指定方式与LIBSVM相同。

二、安装

这段文本提供了关于在Windows系统上使用MATLAB或OCTAVE编译LIBSVM工具的说明。以下是对文本的解释:

  1. 预编译的 mex 文件:

    • 在Windows系统上,预先构建的 mex 文件已经存在于目录’…\windows’中。用户只需将它们复制到MATLAB目录中。
  2. 建议的编译方法:

    • 推荐在MATLAB和OCTAVE上都使用 make.m。只需键入 ‘make’ 命令,即可构建 ‘libsvmread.mex’、‘libsvmwrite.mex’、‘svmtrain.mex’ 和 ‘svmpredict.mex’。
  3. MATLAB 或 OCTAVE 上的编译命令示例:

    • 在MATLAB或OCTAVE中,执行以下命令:
      >> make
      
  4. 处理编译问题:

    • 如果在MATLAB上 make.m 不起作用(特别是在Windows上),可以尝试使用 ‘mex -setup’ 命令选择合适的编译器。确保您的编译器是可访问和可用的。然后再次执行 ‘make’ 完成安装。
  5. 编译器选择示例:

    • 示例中演示了如何使用 ‘mex -setup’ 来配置编译器。MATLAB会选择默认的编译器。如果有多个编译器,MATLAB会列出一个列表供您选择。更多详情可以查看提供的链接。
  6. Windows 平台测试:

    • 文本中指出,在Windows上通过使用Visual C++已经测试过 make.m。

综合起来,这些说明提供了在Windows系统上通过MATLAB或OCTAVE编译LIBSVM工具的步骤和建议。用户可以根据需要选择使用预编译的 mex 文件或者按照说明重新构建工具。

三、使用

提供了在MATLAB中使用LIBSVM工具的示例用法,以下是对每个命令的详细解释:

svmtrain 命令:

  • 用法:model = svmtrain(training_label_vector, training_instance_matrix [, 'libsvm_options']);
  • 参数:
    • training_label_vector:一个 m 行 1 列的训练标签向量(类型必须为 double)
    • training_instance_matrix:一个 m 行 n 列的训练实例矩阵,包含 n 个特征,可以是密集或稀疏矩阵(类型必须为 double)。
    • libsvm_options:一个字符串,包含与 LIBSVM 相同格式的训练选项。
  • 说明:该命令用于训练支持向量机模型,并返回训练好的模型。

svmpredict 命令:

  • 用法1:[predicted_label, accuracy, decision_values/prob_estimates] = svmpredict(testing_label_vector, testing_instance_matrix, model [, 'libsvm_options']);
  • 用法2:[predicted_label] = svmpredict(testing_label_vector, testing_instance_matrix, model [, 'libsvm_options']);
  • 参数:
    • testing_label_vector:一个 m 行 1 列的预测标签向量。如果测试数据的标签未知,可以使用任意随机值(类型必须为 double)。
    • testing_instance_matrix:一个 m 行 n 列的测试实例矩阵,包含 n 个特征,可以是密集或稀疏矩阵(类型必须为 double)。
    • model:svmtrain 命令的输出模型。
    • libsvm_options:一个字符串,包含与 LIBSVM 相同格式的测试选项。
  • 说明:该命令用于使用训练好的模型进行预测,返回预测标签、准确度和决策值/概率估计。

 这些命令提供了在MATLAB中使用LIBSVM进行训练和预测的基本用法,并解释了每个命令的参数和返回值。

四、返回的模型结构

这部分描述了在使用 ‘svmtrain’ 函数训练支持向量机后返回的模型结构

  1. Parameters(参数):

    • 类型:结构体
    • 描述:包含模型的参数信息。
  2. nr_class(类别数):

    • 类型:整数
    • 描述:类别的数量;对于回归/单类别支持向量机,该值为2。
  3. totalSV(支持向量总数):

    • 类型:整数
    • 描述:支持向量的总数。
  4. rho(决策函数中的-b):

    • 类型:实数
    • 描述:决策函数 wx+b 中的参数 -b。
  5. Label(类别标签):

    • 类型:向量
    • 描述:每个类别的标签;对于回归/单类别支持向量机,此项为空。
  6. sv_indices(支持向量的索引):

    • 类型:向量
    • 描述:值在 [1,…,num_traning_data] 范围内,指示训练集中的支持向量。
  7. ProbA 和 ProbB(概率信息):

    • 类型:矩阵
    • 描述:成对的概率信息;如果 -b 选项为 0 或者是单类别支持向量机,这两项为空。
  8. Prob_density_marks(概率密度标记):

    • 类型:矩阵
    • 描述:用于单类别支持向量机的概率信息;如果 -b 为 0 或者不是单类别支持向量机,这项为空。
  9. nSV(每个类别的支持向量数量):

    • 类型:向量
    • 描述:每个类别的支持向量数量;对于回归/单类别支持向量机,此项为空。
  10. sv_coef(决策函数中的支持向量系数):

    • 类型:矩阵
    • 描述:决策函数中支持向量的系数。
  11. SVs(支持向量):

    • 类型:矩阵
    • 描述:支持向量的数据。

如果不使用 ‘-b 1’ 选项,ProbA 和 ProbB 将是空矩阵。如果指定了 ‘-v’ 选项,将进行交叉验证,并返回的模型只是一个标量:用于分类的交叉验证准确度和用于回归的均方误差。

有关该模型的更多细节可以在 LIBSVM FAQ(http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html) 和 LIBSVM 实现文档(http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf) 中找到。

五、结果的预测

这段代码描述了 ‘svmpredict’ 函数的三个输出,以下是对每个输出的详细解释:

  1. predicted_label(预测标签):

    • 类型:向量
    • 描述:包含预测标签的向量。每个元素表示相应测试实例的预测标签。
  2. accuracy(准确度):

    • 类型:向量
    • 描述:包含准确度的向量,用于分类问题。对于回归问题,其中包含均方误差和平方相关系数。如果使用了 ‘-b 1’ 选项,则第二个元素包含平均精度。
  3. decision_values/prob_estimates(决策值/概率估计):

    • 类型:矩阵

    • 描述:包含决策值或概率估计的矩阵。如果使用了 ‘-b 1’ 选项,则这个矩阵包含概率估计。对于二元分类问题,每一行都包括预测 k(k-1)/2 个二元分类支持向量机的结果。对于多类别分类问题,每一行表示测试实例属于每个类别的概率。注意,这里类别的顺序与模型结构中的 ‘Label’ 字段相同。

    • 对于二元分类问题(k=2),决策值表示正类别的概率;对于多类别问题(k>2),决策值表示每个类别的概率。

    • 对于一类别支持向量机,每行包含两个元素,分别表示正常实例和异常实例的概率。

这三个输出提供了对测试数据进行预测后的不同信息,包括预测标签、准确度和决策值/概率估计。用户可以根据任务类型选择关注的输出。

六、其它用法

这部分介绍了两个MATLAB函数,用于读取和写入LIBSVM格式的文件:

  1. libsvmread函数:

    • 功能:该函数用于读取LIBSVM格式的文件
    • 调用方式:[label_vector, instance_matrix] = libsvmread('data.txt');
    • 输出:
      • label_vector:标签向量,包含文件中的标签信息。
      • instance_matrix:实例矩阵,包含文件中的实例数据。
    • 用途:这两个输出可以作为svmtrain或svmpredict函数的输入,用于支持向量机的训练和预测。
  2. libsvmwrite函数:

    • 功能:该函数用于将MATLAB矩阵写入LIBSVM格式的文件。
    • 调用方式:libsvmwrite('data.txt', label_vector, instance_matrix);
    • 输入:
      • data.txt:输出文件的名称。
      • label_vector:标签向量,包含要写入文件的标签信息。
      • instance_matrix:实例矩阵,包含要写入文件的实例数据。
    • 要求:instance_matrix必须是一个稀疏矩阵,且其数据类型必须为double。
    • 注意:对于32位和64位Windows上的MATLAB,预先构建的二进制文件已经准备好,存储在..\windows目录下。然而,在将来的发布版本中,将只包含64位MATLAB的二进制文件。

七、示例

1. 在提供的数据集文件 heart_scale 上进行训练模型和预测结果:

2.概率的评估,需要在训练和测试过程中添加参数 '-b 1' :

3.演示了如何在MATLAB中使用LIBSVM进行支持向量机的训练和测试,比较了线性核和预先计算的核在测试集上的准确度

1. 数据读取和拆分:

  • 通过libsvmread函数读取心脏数据集(heart_scale)
  • 将数据集分为150个训练数据和120个测试数据

 [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');

 train_data = heart_scale_inst(1:150,:);

 train_label = heart_scale_label(1:150,:);

 test_data = heart_scale_inst(151:270,:);

 test_label = heart_scale_label(151:270,:);

2. 线性核训练和测试:

  • 使用 svmtrain 函数采用线性核训练模型
  • 使用 svmpredict 函数进行测试,得到预测标签、准确度和决策值 

 model_linear = svmtrain(train_label, train_data, '-t 0');  

 [predict_label_L, accuracy_L, dec_values_L] = svmpredict(test_label,

 test_data, model_linear);

3. 预先计算的核训练和测试:

  •  使用 svmtrain 函数,指定'-t 4'以使用预先计算的核,其中训练数据的核矩阵由[(1:150)', train_data*train_data']给出
  • 使用 svmpredict 函数进行测试,得到预测标签、准确度和决策值   

 model_precomputed = svmtrain(train_label, 

    [(1:150)',train_data*train_data'], '-t 4');

 [predict_label_P, accuracy_P, dec_values_P] = svmpredict(test_label, 

 [(1:120)', test_data*train_data'], model_precomputed);

 4. 准确度显示:

  • 显示使用线性核和预先计算的核进行测试的准确度

  disp('Accuracy using linear kernel:');

  disp(accuracy_L);

  disp('Accuracy using  precomputed kernel:');

  disp(accuracy_P);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值