机器学习-模式识别(1)Bayes 分类器设计

具体步骤:

(1)算出各类别特征值的均值
(2)求出特征值的协方差矩阵
(3)将第二步所得矩阵代入判别函数 g1(x)、 g2 (x)
(4)将待测试样本集数据依次代入 g1(x) 、 g2 (x),若 g1(x) - g2 (x) > 0,则判断其为第一类,反之为第二类。

以(a)身高或者(b)体重数据作为特征,在正态分布假设下利用贝叶斯估 计法估计分布密度参数,建立最小错误率 Bayes 分类器。

clc;
close all;
load FEMALE.txt;  
load MALE.txt;
%样本的分析
figure(1);
%画出样本分布图
for i=1:50
    if(i<49)
    plot(FEMALE(i,2),FEMALE(i,1),'r+');
    end
    plot(MALE(i,2),MALE(i,1),'k*');
    hold on;
end
title('样本数据');
xlabel('体重(Kg)'),ylabel('身高(cm)');
legend('男生','女生');
 
%样本1决策
fid=fopen('test1.txt','r'); 
test1=fscanf(fid,'%f %f %c',[3,inf]);
test=test1';%转置
fclose(fid);
Fmean = mean(FEMALE);%每列的均值
Mmean = mean(MALE);
Fvar = std(FEMALE);%每列的方差
Mvar = std(MALE);
preF = 5/35;%求样本一的先验概率
preM = 1-preF;
error = 0;
Nerror = 0;
%身高的决策
figure(2);
title('样本一身高的最小风险Bayes决策')
for i = 1:35
PFheight = normpdf(test(i,1),Fmean(1,1),Fvar(1,1)) ;%求正态分布
PMheight = normpdf(test(i,1),Mmean(1,1),Mvar(1,1)) ;
pFemale = preF*PFheight;
pMale =  preM*PMheight;
%决策判断并画出决策图
 if(pFemale<pMale)
  plot(i,test(i,1),'k*');
     if (test(i,3)=='f')
         Nerror = Nerror +1;
         fprintf('把第 %d个女生判断为男生了\n',i);
     end
 else
      plot(i,test(i,1),'r+');
       if (test(i,3)=='M')
         Nerror = Nerror +1;
         fprintf('把第 %d个男生判断为女生了\n',i);
     end
 end
 hold on;
end;
error = Nerror/35*100;
title('样本一身高最小错误率Bayes分类');
xlabel('测试序号'),ylabel('身高(cm)');
sprintf('%s %d %s %0.2f%s','样本一身高分类错误个数:',Nerror,'样本一身高分类错误率为:',error,'%')
%体重决策
figure(3);
error = 0;
Nerror = 0;
for j= 1:35
PFweight = normpdf(test(j,2),Fmean(1,2),Fvar(1,2)) ;
PMweight = normpdf(test(j,2),Mmean(1,2),Mvar(1,2)) ;
pwFemale = preF*PFweight;
pwMale =  preM*PMweight;
if(pwFemale<pwMale)
     plot(j,test(j,2),'k*');
     if (test(j,3)=='f')
         Nerror = Nerror +1;
         fprintf('把第 %d个女生判断为男生了\n',j);
     end
 else
     plot(j,test(j,2),'r+');
     if (test(j,3)=='M')
         Nerror = Nerror +1;
         fprintf('把第 %d个男生判断为女生了\n',j);
     end
 end
 hold on;
end;
error = Nerror/35*100;
title('样本一体重最小错误率Bayes分类');
xlabel('测试序号'),ylabel('体重(kg)');
sprintf('%s %d %s %0.2f%s','样本一体重分类错误个数:',Nerror,'样本一体重分类错误率为:',error,'%')
 
 
%样本2决策
fid=fopen('test2.txt','r'); 
test1=fscanf(fid,'%f %f %c',[3,inf]);
test=test1';
fclose(fid);
Fmean = mean(FEMALE);
Mmean = mean(MALE);
Fvar = std(FEMALE);
Mvar = std(MALE);
preF = 50/300;
preM = 1-preF;
error = 0;
Nerror = 0;
%身高的决策
figure(4);
title('样本二身高的最小风险Bayes决策')
for i = 1:300
PFheight = normpdf(test(i,1),Fmean(1,1),Fvar(1,1)) ;
PMheight = normpdf(test(i,1),Mmean(1,1),Mvar(1,1)) ;
pFemale = preF*PFheight;
pMale =  preM*PMheight;
 if(pFemale<pMale)
  plot(i,test(i,1),'k*');
     if (test(i,3)=='f')
         Nerror = Nerror +1;
         fprintf('把第 %d个女生判断为男生了\n',i);
     end
 else
      plot(i,test(i,1),'r+');
       if (test(i,3)=='M')
         Nerror = Nerror +1;
         fprintf('把第 %d个男生判断为女生了\n',i);
     end
 end
 hold on;
