找回密码
 注册
关于网站域名变更的通知
查看: 636|回复: 3
打印 上一主题 下一主题

关于SVM神经网络中svmtrain函数的一个小问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-12 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

该用户从未签到

2#
 楼主| 发表于 2021-3-12 14:36 | 只看该作者
蹲一个大神

该用户从未签到

3#
发表于 2021-3-12 15:05 | 只看该作者
在命令行下面输入:
: ^( m# W" r- i. u2 D9 O* }
1 l( D" j( S! M9 W/ w; Ewhos train_wine_labels
* F- e5 Q9 Z' H- r' ^5 ~4 R/ D
0 e9 P1 R3 i) x. w9 }# r' U/ m5 rwhos train_wie
8 m& T- v0 Z9 c8 K, S+ w: v: E$ L+ g/ i7 v, x
这样你可以知道参数的类别,该错误信息提醒你参数必须为向量才可以。

该用户从未签到

4#
发表于 2021-3-12 16:03 | 只看该作者
载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量9 W  D# i8 g1 Y0 h0 F1 u

3 N- \9 U' l* q因为原始数据wine是矩阵,而不是向量 所以运行whos train_wine后如下显示9 }& P8 q/ R% j3 K$ H# \" e
>> whos train_wine! X! j" F( O9 a' D7 u
  Name             Size            Bytes  Class     Attributes  ~' d) H5 x0 B( o/ E

+ \3 n2 ^  o! z: v2 Q5 {  train_wine      89x13             9256  double   
3 R8 W0 Y5 L! g. o: U- ]  o7 Q7 p1 w3 a& w3 y
那么此例中的svmtrain函数就不能应用了么??必须要改原始数据吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 02:44 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表