支持向量机matlab实例的教材,[转载]关于支持向量机(SVM)的一个简单应用实例及matlab代码...

********************************************************

*********************************************************

一次模式识别课中的关于SVM用法的一个简单的实例(训练集和测试集简单的划分):

一、实验目的

1.掌握支持向量机(SVM)的原理、核函数类型选择以及核参数选择原则等;

2.熟悉基于libSVM二分类的一般流程与方法;

二、实验内容

1.对“bedroom, forest”两组数据进行分类(二分类);

2.得到试验分类准确率;

1.LibSVM软件包,3.17版本;

2. Matlab 2013a。

(1) 试验流程:

Step1: 根据给定的数据,选定训练集和测试集;

Step2: 为训练集与测试集选定标签集;

Step3: 利用训练集进行训练分类器得到model;

Step4: 根据model,对测试集进行测试集得到accuracy rate;

(2) 实验数据准备:

“bedroom.mat”10*15的矩阵,分别代表了不同的十张有关于bedroom的图片的15维属性;

“forest.mat”10*15矩阵,分别代表了不同的十张有关于forest的图片的15维属性特征;

训练集:trainset(); 分别取bedroom(1:5,:)和forse(1:5,:)作为训练集;

测试集:testset(); 分别取bedroom(6:10,:)和forse(6:10,:)作为测试集;

标签集:label(); 取bedroom的数据为正类标签为1;forse的数据为负类标签为-1.

(3) Matlab程序与实验结果:

附录:matlab代码

%% SVM数据分类预测---作业数据

%

%

%*****write by Taozhang 2014.04.16

%%

clear all;

clc;

%%

% 作业中提供的数据已做整理,不在单独导入;

%%

dataset是将bedroom和forest合并;dataset =

[bedroom;forset];这行代码可以实现合并

load

dataset.mat %导入要分类的数据集

load

labelset.mat %导入分类集标签集

% 选定训练集和测试集

% 将第一类的1-5,第二类的11-15做为训练集

train_set = [dataset(1:5,:);dataset(11:15,:)];

% 相应的训练集的标签也要分离出来

train_set_labels =

[lableset(1:5);lableset(11:15)];

% 将第一类的6-10,第二类的16-20,做为测试集

test_set = [dataset(6:10,:);dataset(16:20,:)];

% 相应的测试集的标签也要分离出来

test_set_labels =

[lableset(6:10);lableset(16:20)];

% 数据预处理,将训练集和测试集归一化到[0,1]区间

[mtrain,ntrain] = size(train_set);

[mtest,ntest] = size(test_set);

test_dataset = [train_set;test_set];

% mapminmax为MATLAB自带的归一化函数

[dataset_scale,ps] =

mapminmax(test_dataset',0,1);

dataset_scale = dataset_scale';

train_set = dataset_scale(1:mtrain,:);

test_set = dataset_scale(

(mtrain+1):(mtrain+mtest),: );

%% SVM网络训练

model = svmtrain(train_set_labels, train_set, '-s 2

-c 1 -g 0.07');

%% SVM网络预测

[predict_label] = svmpredict(test_set_labels,

test_set, model);

%% 结果分析

% 测试集的实际分类和预测分类图

% 通过图可以看出只有一个测试样本是被错分的

figure;

hold on;

plot(test_set_labels,'o');

plot(predict_label,'r*');

xlabel('测试集样本','FontSize',12);

ylabel('类别标签','FontSize',12);

legend('实际测试集分类','预测测试集分类');

title('测试集的实际分类和预测分类图','FontSize',12);

grid on;

程序运行结果:

optimization finished, #iter = 5

nu = 0.643949

obj = -4.304693, rho = -0.008725

nSV = 8, nBSV = 6

Total nSV = 8

Accuracy = 100% (10/10) (classification)

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单支持向量机SVM)的应用实例,用于预测电机故障。这个实例使用matlab进行实现。 首先,我们需要准备数据。这个实例使用的数据集包含100个样本,每个样本有3个特征(即3个输入变量),并且有两个类别(好/坏)。我们将数据集分为训练集和测试集,其中70%的数据用于训练,30%的数据用于测试。 ```matlab % 准备数据 data = load('motor_fault_data.mat'); X = data.X; y = data.y; % 划分训练集和测试集 [trainInd,testInd] = dividerand(size(X,1),0.7,0.3); Xtrain = X(trainInd,:); ytrain = y(trainInd,:); Xtest = X(testInd,:); ytest = y(testInd,:); ``` 接下来,我们使用matlab内置的fitcsvm函数来训练一个SVM模型。这个函数支持多种不同类型的核函数,例如线性核、多项式核和径向基函数(RBF)核。在这个实例中,我们使用RBF核函数。 ```matlab % 训练SVM模型 svm = fitcsvm(Xtrain,ytrain,'KernelFunction','RBF'); ``` 训练完成后,我们可以使用predict函数来对测试集进行预测,并计算出模型的准确率。 ```matlab % 使用SVM模型进行预测 ypred = predict(svm,Xtest); % 计算准确率 accuracy = sum(ypred == ytest)/length(ytest); fprintf('Accuracy: %f\n',accuracy); ``` 最后,我们可以将模型的决策边界可视化,以便更好地理解模型是如何进行分类的。 ```matlab % 绘制决策边界 figure; svmplot(svm,Xtrain,ytrain); hold on; scatter(Xtest(:,1),Xtest(:,2),[],ytest); title('SVM Decision Boundary'); ``` 完整的matlab代码如下: ```matlab % 准备数据 data = load('motor_fault_data.mat'); X = data.X; y = data.y; % 划分训练集和测试集 [trainInd,testInd] = dividerand(size(X,1),0.7,0.3); Xtrain = X(trainInd,:); ytrain = y(trainInd,:); Xtest = X(testInd,:); ytest = y(testInd,:); % 训练SVM模型 svm = fitcsvm(Xtrain,ytrain,'KernelFunction','RBF'); % 使用SVM模型进行预测 ypred = predict(svm,Xtest); % 计算准确率 accuracy = sum(ypred == ytest)/length(ytest); fprintf('Accuracy: %f\n',accuracy); % 绘制决策边界 figure; svmplot(svm,Xtrain,ytrain); hold on; scatter(Xtest(:,1),Xtest(:,2),[],ytest); title('SVM Decision Boundary'); ``` 注意,这个实例只是一个简单SVM应用示例,实际应用中,我们需要更多的特征和更多的数据来训练一个更准确的模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值