SVMtoy

[label_matrix, instance_matrix] = libsvmread(‘ex8b.txt‘);
options = ‘‘;
%  contour_level = [-1 0 1];
contour_level = [-0.2  0.2 1 2];

% function svmtoy(label_matrix, instance_matrix, options, contour_level)
%% svmtoy(label_matrix, instance_matrix, options, contour_level)
%% label_matrix: N by 1, has to be two-class
%% instance_matrix: N by 2
%% options: default ‘‘,
%%          see libsvm-mat-8 README, has to be a classification formulation.
%% contour_level: default [0 0],
%%                change to [-1 0 1] for showing the +/- 1 margin.
%%
%% svmtoy shows the two-class classification boundary of the 2-D data
%% based on libsvm-mat-2.8
%%
%% Hsuan-Tien Lin, htlin at caltech.edu, 2006/04/07

% if nargin <= 1
%   instance_matrix = [];
% elseif nargin == 2
%   options = ‘‘
% end
%
% if nargin <= 3
%   contour_level = [-1 0 1];
% end

N = size(label_matrix, 1);
if N <= 0
  fprintf(2, ‘number of data should be positive\n‘);
  return;
end

if size(label_matrix, 2) ~= 1
  fprintf(2, ‘the label matrix should have only one column\n‘);
  return;
end

if size(instance_matrix, 1) ~= N
  fprintf(2, [‘the label and instance matrices should have the same ‘ ...
              ‘number of rows\n‘]);
  return;
end

if size(instance_matrix, 2) ~= 2
  fprintf(2, ‘svmtoy only works for 2-D data\n‘);
  return;
end

mdl = svmtrain(label_matrix, instance_matrix, options);

nclass = mdl.nr_class;
svmtype = mdl.Parameters(1);

if nclass ~= 2 || svmtype >= 2
  fprintf(2, [‘cannot plot the decision boundary for these ‘ ...
              ‘SVM problems\n‘]);
  return
end

minX = min(instance_matrix(:, 1));
maxX = max(instance_matrix(:, 1));
minY = min(instance_matrix(:, 2));
maxY = max(instance_matrix(:, 2));

gridX = (maxX - minX) ./ 100;
gridY = (maxY - minY) ./ 100;

minX = minX - 10 * gridX;
maxX = maxX + 10 * gridX;
minY = minY - 10 * gridY;
maxY = maxY + 10 * gridY;

[bigX, bigY] = meshgrid(minX:gridX:maxX, minY:gridY:maxY);

mdl.Parameters(1) = 3; % the trick to get the decision values
ntest=size(bigX, 1) * size(bigX, 2);
instance_test=[reshape(bigX, ntest, 1), reshape(bigY, ntest, 1)];
label_test = zeros(size(instance_test, 1), 1);

[Z]= svmpredict(label_test, instance_test, mdl);

bigZ = reshape(Z, size(bigX, 1), size(bigX, 2));

clf;
hold on;

ispos = (label_matrix == label_matrix(1));
pos = find(ispos);
neg = find(~ispos);

plot(instance_matrix(pos, 1), instance_matrix(pos, 2), ‘o‘);
plot(instance_matrix(neg, 1), instance_matrix(neg, 2), ‘x‘);

contour(bigX, bigY, bigZ, contour_level);

title(options);

  

时间: 2024-10-21 18:49:29

SVMtoy的相关文章

LIBSVM之一