end;
error = Nerror/300*100;
title('样本二身高最小错误率Bayes分类');
xlabel('测试序号'),ylabel('身高(cm)');
sprintf('%s %d %s %0.2f%s','样本二身高分类错误个数:',Nerror,'样本二身高分类错误率为:',error,'%')
%体重决策
figure(5);
error = 0;
Nerror = 0;
for j= 1:300
PFweight = normpdf(test(j,2),Fmean(1,2),Fvar(1,2)) ;
PMweight = normpdf(test(j,2),Mmean(1,2),Mvar(1,2)) ;
pwFemale = preF*PFweight;
pwMale =  preM*PMweight;
if(pwFemale<pwMale)
     plot(j,test(j,2),'k*');
     if (test(j,3)=='f')
         Nerror = Nerror +1;
         fprintf('把第 %d个女生判断为男生了\n',j);
     end
 else
     plot(j,test(j,2),'r+');
     if (test(j,3)=='M')
         Nerror = Nerror +1;
         fprintf('把第 %d个男生判断为女生了\n',j);
     end
 end
 hold on;
end;
error = Nerror/300*100;
title('样本二体重最小错误率Bayes分类');
xlabel('测试序号'),ylabel('体重(kg)');
sprintf('%s %d %s %0.2f%s','样本二体重分类错误个数:',Nerror,'样本二体重分类错误率为:',error,'%')

分别test1和test2共335个测试样本。以身高或体重为特征实验结果如下:

绘制样本分布图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在样本一中以身高为特征进行决策
把第 23个女生判断为男生了
把第 24个女生判断为男生了
把第 30个女生判断为男生了
样本一身高分类错误个数: 3 样本一身高分类错误率为: 8.57%

在样本一中以体重为特征进行决策
把第 23个女生判断为男生了
把第 24个女生判断为男生了
把第 25个女生判断为男生了
把第 30个女生判断为男生了
把第 31个女生判断为男生了
把第 33个女生判断为男生了
样本一体重分类错误个数: 6 样本一体重分类错误率为: 17.14%

在样本二中以身高为特征进行决策
把第 254个男生判断为女生了
把第 255个男生判断为女生了
把第 264个男生判断为女生了
把第 274个男生判断为女生了
样本二身高分类错误个数: 4 样本二身高分类错误率为: 1.33%

在样本二中以体重为特征进行决策
把第 60个男生判断为女生了
把第 61个男生判断为女生了
把第 79个男生判断为女生了
把第 115个男生判断为女生了
把第 162个男生判断为女生了
把第 222个男生判断为女生了
把第 241个男生判断为女生了
把第 254个男生判断为女生了
把第 264个男生判断为女生了
样本二体重分类错误个数: 9 样本二体重分类错误率为: 3.00%

贝叶斯分类器主要是根据先验概率计算后验概率,如果决策是根据最小错误率即直接比较后验概率的大小,后验概率大的即决策为该类;如果决策根据最小风险即由后验概率和决策表计算出条件风险,取R(a1|x)和R(a2|x)小的一方决策为该类。

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,你的问题是关于鸢尾花分类的Python实现,利用三种分类器实现鸢尾花分类。 鸢尾花分类是机器学习中常用的分类问题之一,可以使用多种分类算法来解决。在Python中,可以使用scikit-learn库来实现鸢尾花分类。 以下是三种常用的分类器实现鸢尾花分类的代码示例: 1. 贝叶斯分类 ```python from sklearn.datasets import load_iris from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 创建贝叶斯分类 clf = GaussianNB() # 训练模型 clf.fit(X_train, y_train) # 预测测试集 y_pred = clf.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) ``` 2. 决策树分类器 ```python from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 创建决策树分类器 clf = DecisionTreeClassifier() # 训练模型 clf.fit(X_train, y_train) # 预测测试集 y_pred = clf.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) ``` 3. 支持向量机分类器 ```python from sklearn.datasets import load_iris from sklearn.svm import SVC from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 创建支持向量机分类器 clf = SVC() # 训练模型 clf.fit(X_train, y_train) # 预测测试集 y_pred = clf.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) ``` 以上就是三种常用的分类器实现鸢尾花分类的Python代码示例,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香草绵绵冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值