|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
close all;" N3 m1 U t3 U0 O
clear;: s, H2 l$ Y: c+ n3 p
clc;" z* m4 @: L9 p/ A- ^
format compact;. w* G' l3 V* n- \% J
3 R# W& k, q! ?3 B6 S% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
, h% l7 V# x# rload chapter12_wine.mat;# }( S* U: [+ {
% t# Y4 V/ k3 @: i8 |5 L4 K
% 画出测试数据的box可视化图2 U4 W& j( T& n: q4 q; L
figure;0 |; [& a# w; d1 ?% H
boxplot(wine,'orientation','horizontal','labels',categories);0 z+ c* f- r6 V' \ w3 u! V) R# n; {
title('wine数据的box可视化图','FontSize',12);
4 h1 j+ U' F. H# b* g. Fxlabel('属性值','FontSize',12);# x5 b* D( F. g Q: N& B3 `( @
grid on;
6 V& Y6 x- n/ A: v
1 F* \- E& |# c* a: `% 画出测试数据的分维可视化图" q1 e: U5 m7 X1 [+ _
figure
, B4 ^+ r/ K+ l; l5 K% c. msubplot(3,5,1);6 a. W0 }" ~# D4 P! J
hold on
* e: \: B0 B3 X5 N* ?. ~) O/ u ]for run = 1:178. N8 r# ?8 X1 U
plot(run,wine_labels(run),'*');2 m _) {% _, ~0 m4 {1 X
end
% k/ A: V& d8 A0 n/ h& O: v5 w- }3 oxlabel('样本','FontSize',10);3 s3 _# _9 m. r+ q$ |
ylabel('类别标签','FontSize',10);8 p% c z4 B7 B2 A+ g, V/ O
title('class','FontSize',10);, b9 G/ j( |( ?. C- |
for run = 2:144 n" N" [; A7 i; f1 n' I6 A% K0 T3 n
subplot(3,5,run);
0 @/ Y& ?7 ~7 ?. K$ K hold on;
. B2 Y. e) \* g5 i' J6 K str = ['attrib ',num2str(run-1)];. r. X0 [9 S7 p+ {5 o+ \* y/ v
for i = 1:1786 s7 s( g* C6 e, a6 W4 B
plot(i,wine(i,run-1),'*');
) P* `4 A& s1 j, @& C end
% f& O* L( F( }' U: v* b1 q. Q$ I xlabel('样本','FontSize',10);' M! F2 {3 I4 h1 C/ }3 E; w
ylabel('属性值','FontSize',10);
9 u$ }- Y( o) E0 Z% y+ P, x! h title(str,'FontSize',10);
' L# k9 u* g1 S) v5 ]end, d% n7 C# [: O, y6 B
" W: L' T9 M5 x) q: v4 ]
% 选定训练集和测试集! [$ H: L0 k; ^1 E
6 o& C5 _) c% j/ o0 c% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集0 w5 M* h f( ^' i* z
train_wine = [wine(1:30, ;wine(60:95, ;wine(131:153, ];0 @0 k, h( k: W
% 相应的训练集的标签也要分离出来* H$ a7 M9 U: J& h
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
3 X8 F2 x+ J8 O+ q' R; ]0 ~0 k( ?% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集+ U6 Q& U X, V5 s9 a' s3 F
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];7 q6 X0 H# J' q$ E) f, |, T
% 相应的测试集的标签也要分离出来
' t: t% H1 y7 x8 Y( E0 Mtest_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
+ o3 p' ~3 W" B" v- z, `5 K3 ~; |. q% c3 f$ F4 q
[mtrain,ntrain] = size(train_wine);( Q1 o; E4 t/ i& t9 C+ q
[mtest,ntest] = size(test_wine);
8 B# J: N& t* O2 u" C4 Q7 v7 ]; \1 H& m" C
dataset = [train_wine;test_wine];5 w' y& z, q) T3 w
% mapminmax为MATLAB自带的归一化函数' ?( W* ~ {. \2 a2 _
[dataset_scale,ps] = mapminmax(dataset',0,1);
) v. k/ C# n; v- Y9 z( Mdataset_scale = dataset_scale';! ~% {% k* l) Q! r
" ~9 Q$ @! _* X8 A" D
train_wine = dataset_scale(1:mtrain,:);- s5 p. }8 x5 l+ V; a1 `3 n, K! ~& B
test_wine = dataset_scale( (mtrain+1) mtrain+mtest),: );
$ C9 d- a6 \; u& |9 ?! ^9 Q%SVM网络训练- e# g" K! ~9 @5 e! z3 o
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
3 R& Q! [% f6 @%SVM网络预测6 L" I9 O! {' C8 h! K) v
[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
; d' j9 f7 r% H$ N8 x. }" z9 p: `# v5 g0 [
% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');
- ]' z! a' f& G# q4 I, a$ n+ c5 fplot(predict_label,'r*');xlabel('测试集样本','FontSize',12);$ Z% t3 s. z5 ]+ \% D
ylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');) P/ h3 P, I$ E a5 r
title('测试集的实际分类和预测分类图','FontSize',12);grid on;" m% z3 ]8 N$ J1 O$ z
+ a; d: M, m( v( S; N$ O1 |8 h3 f* @
3 U4 p$ X' ~7 i$ v" T" M
【运行出现的问题】; ^- ]" `0 t+ P- ^! R; f
??? Error using ==> svmtrain at 172$ [( s2 Z+ x2 c# w) k2 ^$ @) M
Group must be a vector.
9 W; Q5 s- E& x& wError in ==> chapter12 at 606 R; m: {& K; g
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');/ c, W' T3 r' j1 i% Z5 Z9 ?
, k& z' @. f6 E0 h8 k: s" {! K |
|