• 大小: 6KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-04-27
  • 语言: Matlab
  • 标签: TWSVM  MATLAB  

资源简介

借助(线性)孪生支持向量机对二分类问题的求解程序。

资源截图

代码片段和文件信息

% 支持向量机Matlab工具箱C-SVC 孪生线性核函数二类分类算法
% 使用平台 - Matlab7.12


close all
clear
clc

load N_p   % 正类点数据,特征信息存放在列里面
load N_n   % 负类点数据,特征信息存放在列里面

 
%% 第一步:数据预处理
% 由原来的数据产生80%的训练数据和20%的预测数据
n_p=size(N_p2);
n_n=size(N_n2);
n1=randperm(n_p);      % 对1到n的n个正整数进行随机不重复的排列,形成一个1行n列的矩阵
n1=n1‘;
n2=randperm(n_n);
n2=n2‘;
f_p=floor(4*n_p/5);    % 取80%的数据作为训练集,其余20%作为预测集
f_n=floor(4*n_n/5); 
data_train_p=N_p(:n1(1:f_p));                  % 正类训练数据
data_train_n=N_n(:n2(1:f_n));                  % 负类训练数据
data_train=[data_train_pdata_train_n];         % 训练数据集(含正负类)
Y_train=[ones(1f_p)-ones(1f_n)];             % 训练数据标签集 

data_predict_p=N_p(:n1(f_p+1:end));            % 正类预测数据
data_predict_n=N_n(:n2(f_n+1:end));            % 负类预测数据
data_predict=[data_predict_pdata_predict_n];   % 预测数据集(含正负类)
Y_predict=[ones(1n_p-f_p)-ones(1n_n-f_n)];   % 预测数据标签集 

% 相关参数初始化
bestAccuracy=0;
k=0;
c1min=-2;
c1max=2;
c2min=-2;
c2max=2;
aac=rand(101);
best_c1=0;best_c2=0;
data_train=data_train‘;
Y_train=Y_train‘;


%% 第二步:数据训练寻找最优参数c1c2
%  将c1和c2划分网格进行搜索
indices = crossvalind(‘Kfold‘Y_train10);    
tic;
for c1=2^(c1min):1:2^(c1max)
    for c2=2^(c2min):1:2^(c2max)
        %采用K-CV方法将data大致平均分为K组
        for run= 1:10
            test=(indices == run); train=~test; 
            
            train_data=data_train(train:);            % 训练数据集(含正类负类点集) 数据信息全在行里面         
            train_data_label=Y_train(train:);         % 训练集标签(含正类负类点集) 数据信息全在行里面
            
            test_data=data_train(test:);              % 预测数据集(含正类负类点集) 数据信息全在行里面
            test_data_label=Y_train(test:);           % 预测集标签(含正类负类点集) 数据信息全在行里面
            
            groupA=ismember(train_data_label1);       % 分出正类点的位置            数据信息全在行里面
            groupB=ismember(train_data_label-1);      % 分出正类点的位置            数据信息全在行里面
       % 关于ismember函数的具体用法,使用help ismember可以进一步了解
       
            A=train_data(groupA:);                    % 正类训练数据                数据信息全在行里面
            B=train_data(groupB:);   
            %用模糊支持向量机训练数据
            [v1v2]=twinsvm_lin_train(ABc1c2);      
             %下面用验证集进行验证并记录此时的准确率
            row=size(test_data1);
            result=rand(row1);
            test_data1=[test_dataones(row1)];
            distance1=abs(test_data1*v1);
            distance2=abs(test_data1*v2);
            test_distance=min(distance1distance2);
            for run1=1:row
                if test_distance(run1)==distance1(run1)
                    result(run1)=1;
                else
                    result(run1)=-1;
                end
            end
          for run1=1:row
              if test_data_label(run1)==result(run1)
                  k=k+1;
              end
          end
          aac(run)=k/row;
          k=0;
        end
        cv=sum(aac)/10;
        if (cv>bestAccuracy)
            bestAccuracy=cv;
            best_c1=c1;
            best_c2=c2;
        e

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1780  2012-05-10 20:37  N_p.mat

     文件       1290  2012-07-23 14:28  twinsvm_lin_train.m

     文件       5550  2012-09-03 17:56  lin_main.m

     文件       1782  2012-05-10 20:36  N_n.mat

----------- ---------  ---------- -----  ----

                10402                    4


评论

共有 条评论