】阅读并运行下面代码,回答问题% 判别分类和贝叶斯分类clear;clc;% Fisher 鸢尾花数据包括 150 个鸢尾花标本的萼片长度、% 萼片宽度、花瓣长度和花瓣宽度的测量值。load fisheririsf=figure;gscatter(meas(:,1), meas(:,2), species,'rgb','osd');xlabel('Sepal length');ylabel('Sepal width');N = size(meas,1);% 线性判别分析lda = fitcdiscr(meas(:,1:2),species);ldaClass = resubPredict(lda);% 计算误分类误差ldaResubErr = resubLoss(lda)% 计算混肴矩阵,2018b以后版本可以直接用confusionchart得到混肴矩阵图ldaResubCM = confusionmat(species,ldaClass);% 绘制错误分类结果figure(f)bad = ~strcmp(ldaClass,species);hold on;plot(meas(bad,1), meas(bad,2), 'kx');hold off;% 网格化分类区域,观测判别曲线figure(2)[x,y] = meshgrid(4:.1:8,2:.1:4.5);x = x(:);y = y(:);j = classify([x y],meas(:,1:2),species);gscatter(x,y,j,'grb','sod')% 使用二次判别分析qda = fitcdiscr(meas(:,1:2),species,'DiscrimType','quadratic');qdaResubErr = resubLoss(qda)% 交叉验证,交叉验证需要随机划分区域rng(0,'twister');% 首先使用 cvpartition 生成 10 个不相交的分层子集。cp = cvpartition(species,'KFold',10)% 使用 10 折分层交叉验证估计 LDA 的真实测试误差。cvlda = crossval(lda,'CVPartition',cp);ldaCVErr = kfoldLoss(cvlda)% 使用 10 折分层交叉验证估计 QDA 的真实测试误差。cvqda = crossval(qda,'CVPartition',cp);qdaCVErr = kfoldLoss(cvqda)% 观测二次判别划分labels = predict(qda, [x y]);figure(3)gscatter(x,y,labels,'grb','sod')% 朴素贝叶斯分类,首先使用高斯分布对每个类中的每个变量进行建模。您可以计算再代入误差和交叉验证误差。nbGau = fitcnb(meas(:,1:2), species);nbGauResubErr = resubLoss(nbGau)nbGauCV = crossval(nbGau, 'CVPartition',cp);nbGauCVErr = kfoldLoss(nbGauCV)labels = predict(nbGau, [x y]);figure(4)gscatter(x,y,labels,'grb','sod')% 朴素贝叶斯分类要求数据呈正态分布,现使用核密度估计建模nbKD = fitcnb(meas(:,1:2), species, 'DistributionNames','kernel', 'Kernel','box');nbKDResubErr = resubLoss(nbKD)nbKDCV = crossval(nbKD, 'CVPartition',cp);nbKDCVErr = kfoldLoss(nbKDCV)figure(5)labels = predict(nbKD, [x y]);gscatter(x,y,labels,'rgb','osd')