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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
close all;! H% ]" v9 i/ \
clear;- J3 ]" {: S4 H. _! |, _
clc;0 j6 G9 N1 K9 }$ t
format compact;
, x' ?' R9 O" Q- w6 k, b# g
" w7 _; O" j2 e7 S% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量6 K# M3 x+ w5 j( f6 g$ j8 ~0 a
load chapter12_wine.mat;) G+ Y" {' V/ B
; s  y  i, v% U2 R8 b5 G
% 画出测试数据的box可视化图! o/ o3 D' y# H+ p+ @
figure;% A. H: I" W  h/ I( f
boxplot(wine,'orientation','horizontal','labels',categories);" u) X0 y; n  a0 m  }" Z- ?0 U* k
title('wine数据的box可视化图','FontSize',12);% C- e2 e8 J" N3 Z
xlabel('属性值','FontSize',12);  W. k' D" n& n; @
grid on;1 L( r/ x/ m7 g2 M$ C

5 }' U, _. {$ i' l) l% 画出测试数据的分维可视化图
* _1 @, t8 y# Q. pfigure
: k+ c/ j5 o* O9 c: u! V7 lsubplot(3,5,1);' ]3 b' p5 K6 c$ o" g% ?
hold on2 L2 y: }5 ]* u
for run = 1:178
) t+ a" \) G$ l+ I; g* J    plot(run,wine_labels(run),'*');$ V* N5 b- {0 F8 N/ {
end
3 K; \# d& y7 Z' l: S/ I7 y" A0 D- dxlabel('样本','FontSize',10);
' y8 P( ~- s! j, Dylabel('类别标签','FontSize',10);/ v- ?; p# G# H3 y$ K9 q
title('class','FontSize',10);
; T9 w) @& [* \! K  ^for run = 2:146 P* t. Q( {( M- d
    subplot(3,5,run);1 w* H! N8 F! {9 D) r& M
    hold on;
* }$ C- n" v0 s. @' P* m    str = ['attrib ',num2str(run-1)];& H8 L1 C1 I- I  l3 G! M$ @2 i
    for i = 1:178" k/ L% m) I1 M, L3 _3 }
        plot(i,wine(i,run-1),'*');
7 e" X1 x+ h3 U8 ?    end
9 D6 {- U( q" p. J5 o" D2 u    xlabel('样本','FontSize',10);$ ]  {: a1 v* {9 ~: M
    ylabel('属性值','FontSize',10);
- `4 e' X' Q5 R+ Q    title(str,'FontSize',10);
1 X, u1 D' K! Q7 W" r; pend) r+ e( f+ W& r3 l

- f' |+ g) i9 T, X9 |( o3 M% 选定训练集和测试集
' Y) S* f( j6 q6 g
0 i0 J+ A% L9 @9 D- a% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集/ t) m6 W" S% I& [- D( m2 ^
train_wine = [wine(1:30,;wine(60:95,;wine(131:153,];0 @" a1 s1 J5 M3 d2 x6 ~
% 相应的训练集的标签也要分离出来/ X9 C# M& z( c! P8 {
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
6 ^& [# X+ W7 }% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集0 Q( c: I. ^, v  K! B' E8 W( S( O
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];" j0 ^* ?% A$ Y7 l+ o
% 相应的测试集的标签也要分离出来
( y) x6 P7 w0 U3 p1 Ztest_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];6 G6 ~* x7 f2 i8 U
; q/ A! t  A; ~7 Q' a0 w
[mtrain,ntrain] = size(train_wine);
! C# V1 X$ _- N8 z4 S. Y[mtest,ntest] = size(test_wine);% Z6 b5 u7 Z7 w, P/ G$ e0 _, {

8 r4 x4 }# `! F! Pdataset = [train_wine;test_wine];
, d( f% D1 q2 P( W, k, m. F% g& k% mapminmax为MATLAB自带的归一化函数
% {" D! Z5 H6 K9 A[dataset_scale,ps] = mapminmax(dataset',0,1);
( O3 x+ o3 N/ W* q8 |dataset_scale = dataset_scale';
7 G2 h% s+ m& m$ h: x: [+ ^" p0 O, e; `+ l
train_wine = dataset_scale(1:mtrain,:);' w# s7 A6 O$ j# H  N5 u7 c
test_wine = dataset_scale( (mtrain+1)mtrain+mtest),: );/ e* A2 |! r1 i- D) U8 x, e# a1 o' N
%SVM网络训练: `; s0 N4 l1 ?+ ]3 g6 }3 w
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');* s2 ]( B5 c" T4 y; m4 o8 _( u
%SVM网络预测# M+ |$ C# y/ A) O
[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);+ M* R' p* R# n! p

( A1 |- \- e" a0 ?$ h9 |% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');
' R( e1 A$ v4 k6 H) ^+ F. |6 Hplot(predict_label,'r*');xlabel('测试集样本','FontSize',12);
/ {! b7 \& r7 T" e6 Sylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');
# M+ V5 C/ C$ z' s- b8 Mtitle('测试集的实际分类和预测分类图','FontSize',12);grid on;$ w  D( B8 N4 a# N
0 }  T# l$ i$ z$ ~+ ?: O
0 Q4 Y% j, K+ Y  v4 f6 m
【运行出现的问题】
3 U: l* L4 L! M: z" k??? Error using ==> svmtrain at 172
! `: {+ z( z/ y7 c: y* p0 w" }4 ~Group must be a vector.
* D, `5 [  w* c" I) AError in ==> chapter12 at 60" L2 e/ ?& L3 {/ k) L
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');

; E. c2 H* v7 G# E# N" `# m" T
& E+ C, u1 c8 O$ L

该用户从未签到

4#
发表于 2021-3-12 16:03 | 只看该作者
载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量+ U$ B" n0 H7 j: T7 T) Q" S& j

! H. d1 N5 Q& |  K6 F) @因为原始数据wine是矩阵,而不是向量 所以运行whos train_wine后如下显示7 _# c; n  i: F1 ?7 `$ }
>> whos train_wine/ x2 O+ y" Y" p& w9 z$ U
  Name             Size            Bytes  Class     Attributes- {# _; D9 k2 j) X+ w- b

4 Q/ z1 P" {5 y* n$ f  train_wine      89x13             9256  double   8 K2 V  \) f+ m- v3 V, c$ P7 e! c
2 T( `  I: g* t9 s1 l5 ]; l
那么此例中的svmtrain函数就不能应用了么??必须要改原始数据吗??

该用户从未签到

3#
发表于 2021-3-12 15:05 | 只看该作者
在命令行下面输入:
/ D5 X  z* V9 a" I) Q  ^: n0 E7 b4 f6 q2 G9 f
whos train_wine_labels
  c8 l; M2 S& y
4 i/ D4 E/ w3 z& Y7 twhos train_wie
! j& a1 {: e5 h! G2 x8 r
( K3 N1 q+ E2 ~( g# Z. |6 D1 |这样你可以知道参数的类别,该错误信息提醒你参数必须为向量才可以。

该用户从未签到

2#
 楼主| 发表于 2021-3-12 14:36 | 只看该作者
蹲一个大神
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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