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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
close all;
! q: j9 A5 U0 C0 U$ E2 M0 t. s, P! cclear;; {% |2 @& g/ u. d. _
clc;: g8 h3 X! x: Q/ {7 s, l% e3 f4 p0 Y
format compact;4 o2 ~% H8 K  U: g" e- M9 D0 {

2 ~- U0 }% A- N0 N$ g3 K1 l! P% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
  a; S1 Q; |7 J' w+ g9 lload chapter12_wine.mat;
) s; r) u8 k+ m, o6 E9 J' T& P8 Q! \& j1 f) R5 N; t' D
% 画出测试数据的box可视化图
4 t7 u$ Q/ d5 I9 K/ d' r* tfigure;+ Y8 o" ?, @9 ?
boxplot(wine,'orientation','horizontal','labels',categories);7 F  a5 L+ _, j+ E
title('wine数据的box可视化图','FontSize',12);* e% G, q( J7 M" `
xlabel('属性值','FontSize',12);/ T& h4 @* K2 f' q! ?
grid on;
8 ~) c& p3 T. ?/ B: g6 x
/ d$ ^9 p- y. Q% 画出测试数据的分维可视化图
' S9 S* ~' m6 r; Kfigure0 [2 t/ v( t2 t: G0 D6 B1 S- {$ z
subplot(3,5,1);, U0 R, `7 u" U6 ^
hold on7 I6 }, I0 R% r1 Z. I
for run = 1:178
' k( \% S# O% r' j* t    plot(run,wine_labels(run),'*');
+ n3 R+ K- Y2 h. G$ X* jend
# Z" |7 `7 `, ?4 g( wxlabel('样本','FontSize',10);1 v& [  ?2 w4 A3 P) g; i0 w' d, E
ylabel('类别标签','FontSize',10);6 {( [9 `1 j% B, |7 G# U, x6 m* T2 m
title('class','FontSize',10);
0 w) y" E6 s. s/ bfor run = 2:14
% O: u7 h6 I, t6 k  z3 b    subplot(3,5,run);
' ^/ r: ]9 G+ I( f5 N4 I$ v6 @    hold on;% x0 e+ G% e' S& ~3 U% @' o
    str = ['attrib ',num2str(run-1)];( S4 D3 E; {6 y  b
    for i = 1:178
) [+ s* x$ |# M9 Q" ~        plot(i,wine(i,run-1),'*');; ^- `% S% l0 i7 M& }* ?* @- x
    end
- `" O. {! A3 L2 G    xlabel('样本','FontSize',10);
( c: v! X% n% A  E" p    ylabel('属性值','FontSize',10);- O$ L2 z5 v9 Y8 _- N! P
    title(str,'FontSize',10);3 _$ a  G" b0 g! L4 U- {& m. Q3 P
end
; N9 b9 U; i; Z, B: H1 M( R  f/ i  t% _, J; N7 r
% 选定训练集和测试集
, a# I, N% h2 M" v2 V  w2 X  d% x( P
% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集+ Z- p. {5 ^9 _2 p5 C6 F( J
train_wine = [wine(1:30,;wine(60:95,;wine(131:153,];6 y9 s8 d, E3 `3 M& ^1 `1 i/ G
% 相应的训练集的标签也要分离出来
' P( P; B# m; A% Rtrain_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
, a: X# i) u- Q% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集( Q$ ~5 R1 F% }3 |2 V
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
6 b5 j+ U( |( N, w  |% 相应的测试集的标签也要分离出来- e! i: |' n3 @
test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];0 L2 W+ q# I; i
8 a% I( D" F% h# f" H" A
[mtrain,ntrain] = size(train_wine);
/ M& C+ H% M  O[mtest,ntest] = size(test_wine);
5 r0 ~; C% t% U- @. {* Y$ Z, f& ^% m. b& N& Z. k! a: @
dataset = [train_wine;test_wine];
3 w( k/ J: m' P9 u- a% mapminmax为MATLAB自带的归一化函数
8 x9 f0 N5 b. X: i" _  m[dataset_scale,ps] = mapminmax(dataset',0,1);! ~- f7 L3 h3 P
dataset_scale = dataset_scale';0 |! R4 u9 G9 _( d; z; P
; I! V( S' O8 Q+ o6 E. Y* g
train_wine = dataset_scale(1:mtrain,:);
5 O0 `1 I2 g5 K$ jtest_wine = dataset_scale( (mtrain+1)mtrain+mtest),: );5 p) g8 h- x* L3 l$ N8 ]2 y' U
%SVM网络训练
0 P( W' a* l& H* B5 s3 a3 Vmodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');% z) ^6 [6 s* M8 |- N& `* l. w
%SVM网络预测
6 X1 ?0 h8 D: E) Q: {5 T* [[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
. @) F6 ]  x! N! \: l$ Q' O2 {. ~! V' f; D0 r
% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');
" `/ r, l) l1 @6 t* ]plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);. y! P  X7 c, N2 A0 q
ylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');; y1 Y. M6 A( c# A  Q3 H) h' R
title('测试集的实际分类和预测分类图','FontSize',12);grid on;4 T, u- d' {! r6 X9 c" j
; ]: o+ k3 ~, Y! ^& h& b. m

, `8 p' O- g, n3 |9 I. N( B6 ]) p; y5 M【运行出现的问题】. p- }) R8 _# u
??? Error using ==> svmtrain at 172
" U: j4 s$ Q' x; }Group must be a vector.
/ F1 _% L' x* \Error in ==> chapter12 at 60
7 V$ Z9 k- ?" k7 g! B1 Imodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
8 p$ R+ V+ C/ A# ~, x

3 O5 ]- h: B( q  W

该用户从未签到

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

该用户从未签到

3#
发表于 2021-3-12 15:05 | 只看该作者
在命令行下面输入:% S) X8 p1 O$ r3 D; q

) h- i& e' w# t2 X. `4 x; z" F. ]whos train_wine_labels
  X9 _4 g! }2 ^+ N
2 V, L5 E" R- j+ g6 rwhos train_wie. s  Q# @- w+ c2 K
- ]* G7 p& \) o' N
这样你可以知道参数的类别,该错误信息提醒你参数必须为向量才可以。

该用户从未签到

4#
发表于 2021-3-12 16:03 | 只看该作者
载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
! A. z9 d9 Q! ?/ g5 F& U& F5 b" r9 ^9 z# |4 b* c
因为原始数据wine是矩阵,而不是向量 所以运行whos train_wine后如下显示
% _% C) s5 m; `0 b/ G$ w: `! z$ [. m>> whos train_wine
% d# z7 q$ X" {# Q- a# }  Name             Size            Bytes  Class     Attributes% g1 r! Z! r& Q! q# \6 }; j

- F. G1 n7 B. p5 A! b9 u/ h, e  train_wine      89x13             9256  double   2 B1 t, L: x$ m. o" ], ?' Z

& R! n/ {* Z# A  X0 b那么此例中的svmtrain函数就不能应用了么??必须要改原始数据吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 11:15 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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