資源簡(jiǎn)介
借助(線性)孿生支持向量機(jī)對(duì)二分類問(wèn)題的求解程序。
代碼片段和文件信息
%?支持向量機(jī)Matlab工具箱C-SVC?孿生線性核函數(shù)二類分類算法
%?使用平臺(tái)?-?Matlab7.12
close?all
clear
clc
load?N_p???%?正類點(diǎn)數(shù)據(jù),特征信息存放在列里面
load?N_n???%?負(fù)類點(diǎn)數(shù)據(jù),特征信息存放在列里面
?
%%?第一步:數(shù)據(jù)預(yù)處理
%?由原來(lái)的數(shù)據(jù)產(chǎn)生80%的訓(xùn)練數(shù)據(jù)和20%的預(yù)測(cè)數(shù)據(jù)
n_p=size(N_p2);
n_n=size(N_n2);
n1=randperm(n_p);??????%?對(duì)1到n的n個(gè)正整數(shù)進(jìn)行隨機(jī)不重復(fù)的排列,形成一個(gè)1行n列的矩陣
n1=n1‘;
n2=randperm(n_n);
n2=n2‘;
f_p=floor(4*n_p/5);????%?取80%的數(shù)據(jù)作為訓(xùn)練集,其余20%作為預(yù)測(cè)集
f_n=floor(4*n_n/5);?
data_train_p=N_p(:n1(1:f_p));??????????????????%?正類訓(xùn)練數(shù)據(jù)
data_train_n=N_n(:n2(1:f_n));??????????????????%?負(fù)類訓(xùn)練數(shù)據(jù)
data_train=[data_train_pdata_train_n];?????????%?訓(xùn)練數(shù)據(jù)集(含正負(fù)類)
Y_train=[ones(1f_p)-ones(1f_n)];?????????????%?訓(xùn)練數(shù)據(jù)標(biāo)簽集?
data_predict_p=N_p(:n1(f_p+1:end));????????????%?正類預(yù)測(cè)數(shù)據(jù)
data_predict_n=N_n(:n2(f_n+1:end));????????????%?負(fù)類預(yù)測(cè)數(shù)據(jù)
data_predict=[data_predict_pdata_predict_n];???%?預(yù)測(cè)數(shù)據(jù)集(含正負(fù)類)
Y_predict=[ones(1n_p-f_p)-ones(1n_n-f_n)];???%?預(yù)測(cè)數(shù)據(jù)標(biāo)簽集?
%?相關(guān)參數(shù)初始化
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‘;
%%?第二步:數(shù)據(jù)訓(xùn)練尋找最優(yōu)參數(shù)c1c2
%??將c1和c2劃分網(wǎng)格進(jìn)行搜索
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:);????????????%?訓(xùn)練數(shù)據(jù)集(含正類負(fù)類點(diǎn)集)?數(shù)據(jù)信息全在行里面?????????
????????????train_data_label=Y_train(train:);?????????%?訓(xùn)練集標(biāo)簽(含正類負(fù)類點(diǎn)集)?數(shù)據(jù)信息全在行里面
????????????
????????????test_data=data_train(test:);??????????????%?預(yù)測(cè)數(shù)據(jù)集(含正類負(fù)類點(diǎn)集)?數(shù)據(jù)信息全在行里面
????????????test_data_label=Y_train(test:);???????????%?預(yù)測(cè)集標(biāo)簽(含正類負(fù)類點(diǎn)集)?數(shù)據(jù)信息全在行里面
????????????
????????????groupA=ismember(train_data_label1);???????%?分出正類點(diǎn)的位置????????????數(shù)據(jù)信息全在行里面
????????????groupB=ismember(train_data_label-1);??????%?分出正類點(diǎn)的位置????????????數(shù)據(jù)信息全在行里面
???????%?關(guān)于ismember函數(shù)的具體用法,使用help?ismember可以進(jìn)一步了解
???????
????????????A=train_data(groupA:);????????????????????%?正類訓(xùn)練數(shù)據(jù)????????????????數(shù)據(jù)信息全在行里面
????????????B=train_data(groupB:);???
????????????%用模糊支持向量機(jī)訓(xùn)練數(shù)據(jù)
????????????[v1v2]=twinsvm_lin_train(ABc1c2);??????
?????????????%下面用驗(yàn)證集進(jìn)行驗(yàn)證并記錄此時(shí)的準(zhǔn)確率
????????????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
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????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
評(píng)論
共有 條評(píng)論