|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
close all;! H% ]" v9 i/ \
clear;- J3 ]" {: S4 H. _! |, _
clc;0 j6 G9 N1 K9 }$ t
format compact;
, x' ?' R9 O" Q- w6 k, b# g
" w7 _; O" j2 e7 S% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量6 K# M3 x+ w5 j( f6 g$ j8 ~0 a
load chapter12_wine.mat;) G+ Y" {' V/ B
; s y i, v% U2 R8 b5 G
% 画出测试数据的box可视化图! o/ o3 D' y# H+ p+ @
figure;% A. H: I" W h/ I( f
boxplot(wine,'orientation','horizontal','labels',categories);" u) X0 y; n a0 m }" Z- ?0 U* k
title('wine数据的box可视化图','FontSize',12);% C- e2 e8 J" N3 Z
xlabel('属性值','FontSize',12); W. k' D" n& n; @
grid on;1 L( r/ x/ m7 g2 M$ C
5 }' U, _. {$ i' l) l% 画出测试数据的分维可视化图
* _1 @, t8 y# Q. pfigure
: k+ c/ j5 o* O9 c: u! V7 lsubplot(3,5,1);' ]3 b' p5 K6 c$ o" g% ?
hold on2 L2 y: }5 ]* u
for run = 1:178
) t+ a" \) G$ l+ I; g* J plot(run,wine_labels(run),'*');$ V* N5 b- {0 F8 N/ {
end
3 K; \# d& y7 Z' l: S/ I7 y" A0 D- dxlabel('样本','FontSize',10);
' y8 P( ~- s! j, Dylabel('类别标签','FontSize',10);/ v- ?; p# G# H3 y$ K9 q
title('class','FontSize',10);
; T9 w) @& [* \! K ^for run = 2:146 P* t. Q( {( M- d
subplot(3,5,run);1 w* H! N8 F! {9 D) r& M
hold on;
* }$ C- n" v0 s. @' P* m str = ['attrib ',num2str(run-1)];& H8 L1 C1 I- I l3 G! M$ @2 i
for i = 1:178" k/ L% m) I1 M, L3 _3 }
plot(i,wine(i,run-1),'*');
7 e" X1 x+ h3 U8 ? end
9 D6 {- U( q" p. J5 o" D2 u xlabel('样本','FontSize',10);$ ] {: a1 v* {9 ~: M
ylabel('属性值','FontSize',10);
- `4 e' X' Q5 R+ Q title(str,'FontSize',10);
1 X, u1 D' K! Q7 W" r; pend) r+ e( f+ W& r3 l
- f' |+ g) i9 T, X9 |( o3 M% 选定训练集和测试集
' Y) S* f( j6 q6 g
0 i0 J+ A% L9 @9 D- a% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集/ t) m6 W" S% I& [- D( m2 ^
train_wine = [wine(1:30, ;wine(60:95, ;wine(131:153, ];0 @" a1 s1 J5 M3 d2 x6 ~
% 相应的训练集的标签也要分离出来/ X9 C# M& z( c! P8 {
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
6 ^& [# X+ W7 }% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集0 Q( c: I. ^, v K! B' E8 W( S( O
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];" j0 ^* ?% A$ Y7 l+ o
% 相应的测试集的标签也要分离出来
( y) x6 P7 w0 U3 p1 Ztest_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];6 G6 ~* x7 f2 i8 U
; q/ A! t A; ~7 Q' a0 w
[mtrain,ntrain] = size(train_wine);
! C# V1 X$ _- N8 z4 S. Y[mtest,ntest] = size(test_wine);% Z6 b5 u7 Z7 w, P/ G$ e0 _, {
8 r4 x4 }# `! F! Pdataset = [train_wine;test_wine];
, d( f% D1 q2 P( W, k, m. F% g& k% mapminmax为MATLAB自带的归一化函数
% {" D! Z5 H6 K9 A[dataset_scale,ps] = mapminmax(dataset',0,1);
( O3 x+ o3 N/ W* q8 |dataset_scale = dataset_scale';
7 G2 h% s+ m& m$ h: x: [+ ^" p0 O, e; `+ l
train_wine = dataset_scale(1:mtrain,:);' w# s7 A6 O$ j# H N5 u7 c
test_wine = dataset_scale( (mtrain+1) mtrain+mtest),: );/ e* A2 |! r1 i- D) U8 x, e# a1 o' N
%SVM网络训练: `; s0 N4 l1 ?+ ]3 g6 }3 w
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');* s2 ]( B5 c" T4 y; m4 o8 _( u
%SVM网络预测# M+ |$ C# y/ A) O
[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);+ M* R' p* R# n! p
( A1 |- \- e" a0 ?$ h9 |% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');
' R( e1 A$ v4 k6 H) ^+ F. |6 Hplot(predict_label,'r*');xlabel('测试集样本','FontSize',12);
/ {! b7 \& r7 T" e6 Sylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');
# M+ V5 C/ C$ z' s- b8 Mtitle('测试集的实际分类和预测分类图','FontSize',12);grid on;$ w D( B8 N4 a# N
0 } T# l$ i$ z$ ~+ ?: O
0 Q4 Y% j, K+ Y v4 f6 m
【运行出现的问题】
3 U: l* L4 L! M: z" k??? Error using ==> svmtrain at 172
! `: {+ z( z/ y7 c: y* p0 w" }4 ~Group must be a vector.
* D, `5 [ w* c" I) AError in ==> chapter12 at 60" L2 e/ ?& L3 {/ k) L
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
; E. c2 H* v7 G# E# N" `# m" T
& E+ C, u1 c8 O$ L |
|