# SVM神经网络的数据分类预测----意大利葡萄酒种类识别

该案例作者申明：
1：本人长期驻扎在此板块里，对该案例提问，做到有问必答。
2：此案例有配套的教学视频，配套的完整可运行Matlab程序。
3：以下内容为该案例的部分内容（约占该案例完整内容的1/10）。
4：此案例为原创案例，转载请注明出处（Matlab中文论坛，《Matlab神经网络30个案例分析》）。
5：若此案例碰巧与您的研究有关联，我们欢迎您提意见，要求等，我们考虑后可以加在案例里。
6：您看到的以下内容为初稿，书籍的实际内容可能有少许出入，以书籍实际发行内容为准。
7：此书其他常见问题、预定方式等，请点击这里。

## Contents

- 清空环境变量
- 数据提取
- 数据预处理
- SVM网络训练
- SVM网络预测
- 结果分析

## 清空环境变量

    close all;
    clear;
    clc;
    format compact;

## 数据提取

    % 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
    load chapter12_wine.mat;

    % 画出测试数据的box可视化图
    figure;
    boxplot(wine,'orientation','horizontal','labels',categories);
    title('wine数据的box可视化图','FontSize',12);
    xlabel('属性值','FontSize',12);
    grid on;

    % 画出测试数据的分维可视化图
    figure
    subplot(3,5,1);
    hold on
    for run = 1:178
        plot(run,wine_labels(run),'*');
    end
    xlabel('样本','FontSize',10);
    ylabel('类别标签','FontSize',10);
    title('class','FontSize',10);
    for run = 2:14
        subplot(3,5,run);
        hold on;
        str = ['attrib ',num2str(run-1)];
        for i = 1:178
            plot(i,wine(i,run-1),'*');
        end
        xlabel('样本','FontSize',10);
        ylabel('属性值','FontSize',10);
        title(str,'FontSize',10);
    end

    % 选定训练集和测试集

    % 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集
    train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];
    % 相应的训练集的标签也要分离出来
    train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
    % 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
    test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
    % 相应的测试集的标签也要分离出来
    test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];

## 数据预处理

数据预处理,将训练集和测试集归一化到[0,1]区间

    [mtrain,ntrain] = size(train_wine);
    [mtest,ntest] = size(test_wine);

    dataset = [train_wine;test_wine];
    % mapminmax为MATLAB自带的归一化函数
    [dataset_scale,ps] = mapminmax(dataset',0,1);
    dataset_scale = dataset_scale';

    train_wine = dataset_scale(1:mtrain,:);
    test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: );

## SVM网络训练

    model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');

## SVM网络预测

    [predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);

    Accuracy = 98.8764% (88/89) (classification)

## 结果分析

    % 测试集的实际分类和预测分类图
    % 通过图可以看出只有一个测试样本是被错分的
    figure;
    hold on;
    plot(test_wine_labels,'o');
    plot(predict_label,'r*');
    xlabel('测试集样本','FontSize',12);
    ylabel('类别标签','FontSize',12);
    legend('实际测试集分类','预测测试集分类');
    title('测试集的实际分类和预测分类图','FontSize',12);
    grid on;

版权所有：Matlab中文论坛