www.gusucode.com > stats 源码程序 matlab案例代码 > stats/CreateAndVisualizeDiscriminantAnalysisClassifierExample.m
%% Create and Visualize Discriminant Analysis Classifier % This example shows how to perform linear and quadratic classification of % Fisher iris data. %% % Load the sample data. load fisheriris %% % The column vector, |species| , consists of iris flowers of three % different species, setosa, versicolor, virginica. The double matrix % |meas| consists of four types of measurements on the flowers, the length % and width of sepals and petals in centimeters, respectively. %% % Use petal length (third column in |meas| ) and petal width (fourth column % in |meas| ) measurements. Save these as variables PL and PW, % respectively. PL = meas(:,3); PW = meas(:,4); %% % Plot the data, showing the classification, that is, create a scatter plot % of the measurements, grouped by species. 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 %% % Create a linear classifier. X = [PL,PW]; MdlLinear = fitcdiscr(X,species); %% % Retrieve the coefficients for the linear boundary between the second and % third classes. MdlLinear.ClassNames([2 3]) K = MdlLinear.Coeffs(2,3).Const; L = MdlLinear.Coeffs(2,3).Linear; %% % Plot the curve that separates the second and third classes % % $$K + \left[\begin{array}{*{20}{c}}x_1 & x_2 \end{array}\right]L = 0.$$ % 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; %% % Retrieve the coefficients for the linear boundary between the first % and second classes. MdlLinear.ClassNames([1 2]) K = MdlLinear.Coeffs(1,2).Const; L = MdlLinear.Coeffs(1,2).Linear; %% % Plot the curve that separates the first and second classes. 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}') %% % Create a quadratic discriminant classifier. MdlQuadratic = fitcdiscr(X,species,'DiscrimType','quadratic'); %% % Remove the linear boundaries from the plot. delete(h2); delete(h3); %% % Retrieve the coefficients for the quadratic boundary between the % second and third classes. MdlQuadratic.ClassNames([2 3]) K = MdlQuadratic.Coeffs(2,3).Const; L = MdlQuadratic.Coeffs(2,3).Linear; Q = MdlQuadratic.Coeffs(2,3).Quadratic; %% % Plot the curve that separates the second and third classes % % $$K + \left[\begin{array}{*{20}{c}}x_1 & x_2 \end{array}\right]L + % \left[\begin{array}{*{20}{c}}x_1 & x_2 % \end{array}\right]Q\left[\begin{array}{*{20}{c}}x_1 \\ x_2 % \end{array}\right] = 0.$$ % 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; %% % Retrieve the coefficients for the quadratic boundary between the % first and second classes. MdlQuadratic.ClassNames([1 2]) K = MdlQuadratic.Coeffs(1,2).Const; L = MdlQuadratic.Coeffs(1,2).Linear; Q = MdlQuadratic.Coeffs(1,2).Quadratic; %% % Plot the curve that separates the first and second and classes. 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