这个例子展示了如何对Fisher虹膜数据进行线性和二次分类。
加载示例数据。
负载fisheriris
列向量,物种
,由三种不同种类的鸢尾花组成,柱头花(setosa)、花斑花(versicolor)、维京花(virginica)。双矩阵量
由四种花的尺寸组成,萼片和花瓣的长度和宽度分别以厘米为单位。
使用花瓣长度(第三列在量
)和花瓣宽度(第四列量
)测量。将这些分别保存为变量PL和PW。
PL =量(:3);PW =量(:4);
绘制数据,显示分类,也就是说,创建一个散点图的测量,按物种分组。
h1 = gscatter (PL、PW物种,“、”,“ov ^”[],“关闭”);h1(1)。lineWidth = 2; h1(2).LineWidth = 2; h1(3).LineWidth = 2; legend(“Setosa”,“多色的”,“Virginica”,“位置”,“最佳”)举行在
创建一个线性分类器。
X = (PL (PW);MdlLinear = fitcdiscr (X,物种);
检索第二类和第三类之间的线性边界系数。
MdlLinear。类名(3 [2])
ans =2 x1细胞{“癣”}{' virginica '}
K = MdlLinear.Coeffs .Const(2、3);L = MdlLinear.Coeffs .Linear(2、3);
画出分隔第二和第三类的曲线
f = @(x1,x2) K + L(1)*x1 + L(2)*x2;h2 = fimplicit (f。9 7.1 0 2.5]);h2。颜色=“r”;h2。lineWidth = 2; h2.DisplayName =“Versicolor与Virginica的界限”;
检索第一类和第二类之间的线性边界的系数。
MdlLinear。类名([1 - 2])
ans =2 x1细胞{' setosa}{“癣”}
K = MdlLinear.Coeffs .Const(1、2);L = MdlLinear.Coeffs .Linear(1、2);
画出区分第一类和第二类的曲线。
f = @(x1,x2) K + L(1)*x1 + L(2)*x2;h3 = fimplicit (f。9 7.1 0 2.5]);h3。颜色=“k”;h3。lineWidth = 2; h3.DisplayName =“Versicolor与Setosa之间的界限”;轴([。2. xlabel() xlabel()“花瓣长度”) ylabel (“花瓣宽度”)标题(“{\bf Fisher训练数据线性分类}”)
创建一个二次判别分类器。
MdlQuadratic = fitcdiscr (X,物种,“DiscrimType”,“二次”);
从情节中移除线性边界。
删除(h2);删除(h3);
检索第二类和第三类之间的二次边界的系数。
MdlQuadratic。类名(3 [2])
ans =2 x1细胞{“癣”}{' virginica '}
K = MdlQuadratic.Coeffs .Const(2、3);L = MdlQuadratic.Coeffs .Linear(2、3);Q = MdlQuadratic.Coeffs .Quadratic(2、3);
画出分隔第二和第三类的曲线
f = @(x1,x2) K + L(1)*x1 + L(2)*x2 + Q(1,1)*x1。^ 2 +...(Q(1、2)+ Q (2,1)) * x1。* x2 + Q (2, 2) * x2。^ 2;h2 = fimplicit (f。9 7.1 0 2.5]);h2。颜色=“r”;h2。lineWidth = 2; h2.DisplayName =“Versicolor与Virginica的界限”;
检索第一类和第二类之间的二次边界的系数。
MdlQuadratic。类名([1 - 2])
ans =2 x1细胞{' setosa}{“癣”}
K = MdlQuadratic.Coeffs .Const(1、2);L = MdlQuadratic.Coeffs .Linear(1、2);Q = MdlQuadratic.Coeffs .Quadratic(1、2);
绘制分离第一和第二类的曲线。
f = @(x1,x2) K + L(1)*x1 + L(2)*x2 + Q(1,1)*x1。^ 2 +...(Q(1、2)+ Q (2,1)) * x1。* x2 + Q (2, 2) * x2。^ 2;h3 = fimplicit (f。9 7.1 0 1.02]);%绘制曲线的相关部分。h3。颜色=“k”;h3。lineWidth = 2; h3.DisplayName =“Versicolor与Setosa之间的界限”;轴([。2. xlabel() xlabel()“花瓣长度”) ylabel (“花瓣宽度”)标题(“{\bf Fisher训练数据的二次分类}”)举行从