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

📄 chapter5_11_figure.m

📁 这是模式分类一书中第五章的LMS(最小均方算法)和Ho-Kashyap算法的matlab代码实现。
💻 M
字号:
function[vactor,count_num,error_rate]=function5_11_figure(data1,data2);

lereror_rate=ones(1,50);
lcount_num=zeros(1,50);
lcount_vactor=ones(1,50);


for i=1:100;
    
    %随机提取数据并对其增广
    
    %类一的数据提取
    range=randperm(50);
    learn_range=range(1:25);
    test_range=(26:50);
    learn_data1=data1(learn_range,[3 4]);
    test_data1=data1(test_range,[3 4]);
    vactor=ones(25,1);
    aug_learn_data1=horzcat(vactor,learn_data1);
    aug_test_data1=horzcat(vactor,test_data1);
    
    
    %类二的数据提取
    range=randperm(50);
    learn_range=range(1:25);
    test_range=(26:50);
    learn_data2=data2(learn_range,[3 4]);
    test_data2=data2(test_range,[3 4]);
    aug_learn_data2=horzcat(vactor,learn_data2);
    aug_test_data2=horzcat(vactor,test_data2);
    
    %合并;
    
    learn_data=vertcat(aug_learn_data1,-aug_learn_data2);
    test_data=vertcat(aug_test_data1,-aug_test_data2);
    
    
    %计算开始z
    a=[0 0 0];%初始化      
    k=0;
    m=0;
    b=ones(1,50);%裕量
    condition=100;    %停止条件
    inc=[10 10 10];
    
    k_max=10000;
    b_min=0.001;%阀值
    
    
    while k~=k_max;
        k=k+1;        
        e=(learn_data*a')'-b;
        e_=(e+abs(e))/2;
        b=b+2*e_;
        a=b*pinv(learn_data)';
        if abs(e)<b_min;
            flag=0;
            break;
        end;
        flag=-1;
    end;
    
    
    
    %测试    
    
    %     error=0;
    %     for count=1:50;
    %         if a*test_data(count,:)'<=b();
    %             error=error+1;
    %         end;
    %     end;
    
    if(flag==-1)
        error=50;
    else error=sum(a*test_data'<=0);
    end;
    
    
    lerror_rate(i)=1-error/50;
    lcount_num(i)=k;
    lvactor(i,:)=a;   
end;



error_rate=lerror_rate;
count_num=mean(lcount_num);
vactor=mean(lvactor);


xielv=-vactor(2)/vactor(3);
pianyi=-vactor(1)/vactor(3);
x=-6:1:6;
y=xielv*x+pianyi;
plot(x,y);
hold on;      
plot(test_data1(:,1),test_data1(:,2),'rd',test_data2(:,1),test_data2(:,2),'bo');

⌨️ 快捷键说明

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