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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvempjY29kZXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

(图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



最新文章

  1. jeecg小吐槽续——自己折腾修改在线开发功能中“默认值”的使用
  2. 承接Unity3D外包公司 — 技术分享
  3. spring3 mvc使用注解方式时,不能扫描jar包里面的类
  4. VM Depot 喜迎中国本土开源镜像!
  5. elasticsearch 索引 类型 id
  6. Android Studio的使用(九)--设置IDE编码格式
  7. HTTP 返回状态代码详解
  8. 以防忘记,建立stm32工程的过程
  9. C++静态库与动态库(转)
  10. redis 系列7 数据结构之跳跃表
  11. if else if else 语句
  12. Java主要版本平台
  13. day20 类的约束
  14. POJ 3660 Cow Contest / HUST 1037 Cow Contest / HRBUST 1018 Cow Contest(图论,传递闭包)
  15. MySQL 主外键约束与标准SQL不同的地方
  16. centos启用root账号登陆telnet
  17. 转:Window_Open详解
  18. 深入浅出js中的this
  19. Systemd 三部曲 之 PHP7
  20. 【转】Ubuntu 14.04.3上配置并成功编译Android 6.0 r1源码

热门文章

  1. Android jni 二维数组 传递
  2. Linux下离线安装MySQL
  3. NOIP2017 小凯的疑惑 解题报告(赛瓦维斯特定理)
  4. 安卓开发--ListView
  5. BZOJ 1391 网络流
  6. 使用greenDAO遇到的问题
  7. 运维派 企业面试题2 创建10个 &quot;十个随机字母_test.html&quot; 文件
  8. jQuery实现tab标签切换效果
  9. Java Web Application——servlet
  10. PKU 2288 Islands and Bridges 状态dp