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

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

[复制链接]

该用户从未签到

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

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( }

该用户从未签到

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

该用户从未签到

3#
发表于 2021-3-12 15:05 | 只看该作者
在命令行下面输入:
6 d" r+ p* }, e" F
# g" I& }$ U; ]1 cwhos train_wine_labels
) @' E; F+ j2 T9 @+ @) g. Z4 ]2 w+ d6 }0 h) g8 y6 {
whos train_wie
, p. e5 n+ `8 C6 i7 \  T, S( U- _$ y
这样你可以知道参数的类别,该错误信息提醒你参数必须为向量才可以。

该用户从未签到

4#
发表于 2021-3-12 16:03 | 只看该作者
载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
$ z: l6 a5 X6 V5 C& F2 e1 u/ g2 ^4 S& w) Q4 h1 |, _" C
因为原始数据wine是矩阵,而不是向量 所以运行whos train_wine后如下显示" k% T  g4 }( u+ Y6 h8 N
>> whos train_wine0 g6 G% g, M7 \2 }+ S
  Name             Size            Bytes  Class     Attributes
& e3 F( J  u0 J! P$ O  `
0 j3 K# \7 Y( Q$ ?3 a$ G  train_wine      89x13             9256  double   
/ k  \' ?4 A, E/ H6 h/ E- S* `6 E& S/ B3 y6 ]& T3 x
那么此例中的svmtrain函数就不能应用了么??必须要改原始数据吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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