zoukankan      html  css  js  c++  java
  • 基于SVM的数据分类预測——意大利葡萄酒种类识别

    update:把程序源代码和数据集也附上http://download.csdn.net/detail/zjccoder/8832699

    2015.6.24

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    wine数据来自于UCI数据库。记录的是意大利同一地区3中不同品种的葡萄酒13中化学成分含量,以期通过科学的方法,达到自己主动分类葡萄酒的目的。

    本次分类的数据共同拥有178个样本,每一个样本有13个属性,并提供每一个样本的正确分类,用于检验SVM分类的准确定。

    首先我们画出数据的可视化图:

    % 加载測试数据wine,当中包括的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
    load chapter_WineClass.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)


    (图2)


    图1是wine数据的box可视化图。图2是wine的箱式图。从图上我们非常难分出每一种葡萄酒是哪种类型。以下我们尝试用SVM来分类。


    数据的预处理

    % 选定训练集和測试集
    
    % 将第一类的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)];
    
    <strong>%% 数据预处理</strong>
    % 数据预处理,将训练集和測试集归一化到[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网络建立、训练和预測

    <span style="font-size:12px;">%% SVM网络训练
    model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
    
    %% SVM网络预測
    [predict_label, accuracy,dec_value1] = svmpredict(test_wine_labels, test_wine, model);</span>


    结果分析

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


    利用svm分类的准确率达到了98.8764%,在89个測试样本中仅有一个被分类错误。可见SVM在数据分类方面的强大!

    END

    
  • 相关阅读:
    ModelBinder——ASP.NET MVC Model绑定的核心
    asp.net
    深入C#内存管理来分析 值类型、引用类型、装箱、拆箱、堆栈几个概念
    C#网络编程
    [Architecture Pattern] Service Locator
    RestSharp使用详解
    系统性能优化一例
    C#开发的高性能EXCEL导入、导出工具DataPie
    ASP.NET MVC以ValueProvider为核心的值提供系统: DictionaryValueProvider
    ASP.NET MVC以ValueProvider为核心的值提供系统: NameValueCollectionValueProvider
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6949562.html
Copyright © 2011-2022 走看看