• 大小: 2KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: Matlab
  • 标签: libsvm  多分类  

资源简介

这是多分类的算法,采用一对一的方法,且SVM是利用libsvm工具箱的libtrain和libpredict函数,适合多分类的方法,也可已将这种方法用到别的算法中去

资源截图

代码片段和文件信息

 
 
 %% Load data
% * 数据预处理--分两类情况
data = load(‘Iris.txt‘);
%data = data.data;
%选择训练样本个数
num_train = 110;
%构造随机选择序列
%length函数:数组长度,即行数和列数中的较大值
%choose = randperm(length(data);
 A=size(data1);
choose=randperm(A);%产生所有样本的随机序列A*1


train_data = data(choose(1:num_train):);%随机分配的训练集
%gscatter函数可以按分类或分组来画离散点,适用于画多个类别的离散样本分布图
%函数中,x和y是向量,是该点的x轴和y轴坐标,因为画在二维平面上,所以,如果是多维数据,只能从中选取两特征作为x,y坐标来代表点
%或者使用特定的降维投影函数来得到x,y。?group是类别标志或分组向量
%gscatter(train_data(:1)train_data(:2));
label_train = train_data(:end);
test_data = data(choose(num_train+1:end):);
label_test = test_data(:end);
%% svm的构建与训练
% 第二种SVM多分类的方法 一对一 总共有(n*n-1)/2个分类器 ,最终让测试样本遍历所有的分类器,投票决定
  num = 0;
for i = 1:3-1 %3类
    %n*n-1)/2个分类器 这个训练模型是三分类的模型
    for j = i+1:3
        num = num + 1;
        %重新归类 在训练标签中确定分别表示的两类标签
        index1 = find(label_train == i);
        index2 = find(label_train == j);
        %生成一个训练样本数量*1的一个向量
        label_temp = zeros((length(index1)+length(index2))1);
        %svm需要将分类标签设置为1与-1
        label_temp(1:length(index1)) = 1;
        label_temp(length(index1)

评论

共有 条评论