⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfun.m

📁 朴素贝叶斯分类器
💻 M
字号:
clear;
clc;
load shengchenshuju;
T=size(r1,1);
%%%%%%%%%%%%k叠交叉验证%%%%%%%%%%%%%
k=4;s=4;
tdata=r1(s:k:T,:);%测试数据包括分类好的决策属性值
r1(s:k:T,:)=[];
traindata=r1;
%%%%%%%%%%GA:遗传算法%%%%%%%%%%
NIND=40;                 %种群的大小
PRECI=size(traindata,1); %一个染色体的长度 
P_mutation=0.1;   %变异概率
P_cross=0.6;      %交叉概率
real chrom;       %定义初始种群
real currentbest_value;
for j=1:NIND
    a=rand(1,PRECI);
    chrom(:,j)=a;     %初始种群
end

ecope=100;                        %iterative迭代次数  
currentbest=zeros(PRECI,ecope); %record the optimum one
currentbest_value=zeros(ecope,1);%record the fitness value of the optimum one
currentbest_num=zeros(ecope,1);%存放每一次迭代最大正确的个数
for k=1:ecope
    [fitness_gene correctrate]=fitness(chrom,traindata,tdata);
    %leave the best chromosome(染色体) 
    [c_value c_order]=max(fitness_gene);
    [b_value b_order]=max(correctrate);
    currentbest(:,k)=chrom(:,b_order);
    currentbest_value(k)=c_value;
    currentbest_num(k)=b_value;

    %the process of selection轮盘赌方法
    N=NIND;
    fit=fitness_gene;
    fit=cumsum(fit)/sum(fit);  %if a=[1 2 3 4],b=cumsum(a),then b=[1 3 6 10]
    
    s=select(fit,N);
    temchrom=chrom(:,s);
    %crossover
    P=rand(1,N);
    prob=find(P<P_cross);
    crosschrom=temchrom(:,prob);               %选择那些小于交叉概率的染色体(列向量)进行交叉
    crosschrom=cross_over(crosschrom);
    temchrom(:,prob)=crosschrom;               %从temchrom中选取一部分染色体交叉,交叉后在放回原来的行。
    %mutation
    temchrom=mutation(temchrom,P_mutation);
    chrom=temchrom;        %父代经选择、交叉、变异得到的子代种群
    %calculation the fitness value after crossover and mutation
    [fitness_gene correctrate]=fitness(chrom,traindata,tdata);
    fit=fitness_gene;
    fit=cumsum(fit)/sum(fit);
    
    %elitist selection精英选择
    s=select(fit,N-1);
    [s_value s_order]=max(fitness_gene);

    if s_value<currentbest_value(k)          
        chrom=[chrom(:,s) currentbest(:,k)];
        fitness_gene=[fitness_gene(s);currentbest_value(k)];
    else
        s=[s s_order]; 
        chrom=chrom(:,s);
        fitness_gene=fitness_gene(s);
    end
end
%decode
m_value=max(currentbest_num);
xx=find(currentbest_num==m_value);
if size(xx,1)==1
    xx=xx;
else
    xx=xx(1,1);
end
chrombest=currentbest(:,xx);%最好的训练样本的子集
chrom1=zhuanhua(chrombest);
h=find(chrom1==1);
traindata=traindata(h,:);
C=fenleiqi1(traindata,tdata);
TestSampleNum=size(tdata,1);
Correctrate=C/TestSampleNum;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -