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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
close all;' H" [  I* b0 F4 z6 I8 U$ ]
clear;
% g" v$ k) U/ U2 P0 H6 Y" Lclc;  h2 m5 c7 k! J, L+ F  v0 a, P+ k
format compact;
3 e' N# E2 X% g3 A7 f$ v0 ?7 }+ T  U; f& F3 y- }
% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量: @, g4 t' p" D. T% s, ]* U
load chapter12_wine.mat;
  Y- _2 M$ x" b" e3 P2 B3 u' T4 H+ }
% 画出测试数据的box可视化图
% C, M4 ~$ Q' Q- J$ R- bfigure;
1 X! i8 s: x) x7 ]0 Oboxplot(wine,'orientation','horizontal','labels',categories);
6 a; k% P. c- }6 @* atitle('wine数据的box可视化图','FontSize',12);
  K2 b$ H# Z  j9 m- pxlabel('属性值','FontSize',12);4 l0 ?# x8 D8 _' {1 R  l4 z
grid on;
9 \- ?2 r2 w7 P0 d" w
( w) f2 X& P, H% ~% y6 f% 画出测试数据的分维可视化图
$ r- A, ?% q0 i0 g$ cfigure. o; y8 S6 z5 K; I; y1 f3 V
subplot(3,5,1);. o6 c0 D/ S- x4 L/ f! F5 j
hold on+ v% B- G  {3 N# m
for run = 1:178
; K6 }! `) Q7 @' Y    plot(run,wine_labels(run),'*');
0 w- `% ?3 |& _% L; }3 ^3 uend, _* @5 u4 h+ e2 F% H3 r
xlabel('样本','FontSize',10);* A# c3 `# J' U- y' \% P2 T
ylabel('类别标签','FontSize',10);6 C# \  U! Q$ F% O# ]- o$ K8 {- V
title('class','FontSize',10);
8 [& b5 m& C6 ?1 v. q4 wfor run = 2:14
1 N; j7 a0 Z) V/ i6 W. p    subplot(3,5,run);
0 @( }3 S/ Z: L; v& P    hold on;6 x7 \( }5 F6 F5 P- x6 ~: x
    str = ['attrib ',num2str(run-1)];
3 w7 x7 Q# U6 \6 c    for i = 1:178
9 Q) o$ g5 Y! I+ h        plot(i,wine(i,run-1),'*');
' H/ u. e: q9 |4 _. r    end2 I- v/ Z" `9 T$ t9 U' b+ `
    xlabel('样本','FontSize',10);
' \6 g% s, ^  G+ \( ^. G# R, C    ylabel('属性值','FontSize',10);
5 n2 `/ {- T* o; j9 @    title(str,'FontSize',10);
" k: x! D1 a6 hend% L9 X* N2 u  W4 p% ?: n" D, {

! g% t( m& q+ J  ~* g+ P. U" {8 e5 c% 选定训练集和测试集
( d: U+ h! G9 ~  L) ]
7 |9 {& V: m3 Z; T( S/ p" h5 t: q, ^* s% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集; v7 o# o5 ^& D* D
train_wine = [wine(1:30,;wine(60:95,;wine(131:153,];
" T( f! x# ]' n: K; R, f: ]% 相应的训练集的标签也要分离出来
0 G2 U( e. j% C8 H& Z% ~7 k" {train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];* c) ?. m" r6 b9 ]; _
% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集; P" v3 _) }, h+ c
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
8 c, V/ n: ~1 D: f$ F0 O+ K% 相应的测试集的标签也要分离出来
& k: o2 u6 s- l. ltest_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
8 T3 h+ W1 `' @! i$ Y) _& U8 Z  D5 ]' N4 T
[mtrain,ntrain] = size(train_wine);: S% L& |# L: Q) X" B2 d' Z
[mtest,ntest] = size(test_wine);
2 l: l" i- U6 ~/ d: u# D! |7 l, a' |% Z2 I6 m
dataset = [train_wine;test_wine];
2 n% x2 L  x: z. t3 v6 E- V% _% X% mapminmax为MATLAB自带的归一化函数. i0 R& c# V9 `- b. u- z- x
[dataset_scale,ps] = mapminmax(dataset',0,1);
# @# P  T3 x/ P0 a$ p  Odataset_scale = dataset_scale';  W; ^6 w. j1 i

; D) J. }$ y8 [- a; @2 }0 f: J  Wtrain_wine = dataset_scale(1:mtrain,:);, G" d( m) N" Q7 [$ @$ p
test_wine = dataset_scale( (mtrain+1)mtrain+mtest),: );
! Z8 D  }( X) J: c4 q# ~: q%SVM网络训练% t3 L$ M6 O$ G. {0 P$ s3 M) t5 ]
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');" f) V0 n" |6 ]
%SVM网络预测
; Z: T0 [6 W: H( `3 V1 q[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
) s6 P% n6 q. }4 y( K3 |1 R) s$ T8 z, A1 @+ Y2 s
% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');
" v/ W3 [4 x  R! b1 o) _+ }plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);
  \% ^' g2 c$ I& P7 {% jylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');
- G8 _6 n  e8 ntitle('测试集的实际分类和预测分类图','FontSize',12);grid on;
  }* D1 J! T2 |" f7 T! w
' B/ f0 M% T+ U+ j: V! V2 U3 q1 ]
6 ]: M" }, W/ G9 B
【运行出现的问题】( [$ B2 B3 {9 d, z  E- t
??? Error using ==> svmtrain at 172
3 J$ x4 a$ T" mGroup must be a vector.
  \: P) G. Q! V- i) G  k2 `Error in ==> chapter12 at 60
* ]6 I: f$ K* Cmodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');

( I' Z5 O$ ?( T+ ~) A. q2 R/ I! q- y" J& A) e

该用户从未签到

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

该用户从未签到

3#
发表于 2021-3-12 15:05 | 只看该作者
在命令行下面输入:
4 t) N* B% U- f  i
6 N) C7 Q1 f0 F" M; L7 Mwhos train_wine_labels
) n* f* i; s- l+ Q; i2 p! R/ A7 n1 x8 j8 r5 j. T
whos train_wie
7 ?5 w3 G! w; R" p4 W; L
8 `: k/ `. s9 @5 H这样你可以知道参数的类别,该错误信息提醒你参数必须为向量才可以。

该用户从未签到

4#
发表于 2021-3-12 16:03 | 只看该作者
载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量- P  q) q) r; O9 F! H. }

+ G5 z# G5 W0 E- t% H因为原始数据wine是矩阵,而不是向量 所以运行whos train_wine后如下显示
& a  d, k/ l) O: d3 N: u  W8 E# c/ U>> whos train_wine* z( L2 X0 A, N. t
  Name             Size            Bytes  Class     Attributes
# A9 E- U7 Y% V5 [, V9 \# ^" ]; p7 Z% O! y/ x, Y. A& |4 G
  train_wine      89x13             9256  double   & O( c/ d5 h5 E7 @" o; [) m

$ W  D2 w2 S- E4 \% q那么此例中的svmtrain函数就不能应用了么??必须要改原始数据吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-5 03:06 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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