|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
close all;
! q: j9 A5 U0 C0 U$ E2 M0 t. s, P! cclear;; {% |2 @& g/ u. d. _
clc;: g8 h3 X! x: Q/ {7 s, l% e3 f4 p0 Y
format compact;4 o2 ~% H8 K U: g" e- M9 D0 {
2 ~- U0 }% A- N0 N$ g3 K1 l! P% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
a; S1 Q; |7 J' w+ g9 lload chapter12_wine.mat;
) s; r) u8 k+ m, o6 E9 J' T& P8 Q! \& j1 f) R5 N; t' D
% 画出测试数据的box可视化图
4 t7 u$ Q/ d5 I9 K/ d' r* tfigure;+ Y8 o" ?, @9 ?
boxplot(wine,'orientation','horizontal','labels',categories);7 F a5 L+ _, j+ E
title('wine数据的box可视化图','FontSize',12);* e% G, q( J7 M" `
xlabel('属性值','FontSize',12);/ T& h4 @* K2 f' q! ?
grid on;
8 ~) c& p3 T. ?/ B: g6 x
/ d$ ^9 p- y. Q% 画出测试数据的分维可视化图
' S9 S* ~' m6 r; Kfigure0 [2 t/ v( t2 t: G0 D6 B1 S- {$ z
subplot(3,5,1);, U0 R, `7 u" U6 ^
hold on7 I6 }, I0 R% r1 Z. I
for run = 1:178
' k( \% S# O% r' j* t plot(run,wine_labels(run),'*');
+ n3 R+ K- Y2 h. G$ X* jend
# Z" |7 `7 `, ?4 g( wxlabel('样本','FontSize',10);1 v& [ ?2 w4 A3 P) g; i0 w' d, E
ylabel('类别标签','FontSize',10);6 {( [9 `1 j% B, |7 G# U, x6 m* T2 m
title('class','FontSize',10);
0 w) y" E6 s. s/ bfor run = 2:14
% O: u7 h6 I, t6 k z3 b subplot(3,5,run);
' ^/ r: ]9 G+ I( f5 N4 I$ v6 @ hold on;% x0 e+ G% e' S& ~3 U% @' o
str = ['attrib ',num2str(run-1)];( S4 D3 E; {6 y b
for i = 1:178
) [+ s* x$ |# M9 Q" ~ plot(i,wine(i,run-1),'*');; ^- `% S% l0 i7 M& }* ?* @- x
end
- `" O. {! A3 L2 G xlabel('样本','FontSize',10);
( c: v! X% n% A E" p ylabel('属性值','FontSize',10);- O$ L2 z5 v9 Y8 _- N! P
title(str,'FontSize',10);3 _$ a G" b0 g! L4 U- {& m. Q3 P
end
; N9 b9 U; i; Z, B: H1 M( R f/ i t% _, J; N7 r
% 选定训练集和测试集
, a# I, N% h2 M" v2 V w2 X d% x( P
% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集+ Z- p. {5 ^9 _2 p5 C6 F( J
train_wine = [wine(1:30, ;wine(60:95, ;wine(131:153, ];6 y9 s8 d, E3 `3 M& ^1 `1 i/ G
% 相应的训练集的标签也要分离出来
' P( P; B# m; A% Rtrain_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
, a: X# i) u- Q% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集( Q$ ~5 R1 F% }3 |2 V
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
6 b5 j+ U( |( N, w |% 相应的测试集的标签也要分离出来- e! i: |' n3 @
test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];0 L2 W+ q# I; i
8 a% I( D" F% h# f" H" A
[mtrain,ntrain] = size(train_wine);
/ M& C+ H% M O[mtest,ntest] = size(test_wine);
5 r0 ~; C% t% U- @. {* Y$ Z, f& ^% m. b& N& Z. k! a: @
dataset = [train_wine;test_wine];
3 w( k/ J: m' P9 u- a% mapminmax为MATLAB自带的归一化函数
8 x9 f0 N5 b. X: i" _ m[dataset_scale,ps] = mapminmax(dataset',0,1);! ~- f7 L3 h3 P
dataset_scale = dataset_scale';0 |! R4 u9 G9 _( d; z; P
; I! V( S' O8 Q+ o6 E. Y* g
train_wine = dataset_scale(1:mtrain,:);
5 O0 `1 I2 g5 K$ jtest_wine = dataset_scale( (mtrain+1) mtrain+mtest),: );5 p) g8 h- x* L3 l$ N8 ]2 y' U
%SVM网络训练
0 P( W' a* l& H* B5 s3 a3 Vmodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');% z) ^6 [6 s* M8 |- N& `* l. w
%SVM网络预测
6 X1 ?0 h8 D: E) Q: {5 T* [[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
. @) F6 ] x! N! \: l$ Q' O2 {. ~! V' f; D0 r
% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');
" `/ r, l) l1 @6 t* ]plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);. y! P X7 c, N2 A0 q
ylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');; y1 Y. M6 A( c# A Q3 H) h' R
title('测试集的实际分类和预测分类图','FontSize',12);grid on;4 T, u- d' {! r6 X9 c" j
; ]: o+ k3 ~, Y! ^& h& b. m
, `8 p' O- g, n3 |9 I. N( B6 ]) p; y5 M【运行出现的问题】. p- }) R8 _# u
??? Error using ==> svmtrain at 172
" U: j4 s$ Q' x; }Group must be a vector.
/ F1 _% L' x* \Error in ==> chapter12 at 60
7 V$ Z9 k- ?" k7 g! B1 Imodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');8 p$ R+ V+ C/ A# ~, x
3 O5 ]- h: B( q W |
|