Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Crear y visualizar clasificador de análisis discriminante

Este ejemplo muestra cómo realizar la clasificación lineal y cuadrática de los datos de iris de Fisher.

Cargue los datos de ejemplo.

load fisheriris

El vector de columna,, consiste en flores de iris de tres especies diferentes, setosa, versicolor, virginica.species La doble matriz consta de cuatro tipos de mediciones en las flores, la longitud y anchura de sépalos y pétalos en centímetros, respectivamente.meas

Utilice mediciones de longitud de pétalo (tercera columna en) y anchura de pétalo (cuarta columna).measmeas Guárdela como variables PL y PW, respectivamente.

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

Graficar los datos, mostrando la clasificación, es decir, crear un diagrama de dispersión de las mediciones, agrupadas por especies.

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

Cree un clasificador lineal.

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

Recupere los coeficientes para el límite lineal entre la segunda y la tercera clase.

MdlLinear.ClassNames([2 3])
ans = 2x1 cell array
    {'versicolor'}
    {'virginica' }

K = MdlLinear.Coeffs(2,3).Const;   L = MdlLinear.Coeffs(2,3).Linear;

Trazar la curva que separa la segunda y tercera clases

<math display="block">
<mrow>
<mi>K</mi>
<mo>+</mo>
<mrow>
<mo>[</mo>
<mtable columnalign="center center center center center center center center center center center center center center center center center center center center">
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
<mi>L</mi>
<mo>=</mo>
<mn>0</mn>
<mo>.</mo>
</mrow>
</math>

f = @(x1,x2) K + L(1)*x1 + L(2)*x2; h2 = fimplicit(f,[.9 7.1 0 2.5]); h2.Color = 'r'; h2.LineWidth = 2; h2.DisplayName = 'Boundary between Versicolor & Virginica';

Recupere los coeficientes para el límite lineal entre la primera y la segunda clase.

MdlLinear.ClassNames([1 2])
ans = 2x1 cell array
    {'setosa'    }
    {'versicolor'}

K = MdlLinear.Coeffs(1,2).Const; L = MdlLinear.Coeffs(1,2).Linear;

Trace la curva que separa la primera y la segunda clase.

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

Cree un clasificador de discriminante cuadrático.

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

Quite los contornos lineales de la gráfica.

delete(h2); delete(h3);

Recupere los coeficientes para el límite cuadrático entre la segunda y la tercera clase.

MdlQuadratic.ClassNames([2 3])
ans = 2x1 cell array
    {'versicolor'}
    {'virginica' }

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

Trazar la curva que separa la segunda y tercera clases

<math display="block">
<mrow>
<mi>K</mi>
<mo>+</mo>
<mrow>
<mo>[</mo>
<mtable columnalign="center center center center center center center center center center center center center center center center center center center center">
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
<mi>L</mi>
<mo>+</mo>
<mrow>
<mo>[</mo>
<mtable columnalign="center center center center center center center center center center center center center center center center center center center center">
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
<mi>Q</mi>
<mrow>
<mo>[</mo>
<mtable columnalign="center center center center center center center center center center center center center center center center center center center center">
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
<mo>=</mo>
<mn>0</mn>
<mo>.</mo>
</mrow>
</math>

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.Color = 'r'; h2.LineWidth = 2; h2.DisplayName = 'Boundary between Versicolor & Virginica';

Recupere los coeficientes para el límite cuadrático entre la primera y la segunda clase.

MdlQuadratic.ClassNames([1 2])
ans = 2x1 cell array
    {'setosa'    }
    {'versicolor'}

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

Trace la curva que separa la primera y la segunda y las clases.

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

Consulte también

Funciones

Objetos

Temas relacionados