ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

判別分析分類器の作成と可視化

この例では、フィッシャーのアヤメのデータの線形分類と 2 次分類の実施方法を示します。

標本データを読み込みます。

load fisheriris

列ベクトル species は、3 種類のアヤメ setosa、versicolor、virginica で構成されています。double 行列 meas は、花に関する 4 種類の測定値、がく片の長さと幅 (cm) と花弁の長さと幅 (cm) で構成されています。

花弁の長さ (meas の 3 番目の列) と花弁の幅 (meas の 4 番目の列) の測定値を使用します。これらをそれぞれ変数 PL および変数 PW として保存します。

PL = meas(:,3);
PW = meas(:,4);

分類を示すデータをプロットします。つまり、種類ごとにグループ化された測定値の散布図を作成します。

h1 = gscatter(PL,PW,species,'krb','ov^',[],'off');
h1(1).LineWidth = 2;
h1(2).LineWidth = 2;
h1(3).LineWidth = 2;
legend('Setosa','Versicolor','Virginica','Location','best')
hold on

線形分類器を作成します。

X = [PL,PW];
MdlLinear = fitcdiscr(X,species);

2 番目と 3 番目のクラスの間で線形境界の係数を取得します。

MdlLinear.ClassNames([2 3])
K = MdlLinear.Coeffs(2,3).Const;
L = MdlLinear.Coeffs(2,3).Linear;
ans =

  2x1 cell array

    {'versicolor'}
    {'virginica' }

2 番目と 3 番目のクラスを分離する曲線をプロットします。

f = @(x1,x2) K + L(1)*x1 + L(2)*x2;
h2 = ezplot(f,[.9 7.1 0 2.5]);
h2.Color = 'r';
h2.LineWidth = 2;

1 番目と 2 番目のクラスの間で線形境界の係数を取得します。

MdlLinear.ClassNames([1 2])
K = MdlLinear.Coeffs(1,2).Const;
L = MdlLinear.Coeffs(1,2).Linear;
ans =

  2x1 cell array

    {'setosa'    }
    {'versicolor'}

1 番目と 2 番目のクラスを分離する曲線をプロットします。

f = @(x1,x2) K + L(1)*x1 + L(2)*x2;
h3 = ezplot(f,[.9 7.1 0 2.5]);
h3.Color = 'k';
h3.LineWidth = 2;
axis([.9 7.1 0 2.5])
xlabel('Petal Length')
ylabel('Petal Width')
title('{\bf Linear Classification with Fisher Training Data}')

2 次判別分類器を作成します。

MdlQuadratic = fitcdiscr(X,species,'DiscrimType','quadratic');

プロットから線形境界を削除します。

delete(h2);
delete(h3);

2 番目と 3 番目のクラスの間で 2 次境界の係数を取得します。

MdlQuadratic.ClassNames([2 3])
K = MdlQuadratic.Coeffs(2,3).Const;
L = MdlQuadratic.Coeffs(2,3).Linear;
Q = MdlQuadratic.Coeffs(2,3).Quadratic;
ans =

  2x1 cell array

    {'versicolor'}
    {'virginica' }

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 = ezplot(f,[.9 7.1 0 2.5]);
h2.Color = 'r';
h2.LineWidth = 2;

1 番目と 2 番目のクラスの間で 2 次境界の係数を取得します。

MdlQuadratic.ClassNames([1 2])
K = MdlQuadratic.Coeffs(1,2).Const;
L = MdlQuadratic.Coeffs(1,2).Linear;
Q = MdlQuadratic.Coeffs(1,2).Quadratic;
ans =

  2x1 cell array

    {'setosa'    }
    {'versicolor'}

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 = ezplot(f,[.9 7.1 0 1.02]); % Plot the relevant portion of the curve.
h3.Color = 'k';
h3.LineWidth = 2;
axis([.9 7.1 0 2.5])
xlabel('Petal Length')
ylabel('Petal Width')
title('{\bf Quadratic Classification with Fisher Training Data}')
hold off

参考

関数

オブジェクト

関連するトピック