关于支持向量机的分类识别问题 。

得到多个样本的多个特征量以后,想利用SVM构建一个分类的库,当我再输入一个样本的时候,SVM会输出一个识别结果(两类的分类问题),请问应该怎么做?最好有小例程学习一下,感谢!

 Respuesta aceptada

getaso
getaso el 22 de Nov. de 2022

0 votos

%% Generate Data
%这里不多解释,总之要自己按下面的要求构造训练集和测试集。
% class 0
r = sqrt(rand(200,1)); % radius
t = 2*pi*rand(200,1); % angle
data1 = [r.*cos(t), r.*sin(t)]; % points
% class 1
r2 = sqrt(3*rand(200,1)+1); % radius
t2 = 2*pi*rand(200,1); % angle
data2 = [r2.*cos(t2), r2.*sin(t2)]; % points
% Combine to Training set and Testing set
trnSet = [data1(1:100, :); data2(1:100, :)];
trnClass = ones(200,1);
trnClass(1:100) = -1;
tstSet = [data1(101:end, :); data2(101:end, :)];
tstClass = ones(200,1);
tstClass(1:100) = -1;
%% Train SVM
% trnSet: 训练集样本,是N*D的矩阵,N代表样本个数,D代表样本的维度
% trnClass: 训练集类别,是N*1的矩阵,其中的每个元素都是1或-1,代表两种不同的类别
% 这里演示用RBF核,这是实践中最常用的做法。
% 'boxconstraint'参数是SVM的惩罚系数。一般是按[..., 0.1, 1, 10, ...] 这样的规律调节尝试
% 得到的cl就是分类器,不要动它。
cl = svmtrain(trnSet,trnClass,'Kernel_Function','rbf', ...
    'boxconstraint',1);
% Test
% cl就是前面训练得到的分类器
% trnSet: 测试集样本,是M*D的矩阵,M代表样本个数,D代表样本的维度
% tstClass1:分类器对测试集类别的预测,是N*1的矩阵,其中的每个元素都是1或-1,代表两种不同的类别
tstClass1 = svmclassify(cl, tstSet);
% tstClass: 测试集类别的真实值,与tstClass1相比较就可以得到准确率
% 真正实用的时候可能没有tstClass。因此就没有这一步。但作为研究,还是要加这步验证的。
acc = sum(tstClass==tstClass1)/200

Más respuestas (0)

Etiquetas

Preguntada:

el 22 de Nov. de 2022

Respondida:

el 22 de Nov. de 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!