|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
close all;7 ^# W( i* w* J: J2 W6 e2 X
clear;) ?4 i/ ]3 ^# m( x
clc;9 a2 \0 d+ {* b- q3 c7 ~
format compact;
$ [# X6 f j/ ]. G' u7 \6 L: \. l7 F' V
% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
/ u4 n' M6 J' ^, y3 B' \7 y8 a# Nload chapter12_wine.mat;# ]3 p- P5 b) v: n. U# I
- L4 m- ~: @1 j n* C
% 画出测试数据的box可视化图
/ i7 P; c7 H$ ]+ C7 h, afigure;
' Z. e% O# N- J8 s; i9 f$ ]; iboxplot(wine,'orientation','horizontal','labels',categories);0 K K/ v9 S7 I& m8 m* b( U
title('wine数据的box可视化图','FontSize',12);4 T* I/ y* {+ j+ P' p! }
xlabel('属性值','FontSize',12);6 l0 u" M9 ^2 a+ A" q0 G8 _& @5 z! j# O
grid on;
* E$ x( }) P3 s& n* F
+ t$ k3 a1 @# K2 F z% 画出测试数据的分维可视化图# y, s2 Q9 V5 R" q% t% n. B: O9 f
figure& X( j: t# V5 I- o$ C% F5 X
subplot(3,5,1);+ s6 v, a. J/ {
hold on
, D# ]3 a9 ]6 r0 c3 Mfor run = 1:178
& f2 Q9 O: {- N plot(run,wine_labels(run),'*');2 L1 P% P3 Y# T& E
end
' b/ u/ b( K( m8 _xlabel('样本','FontSize',10);
( g9 s1 @2 j6 }ylabel('类别标签','FontSize',10);* m. L& A& H6 v
title('class','FontSize',10);( b3 Z" E. Z1 K3 e7 {7 L1 U
for run = 2:14
# A* R8 R; a& M I6 W subplot(3,5,run); d2 l5 j" b1 o4 {# @& L
hold on; m% Z8 T9 U+ \$ P4 ]2 B( g
str = ['attrib ',num2str(run-1)];4 y' C- A* i# Y( T2 A
for i = 1:1784 r9 [2 s, M/ z r
plot(i,wine(i,run-1),'*');5 o/ D( Y, J5 H. d% O
end% P, F: Q5 r+ b
xlabel('样本','FontSize',10);
' }: `1 r) z5 U7 { ylabel('属性值','FontSize',10);, e7 `1 g x C- i2 j
title(str,'FontSize',10);0 V! l9 X9 ?& S* O
end3 L( k& O5 J: l
/ M9 `( w4 }9 c! W
% 选定训练集和测试集- `( |$ p7 r% U4 A* n
* C: W5 n& L8 o1 d8 N4 w' Q, \
% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集
% ~* P+ J' p0 u) f- \0 Htrain_wine = [wine(1:30, ;wine(60:95, ;wine(131:153, ];: V- e. g9 q+ p2 R3 O C3 X# Q8 d
% 相应的训练集的标签也要分离出来
3 k/ \0 B- ? {7 Btrain_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
3 ~: w( G/ S$ o5 t. e- Z/ {3 S% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集; h+ E! D, c% `4 U0 [
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];& D9 m+ Y3 Y: R* e) L m0 B
% 相应的测试集的标签也要分离出来
1 {2 P2 y/ }' x: E$ b- [% D1 ctest_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];4 K4 l. s n$ U( t2 s* R! [* X
! a n; J1 l# A
[mtrain,ntrain] = size(train_wine);) ] i* r. {$ ~( M
[mtest,ntest] = size(test_wine);
1 A6 g. k# ?- a5 e0 g; ^; O5 X8 P- K' d4 n4 m( G
dataset = [train_wine;test_wine];
- L' h. D& d3 H6 `1 Q. b3 M% mapminmax为MATLAB自带的归一化函数
2 C% L+ S/ N( S- A9 V& `& w: F: ?[dataset_scale,ps] = mapminmax(dataset',0,1);' b8 F) Q4 `4 Y4 H' L e
dataset_scale = dataset_scale';' o, n( p$ y* I1 g$ M4 s k
- z& c4 V) K! Btrain_wine = dataset_scale(1:mtrain,:);, I7 `: N. O- q/ G) a% A
test_wine = dataset_scale( (mtrain+1) mtrain+mtest),: );
3 b: m- ~3 p; q9 b%SVM网络训练
( d$ [ A& s G/ M" {1 Zmodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
/ Q" B1 B3 t* }" B%SVM网络预测7 M: t" F" s0 n7 z$ K$ v# P
[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);- v) R4 Z7 T, f' I( v/ _" \5 V$ Y2 s
+ U' T: c0 }8 y8 e- P/ B b$ J# m; P
% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');0 T: l" X" R$ [/ ~) L3 D0 R& v
plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);% [, V6 P. @2 }
ylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');
! g' G( ~. M. ]5 Ytitle('测试集的实际分类和预测分类图','FontSize',12);grid on;
! h) D% r6 q8 L, Z, ]3 @( U$ n4 U1 G2 [' M& H
/ U4 H/ u/ K, r, ^8 d0 V【运行出现的问题】
& h" ]5 u5 b3 a' s+ v; V3 \??? Error using ==> svmtrain at 172
7 ]( {& h0 d$ |5 ~8 fGroup must be a vector.
5 o2 ?0 k+ `; U( o: x) m1 qError in ==> chapter12 at 60. ^, k+ M ?# R2 M3 R. a% y2 ?
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');6 M/ L& l/ |# q6 j! l
2 ]& F# m0 n7 ?* L0 G6 t1 d( } |
|