利用MATLAB实现SVM分类

利用MATLAB实现SVM分类

%% LibSVM
clc;clear;close all;
%% 加载文件
[Iris1,Iris2,Iris3,Iris4,IrisClass]=textread('iris.data','%f%f%f%f%s','delimiter',','); 
Wine=load('wine.data'); % 仅读数字
Abalone=importdata('abalone.data');%既可以读取数据又可以读取字符
%% 数据预处理
% Iris数据预处理
Iris_all=[Iris1,Iris2,Iris3,Iris4];
Iris_class = zeros(1, 150);
for i = 1: size(IrisClass,1)
             if (strcmp(IrisClass(i), 'Iris-setosa' ))
               Iris_class(1,i) = 1;     
            elseif(strcmp(IrisClass(i), 'Iris-versicolor') )
               Iris_class(1,i) = 2;
            else
               Iris_class(1,i) = 3;  
             end 
end
Iris_class=Iris_class(:);
%------数据类别放在第一列-----%
Iris=[Iris_class Iris_all];
% Wine数据预处理
Wine_class=Wine(:,1);
Wine_data=Wine(:,2:14);
% Abalone数据预处理
Abalone_gendar = zeros(1, 4177);
for i = 1: size(Abalone.textdata,1)
             if (strcmp(Abalone.textdata(i), 'F' ))
               Abalone_gendar(1,i) = 1;     
            elseif(strcmp(Abalone.textdata(i), 'M') )
               Abalone_gendar(1,i) = 2;
            else
               Abalone_gendar(1,i) = 3;  
             end 
end
Abalone_gendar = Abalone_gendar(:);
Abalone_Data=Abalone.data(:,1:8);
Abalone_class=Abalone_gendar;
Abalone_all=[Abalone_class Abalone_Data];
% 分割部分
times=2;
%% -----Iris样本的选取-----
% 随机选取
Data = Iris;%创建随机矩阵样本
indices = crossvalind('Kfold', size(Data,1), times);%将数据样本随机分割为3部分
for i = 1:times %循环3次,分别取出第i部分作为测试样本,其余两部分作为训练样本
    test = (indices == i);
    train = ~test;
    trainData = Data(train, :);
    testData = Data(test, :);
