資源簡(jiǎn)介
內(nèi)含貝葉斯的代碼,10次10折貝葉斯的代碼,直接使用即可,還用相應(yīng)的數(shù)據(jù)集樣本,都可直接使用不需要修改。

代碼片段和文件信息
clear;
clc;
ex=importdata(‘test.txt‘);??%讀入文件
X=ex.data;
[mn]=size(ex.textdata);??%數(shù)據(jù)大小
Y=zeros(m);
for?i=1:m
????if?strcmp(ex.textdata(i)‘L‘)==1
????????Y(i)=1;
????elseif?strcmp(ex.textdata(i)‘B‘)==1
????????Y(i)=2;
????else?Y(i)=3;
????end
end
%樸素貝葉斯算法實(shí)現(xiàn)分類問題(三類y=1y=2y=3)
%我們把所有數(shù)字序號(hào)末尾為1的留作測(cè)試集,其他未訓(xùn)練集
%?m=625;???%樣本總數(shù)
%?m1=562;??%訓(xùn)練集樣本數(shù)量
%?m2=63;??%測(cè)試集樣本數(shù)量
%10折10次交叉驗(yàn)證
indices?=?crossvalind(‘Kfold‘m10);?%產(chǎn)生10個(gè)fold,即indices里有等比例的1-10
accuracy?=?0;
for?i=1:10
????test=(indices==i);?%邏輯判斷,每次循環(huán)選取一個(gè)fold作為測(cè)試集
????train=~test;?%取test的補(bǔ)集作為訓(xùn)練集,即剩下的9個(gè)fold
????data_train=X(train:);?%以上得到的數(shù)都為邏輯值,用與樣本集的選取
????label_train=Y(train:);?%label為樣本類別標(biāo)簽,同樣選取相應(yīng)的訓(xùn)練集
????data_test=X(test:);?%同理選取測(cè)試集的樣本和標(biāo)簽
????label_test=Y(test:);?
????[l1l3]?=?size(label_train);
????[l2l4]?=?size(label_test);
????%三類樣本數(shù)量分別記為count1count2count3
????count1=0;
????count2=0;
????count3=0;
????%count_1(ij)表示在第一類(y=1)的情況下,第i個(gè)屬性是j的樣本個(gè)數(shù)
????count_1=zeros(45);
????%count_2(ij)表示在第二類(y=2)的情況下,第i個(gè)屬性是j的樣本個(gè)數(shù)
????count_2=zeros(45);
????%count_3(ij)表示在第三類(y=3)的情況下,第i個(gè)屬性是j的樣本個(gè)數(shù)
????count_3=zeros(45);
????ii=1;%用來標(biāo)識(shí)測(cè)試集的序號(hào)
????for?i=1:l1
????????????x=data_train(i:);
????????????if?label_train(i)==1?
????????????????count1=count1+1;
????????????????for?j=1:4????%指示第j個(gè)屬性
????????????????????for?k=1:5????%第j個(gè)屬性為哪個(gè)值
????????????????????????if?x(j)==k
????????????????????????????count_1(jk)=count_1(jk)+1;
????????????????????????????break;
????????????????????????end
????????????????????end
????????????????end
????????????elseif?label_train(i)==2
????????????????count2=count2+1;
????????????????for?j=1:4????%指示第j個(gè)屬性
????????????????????for?k=1:5????%第j個(gè)屬性為哪個(gè)值
????????????????????????if?x(j)==k
????????????????????????????count_2(jk)=count_2(jk)+1;
????????????????????????????break;
????????????????????????end
????????????????????end
????????????????end
????????????else
????????????????count3=count3+1;
????????????????for?j=1:4????%指示第j個(gè)屬性
????????????????????for?k=1:5????%第j個(gè)屬性為哪個(gè)值
????????????????????????if?x(j)==k
????????????????????????????count_3(jk)=count_3(jk)+1;
????????????????????????????break;
????????????????????????end
????????????????????end
????????????????end
????????????end
????????%分別計(jì)算三類概率y1=p(y=1)、y2=p(y=2)、y3=p(y=3)的估計(jì)值
????????y1=count1/l1;
????????y2=count2/l1;
????????y3=count3/l1;
????????%y_1(ij)表示在第一類(y=1)的情況下,第i個(gè)屬性取值為j的概率估計(jì)值
????????%y_2(ij)表示在第二類(y=2)的情況下,第i個(gè)屬性取值為j的概率估計(jì)值
????????%y_3(ij)表示在第三類(y=3)的情況下,第i個(gè)屬性取值為j的概率估計(jì)值
????????for?i=1:4
????????????for?j=1:5
????????????????y_1(ij)=count_1(ij)/count1;
????????????????y_2(ij)=count_2(ij)/count2;
????????????????y_3(ij)=count_3(ij)/count3;
????????????end
????????end
????end
????%做預(yù)測(cè)p1p2p3分別表示輸入值xx為第1,2,3類的概率
????cc=0;???%用cc表示正確分類的樣本
????for?i=1:l2
????????xx=data_test(i:);
????????yy=label_test(i);
????????p1=y1*y_1(1xx(1))*y_1(2xx(2))*y_1(3xx(3))*y_1
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????4149??2018-06-06?19:44??matlab貝葉斯分類(2)-10折10次交叉驗(yàn)證\Copy_of_beys.m
?????文件????????6873??2018-06-06?17:21??matlab貝葉斯分類(2)-10折10次交叉驗(yàn)證\test.txt
?????目錄???????????0??2019-11-02?09:49??matlab貝葉斯分類(2)-10折10次交叉驗(yàn)證\
- 上一篇:電壓暫降的均方根曲線繪制
- 下一篇:lempel-ziv.m
評(píng)論
共有 條評(píng)論