libSVM简单的介绍 libSVM是台湾林智仁(Chih-Jen Lin) 教授2001年开发的一套支持向量机库,这套库运算速度挺快,可以很方便的对数据做分类或回归.由于libSVM程序小,运用灵活,输入参数少,并且是开源的,易于扩展,因此成为目前国内应用最多的SVM的库. 其中包含的文件夹的主要的作用 (1)Java文件夹  ,主要应用于java平台: (2)Python文件夹,是用来参数优选的工具,稍后介绍: (3)tools文件夹,主要包含四个python文件,用来数据集抽样(subse

libSVM介绍(二)

鉴于libSVM中的readme文件有点长,并且,都是採用英文书写,这里,我把当中重要的内容提炼出来,并给出对应的样例来说明其使用方法,大家能够直接參考我的代码来调用libSVM库. 第一部分,利用libSVM自带的简易工具来演示SVM的两类分类过程.(下面内容仅仅是利用libSVM自带的一个简易的工具供大家更好的理解SVM,假设你对SVM已经有了一定的了解,能够直接跳过这部分内容) 首先,你要了解的是libSVM仅仅是众多SVM实现版本号中的当中之中的一个.而SVM是一种进行两类分类的分类器,

libsvm

所有关于libsvm2.9的前期工作准备好以后,就必须考虑将自己的数据转换为libsvm对应的格式来做分类验证的问题 训练与测试数据文件的格式如下所示 <label> <index1>:<value1> <index2>:<value2>… . . . 每行包含一个实例,并且以字符’\n’结束.对于分类来讲,<label>是整型数据,表示类别(支持多分类).对于回归来 讲,<label>是任意实数(浮点数),表示目标值.o

支持向量机用法

1.文件中数据格式 label index1:value1 index2:value2 ... Label在分类中表示类别标识,在预测中表示对应的目标值 Index表示特征的序号,一般从1开始,依次增大 Value表示每个特征的值 例如: 3 1:0.122000 2:0.792000 3 1:0.144000 2:0.750000 3 1:0.194000 2:0.658000 3 1:0.244000 2:0.540000 3 1:0.328000 2:0.404000 3 1:0.4020

使用libsvm对MNIST数据集进行实验---浅显易懂!

原文:http://blog.csdn.net/arthur503/article/details/19974057 在学SVM中的实验环节,老师介绍了libsvm的使用.当时看完之后感觉简单的说不出话来. 1. libsvm介绍 虽然原理要求很高的数学知识等,但是libsvm中,完全就是一个工具包,拿来就能用.当时问了好几遍老师,公司里做svm就是这么简单的?敲几个命令行就可以了...貌似是这样的.当然,在大数据化的背景下,还会有比如:并行SVM.多核函数SVM等情况的研究和应用. 实验环节老

SVM训练结果参数说明 训练参数说明 归一化加快速度和提升准确率 归一化还原

原文:http://blog.sina.com.cn/s/blog_57a1cae80101bit5.html 举例说明 svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 -d 3 data_file 训练一个由多项式核(u'v+1)^3和C=1000组成的分类器. svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file 在RBF核函数exp(-0.5|u-v|^2)和终止允许限0.00001的条件下,训练一个?-SV

LibSVM使用指南

LibSVM使用指南 本文包含以下几个部分: 支持向量机--SVM简介 LibSVM的安装 LibSVM的使用 LibSVM参数调优 Java版LibSVM库函数的调用 SVM简介 在进行下面的内容时我们认为你已经具备了数据挖掘的基础知识. SVM是新近出现的强大的数据挖掘工具,它在文本分类.手写文字识别.图像分类.生物序列分析等实际应用中表现出非常好的性能.SVM属于监督学习算法,样本以属性向量的形式提供,所以输入空间是Rn的子集. 如图1所示,SVM的目标是找到两个间距尽可能大的边界平面来把

LibSVM学习

原文:http://blog.csdn.net/passball/article/details/7673725 代码文件主要针对Matlab进行说明,但个人仍觉得讲解的支持向量机内容非常棒,可以做为理解这一统计方法的辅助资料; LibSVM是台湾林智仁(Chih-Jen Lin)教授2001年开发的一套支持向量机的库,这套库运算速度还是挺快的,可以很方便的对数据做分类或回归.由于libSVM程序小,运用灵活,输入参数少,并且是开源的,易于扩展,因此成为目前国内应用最多的SVM的库. 这套库可以

libsvm-3.21使用文档

Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. (可用于分类和回归) It solves C-SVM classification, nu-SVM classification, one-class-SVM, epsilon-SVM regression, and nu-SVM regression. It also provides an automat