end
train_1=trainData(:,2:5);
train_label=trainData(:,1);
test_1=testData(:,2:5);
test_label=testData(:,1);
% 分类选取(先分类再随机再组合)
Data = Iris;%创建随机矩阵样本
% 第一类数据
Iris_Index1=logical(Iris(:,1)==1);
Iris_class1=Data(Iris_Index1==1,:);
indices = crossvalind('Kfold', size(Iris_class1,1), times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData1 = Iris_class1(train, :);
    testData1 = Iris_class1(test, :);
end
% 第二类数据
Iris_Index2=logical(Iris(:,1)==2);
Iris_class2=Data(Iris_Index2==1,:);
indices = crossvalind('Kfold', size(Iris_class2,1), times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData2 = Iris_class2(train, :);
    testData2 = Iris_class2(test, :);
end
% 第三类数据
Iris_Index3=logical(Iris(:,1)==3);
Iris_class3=Data(Iris_Index3==1,:);
indices = crossvalind('Kfold', size(Iris_class3,1), times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData3 = Iris_class3(train, :);
    testData3 = Iris_class3(test, :);
end
trainData_all=[trainData1;trainData2;trainData3];
testData_all=[testData1;testData2;testData3];
train_cross=trainData_all(:,2:5);
train_label_cross=trainData_all(:,1);
test_cross=testData_all(:,2:5);
test_label_cross=testData_all(:,1);
%% -------Wine样本的选取------
% 随机选取
times=10;
Data = Wine;%创建随机矩阵样本
indices = crossvalind('Kfold', size(Data,1), times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData = Data(train, :);
    testData = Data(test, :);
end
train_1=trainData(:,2:14);
train_label=trainData(:,1);
test_1=testData(:,2:14);
test_label=testData(:,1);
% 分类选取(先分类再随机再组合)
Data = Wine;%创建随机矩阵样本
% 第一类数据
Wine_Index1=logical(Wine(:,1)==1);
Wine_class1=Data(Wine_Index1==1,:);
indices = crossvalind('Kfold', size(Wine_class1,1), times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData1 = Wine_class1(train, :);
    testData1 = Wine_class1(test, :);
end
% 第二类数据
Wine_Index2=logical(Wine(:,1)==2);
Wine_class2=Data(Wine_Index2==1,:);
indices = crossvalind('Kfold', size(Wine_class2,1), times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData2 = Wine_class2(train, :);
    testData2 = Wine_class2(test, :);
end
% 第三类数据
Wine_Index3=logical(Wine(:,1)==3);
Wine_class3=Data(Wine_Index3==1,:);
indices = crossvalind('Kfold', size(Wine_class3,1), times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData3 = Wine_class3(train, :);
    testData3 = Wine_class3(test, :);
end
trainData_all=[trainData1;trainData2;trainData3];
testData_all=[testData1;testData2;testData3];
train_cross=trainData_all(:,2:14);
train_label_cross=trainData_all(:,1);
test_cross=testData_all(:,2:14);
test_label_cross=testData_all(:,1);
% 训练
% 随机分类训练
cmd1 =['-t  1']; %线性核函数
cmd2 =['-t  1 –c  100']; %线性核函数
model = svmtrain(train_label, train_1, cmd2);
svmpredict(test_label,test_1,model);
% 按类别随机分类训练
cmd1 =['-t  1']; %线性核函数
cmd2 =['-t  1 –c  100']; %线性核函数
model = svmtrain(train_label_cross, train_cross, cmd1);
svmpredict(test_label_cross,test_cross,model);
% 换核函数
cmd1 =['-t  1']; %线性核函数
cmd2 =['-t  1 –c  100']; %线性核函数
model = svmtrain(train_label_cross, train_cross, cmd2);
svmpredict(test_label_cross,test_cross,model);
%% -----Abalone样本的选取-----
% 对于分布不均匀样本的随机选取方法
% 随机选取
times=10;
Data = Abalone_all;%创建随机矩阵样本
indices = crossvalind('Kfold', size(Data,1), times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData = Data(train, :);
    testData = Data(test, :);
end
train_1=trainData(:,2:9);
train_label=trainData(:,1);
test_1=testData(:,2:9);
test_label=testData(:,1);
% 分类选取(先分类再随机再组合)
Data = Abalone_all;%创建随机矩阵样本
% 第一类数据
Abalone_Index1=logical(Abalone_all(:,1)==1);
Abalone_class1=Data(Abalone_Index1==1,:);
indices = crossvalind('Kfold', size(Abalone_class1,1),times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData1 = Abalone_class1(train, :);
    testData1 = Abalone_class1(test, :);
end
% 第二类数据
Abalone_Index2=logical(Abalone_all(:,1)==2);
Abalone_class2=Data(Abalone_Index2==1,:);
indices = crossvalind('Kfold', size(Abalone_class2,1), times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData2 = Abalone_class2(train, :);
    testData2 = Abalone_class2(test, :);
end
% 第三类数据
Abalone_Index3=logical(Abalone_all(:,1)==3);
Abalone_class3=Data(Abalone_Index3==1,:);
indices = crossvalind('Kfold', size(Abalone_class3,1), times);
for i = 1:times 
    test = (indices == i);
    train = ~test;
    trainData3 = Abalone_class3(train, :);
    testData3 = Abalone_class3(test, :);
end
trainData_all=[trainData1;trainData2;trainData3];
testData_all=[testData1;testData2;testData3];
train_cross=trainData_all(:,2:9);
train_label_cross=trainData_all(:,1);
test_cross=testData_all(:,2:9);
test_label_cross=testData_all(:,1);
% % 随机分类训练
% cmd1 =['-t  1']; %线性核函数
% cmd2 =['-t  1 –c  100']; %线性核函数
% model = svmtrain(train_label, train_1, cmd1);
% svmpredict(test_label,test_1,model);
% 按类别随机分类训练
cmd1 =['-t  1']; %线性核函数
cmd2 =['-t  1 –c  100']; %线性核函数
model = svmtrain(train_label_cross, train_cross, cmd1);
svmpredict(test_label_cross,test_cross,model);
% 按类别随机分类训练
cmd1 =['-t  1']; %线性核函数
cmd2 =['-t  1 –c  100']; %线性核函数
model = svmtrain(train_label_cross, train_cross, cmd2);
svmpredict(test_label_cross,test_cross,model);
%% 训练
% 随机分类训练
cmd1 =['-t  1']; %线性核函数
cmd2 =['-t  1 –c  100']; %线性核函数
model = svmtrain(train_label, train_1, cmd1);
svmpredict(test_label,test_1,model);
% 按类别随机分类训练
cmd1 =['-t  1']; %线性核函数
cmd2 =['-t  1 –c  100']; %线性核函数
model = svmtrain(train_label_cross, train_cross, cmd1);
svmpredict(test_label_cross,test_cross,model);

%% 换样本进行操作



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值