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

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

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

该用户从未签到

3#
发表于 2021-3-12 15:05 | 只看该作者
在命令行下面输入:
' W/ |" g2 J, E3 D4 g+ N; t6 |0 T1 L% ?6 z  c  g5 R
whos train_wine_labels! L) U2 N' b1 P! \1 p/ X

0 _! P1 y. Y$ ]6 U# D% p+ ^whos train_wie# a! y1 x) S" U6 u, y( F1 i4 u6 Y

& _$ F$ ~. Z+ x  S; K) s6 t这样你可以知道参数的类别,该错误信息提醒你参数必须为向量才可以。

该用户从未签到

4#
发表于 2021-3-12 16:03 | 只看该作者
载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量, [0 p  j" E0 D! {0 P

% ~# h2 D# U& ]) \& |8 ^) z因为原始数据wine是矩阵,而不是向量 所以运行whos train_wine后如下显示
1 _1 J( {- g2 s9 M4 B1 H>> whos train_wine
5 n! b$ H+ b' ^0 J( H( C$ u$ S/ n  Name             Size            Bytes  Class     Attributes; ^3 ~! e* f% ?% S4 Y7 ~
: B. ]+ T, h: ^
  train_wine      89x13             9256  double   + A! G6 E1 g4 ^' s7 ~% _7 y- E9 i9 Y, @
. m. V8 C6 N1 k) T  ^2 q
那么此例中的svmtrain函数就不能应用了么??必须要改原始数据吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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