資源簡介
內含貝葉斯的代碼,10次10折貝葉斯的代碼,直接使用即可,還用相應的數據集樣本,都可直接使用不需要修改。

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