|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
close all;' H" [ I* b0 F4 z6 I8 U$ ]
clear;
% g" v$ k) U/ U2 P0 H6 Y" Lclc; h2 m5 c7 k! J, L+ F v0 a, P+ k
format compact;
3 e' N# E2 X% g3 A7 f$ v0 ?7 }+ T U; f& F3 y- }
% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量: @, g4 t' p" D. T% s, ]* U
load chapter12_wine.mat;
Y- _2 M$ x" b" e3 P2 B3 u' T4 H+ }
% 画出测试数据的box可视化图
% C, M4 ~$ Q' Q- J$ R- bfigure;
1 X! i8 s: x) x7 ]0 Oboxplot(wine,'orientation','horizontal','labels',categories);
6 a; k% P. c- }6 @* atitle('wine数据的box可视化图','FontSize',12);
K2 b$ H# Z j9 m- pxlabel('属性值','FontSize',12);4 l0 ?# x8 D8 _' {1 R l4 z
grid on;
9 \- ?2 r2 w7 P0 d" w
( w) f2 X& P, H% ~% y6 f% 画出测试数据的分维可视化图
$ r- A, ?% q0 i0 g$ cfigure. o; y8 S6 z5 K; I; y1 f3 V
subplot(3,5,1);. o6 c0 D/ S- x4 L/ f! F5 j
hold on+ v% B- G {3 N# m
for run = 1:178
; K6 }! `) Q7 @' Y plot(run,wine_labels(run),'*');
0 w- `% ?3 |& _% L; }3 ^3 uend, _* @5 u4 h+ e2 F% H3 r
xlabel('样本','FontSize',10);* A# c3 `# J' U- y' \% P2 T
ylabel('类别标签','FontSize',10);6 C# \ U! Q$ F% O# ]- o$ K8 {- V
title('class','FontSize',10);
8 [& b5 m& C6 ?1 v. q4 wfor run = 2:14
1 N; j7 a0 Z) V/ i6 W. p subplot(3,5,run);
0 @( }3 S/ Z: L; v& P hold on;6 x7 \( }5 F6 F5 P- x6 ~: x
str = ['attrib ',num2str(run-1)];
3 w7 x7 Q# U6 \6 c for i = 1:178
9 Q) o$ g5 Y! I+ h plot(i,wine(i,run-1),'*');
' H/ u. e: q9 |4 _. r end2 I- v/ Z" `9 T$ t9 U' b+ `
xlabel('样本','FontSize',10);
' \6 g% s, ^ G+ \( ^. G# R, C ylabel('属性值','FontSize',10);
5 n2 `/ {- T* o; j9 @ title(str,'FontSize',10);
" k: x! D1 a6 hend% L9 X* N2 u W4 p% ?: n" D, {
! g% t( m& q+ J ~* g+ P. U" {8 e5 c% 选定训练集和测试集
( d: U+ h! G9 ~ L) ]
7 |9 {& V: m3 Z; T( S/ p" h5 t: q, ^* s% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集; v7 o# o5 ^& D* D
train_wine = [wine(1:30, ;wine(60:95, ;wine(131:153, ];
" T( f! x# ]' n: K; R, f: ]% 相应的训练集的标签也要分离出来
0 G2 U( e. j% C8 H& Z% ~7 k" {train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];* c) ?. m" r6 b9 ]; _
% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集; P" v3 _) }, h+ c
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
8 c, V/ n: ~1 D: f$ F0 O+ K% 相应的测试集的标签也要分离出来
& k: o2 u6 s- l. ltest_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
8 T3 h+ W1 `' @! i$ Y) _& U8 Z D5 ]' N4 T
[mtrain,ntrain] = size(train_wine);: S% L& |# L: Q) X" B2 d' Z
[mtest,ntest] = size(test_wine);
2 l: l" i- U6 ~/ d: u# D! |7 l, a' |% Z2 I6 m
dataset = [train_wine;test_wine];
2 n% x2 L x: z. t3 v6 E- V% _% X% mapminmax为MATLAB自带的归一化函数. i0 R& c# V9 `- b. u- z- x
[dataset_scale,ps] = mapminmax(dataset',0,1);
# @# P T3 x/ P0 a$ p Odataset_scale = dataset_scale'; W; ^6 w. j1 i
; D) J. }$ y8 [- a; @2 }0 f: J Wtrain_wine = dataset_scale(1:mtrain,:);, G" d( m) N" Q7 [$ @$ p
test_wine = dataset_scale( (mtrain+1) mtrain+mtest),: );
! Z8 D }( X) J: c4 q# ~: q%SVM网络训练% t3 L$ M6 O$ G. {0 P$ s3 M) t5 ]
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');" f) V0 n" |6 ]
%SVM网络预测
; Z: T0 [6 W: H( `3 V1 q[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
) s6 P% n6 q. }4 y( K3 |1 R) s$ T8 z, A1 @+ Y2 s
% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');
" v/ W3 [4 x R! b1 o) _+ }plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);
\% ^' g2 c$ I& P7 {% jylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');
- G8 _6 n e8 ntitle('测试集的实际分类和预测分类图','FontSize',12);grid on;
}* D1 J! T2 |" f7 T! w
' B/ f0 M% T+ U+ j: V! V2 U3 q1 ]6 ]: M" }, W/ G9 B
【运行出现的问题】( [$ B2 B3 {9 d, z E- t
??? Error using ==> svmtrain at 172
3 J$ x4 a$ T" mGroup must be a vector.
\: P) G. Q! V- i) G k2 `Error in ==> chapter12 at 60
* ]6 I: f$ K* Cmodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
( I' Z5 O$ ?( T+ ~) A. q2 R/ I! q- y" J& A) e
|
|