|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
close all;2 a% q& g" j3 O$ R
clear;* o, N5 {# v( J Q9 a9 U1 h& @
clc; v: [; P4 k- @) A9 Y
format compact;
4 D2 ~9 S8 p% C7 w+ x/ J8 r2 w/ A9 r3 q. {. r
% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
3 |8 O% t) x, {load chapter12_wine.mat;
" @8 D$ `% H2 \8 _6 b
( C$ A% S ]1 C5 e% 画出测试数据的box可视化图- ?9 |+ m) m) U$ `. U7 e2 F
figure;3 n: l7 y$ K( X! H$ j$ v# R/ h& R
boxplot(wine,'orientation','horizontal','labels',categories);& X( m9 D. k2 W7 V! H
title('wine数据的box可视化图','FontSize',12);
8 N; Z/ W. t1 _9 vxlabel('属性值','FontSize',12);0 y5 h. v* I0 @% r
grid on;
1 O0 _* y# d# a. Q4 r3 H4 C- ^! z: V
% 画出测试数据的分维可视化图4 `6 K& @' B( j r8 y; Q0 s! y
figure
. u3 |) P; n; `) c4 Tsubplot(3,5,1);9 X$ m* X! r' Q( \- S5 d
hold on9 u# J& O# W' h. w0 j
for run = 1:178
5 R2 H' M) u3 W1 q& D$ l r3 } plot(run,wine_labels(run),'*');
2 D8 G* U& }$ v6 s7 Y) e4 H! }3 m2 vend1 V1 y6 L$ X) v0 _& Z
xlabel('样本','FontSize',10);8 l/ Z% Y* _! k+ G* Y; E2 {
ylabel('类别标签','FontSize',10);' ]0 D# D: R0 F
title('class','FontSize',10);- R2 b4 x7 j& G' g3 x3 ^* q+ O
for run = 2:14
b1 ]2 d, d7 }; o4 J1 d subplot(3,5,run);
; r* Y2 {0 k* K2 u: l hold on;; U3 Y k$ T2 a) c2 T
str = ['attrib ',num2str(run-1)];- o% ~7 [3 k" t+ T, |4 T
for i = 1:1780 C) |) l6 d e2 W% t
plot(i,wine(i,run-1),'*');) L: ]7 M6 b/ F5 [
end
7 W4 \* `/ O9 S% V xlabel('样本','FontSize',10);
$ h, T0 E/ z0 q ylabel('属性值','FontSize',10);
5 A- T$ J) s# \6 L& N title(str,'FontSize',10);
. w8 j# r1 i8 @3 w0 h9 ~0 @end
; g' Z+ o7 i5 a9 X$ Z- F0 v1 a# Y9 F% z3 p& {$ D5 U2 p
% 选定训练集和测试集" r( x7 H' O( f. v
; j% z4 D$ l; I# S- j
% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集
7 F( y3 d4 ^+ ~' b9 @ C- Ttrain_wine = [wine(1:30, ;wine(60:95, ;wine(131:153, ];
4 o4 _" ^$ F8 b5 x3 J! X8 p' ]% 相应的训练集的标签也要分离出来
4 L0 R. J" }( j" }. @0 [train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
B9 M8 r0 t5 n: ~0 [- t7 s; }% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集! F8 Z+ [0 ?3 V9 e
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];. d# B- F* f# X& [8 [( A
% 相应的测试集的标签也要分离出来* m6 x" y# o" k1 |+ Q. y
test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
" b- C) Z- L2 V% T# h) q( G2 i, J4 K+ y! r" m# ~5 p! r
[mtrain,ntrain] = size(train_wine);
8 y' l3 s2 B0 @2 @0 ?+ k/ R7 e[mtest,ntest] = size(test_wine);
2 f" d- w/ A5 B* p
* d: e8 b% i9 c6 a j) qdataset = [train_wine;test_wine];
0 [1 N. t3 a _" y% mapminmax为MATLAB自带的归一化函数
7 p! g/ w0 `0 d3 _- ~( e[dataset_scale,ps] = mapminmax(dataset',0,1);% c9 @* R, P, y5 I! }
dataset_scale = dataset_scale';: d7 c& S9 k. {* S& T8 k
. h. |2 v& l/ E9 {train_wine = dataset_scale(1:mtrain,:);
; h# N: H) @& l6 l, \; C: w- vtest_wine = dataset_scale( (mtrain+1) mtrain+mtest),: );1 v1 ^, k+ f5 t6 t
%SVM网络训练4 |' ?+ a8 k3 O5 h: j( \$ ?# p) L: D
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
! p. a9 n( ?& i' o%SVM网络预测( D8 [/ a6 W% k6 p* ]
[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
( W, @. g, `8 l- |( E; z3 H7 E* W V/ ?1 ~' `! L( J9 }
% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');$ P% b( F# `, f% r+ ^8 A
plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);
1 T, }8 V# x4 v2 F" i7 Xylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');
8 `7 J; @0 J1 a8 e# r' Dtitle('测试集的实际分类和预测分类图','FontSize',12);grid on;) m8 ?( ]2 {. |
8 a3 Q& A. X" I% p6 C
3 \5 C# n, J2 K9 [- P【运行出现的问题】1 y4 j- E; h% R4 m2 {4 S$ g# U! j
??? Error using ==> svmtrain at 1724 L3 D' z6 z7 V* V' |) }, k. c
Group must be a vector.
( E" o" d( }5 B2 OError in ==> chapter12 at 607 g2 ^2 J) ]+ k, d
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');6 }! z- d0 L6 b- y* r
3 H s- ? t+ c3 V/ H
|
|