|
这是按钮的回调函数,KNN是其中调用到的一个函数5 n) W. z [6 y% n
function train_Callback(hObject, eventdata, handles)8 m& h4 F$ T) H2 u r
global fea
s x' n+ x2 A2 ?5 i6 Pglobal classifier
( f3 _- P, I6 T- a, `! t+ wglobal rnum
5 T% a) g- P" D2 \$ M# |
5 s3 A. k: ~/ N1 A: w6 V# r$ I load('feature.mat');
# N+ L3 `; w4 B7 X/ s( C% D& r4 o load('label1'); _! e( l7 o9 N" v
if fea==[0 0 0 0 0] S" o0 f: g3 E$ l: G$ @4 o
errordlg('Error!Please choose features','Error');
/ U5 x. J5 Q# [% R" ]8 H) a elseif fea==[1 0 0 0 0]. ~, j( a; {. H2 q0 [
feature=[ampmat];0 v5 j2 Q! f( q b l/ M( s3 ?
elseif fea==[0 1 0 0 0]% I) w- d: [( m
feature=[energymat];" E+ k ]6 ~( Y& H" ^% E
elseif fea==[0 0 1 0 0]
5 b: c; Z* N4 L feature=[entropymat];9 ^5 r: V7 b; m, P
elseif fea==[0 0 0 1 0]! X% Z, S0 U2 B4 b
feature=[fremat];
# o9 K5 x( ^! I4 c* q elseif fea==[0 0 0 0 1]
5 H+ M' t& j8 H0 R" u% J, n feature=[mfccmat];
3 T& ?( n( n% F& [# k elseif fea==[1 1 0 0 0]
, C% U3 x9 S, E; U: B feature=[ampmat,energymat];
, w8 D5 L# y( h elseif fea==[1 0 1 0 0]
: t+ B, q) Z( a/ D* x$ j feature=[ampmat,entropymat];
8 J- M4 K) h* K! x- W1 x elseif fea==[1 0 0 1 0]% A" T+ J+ Y6 W/ {* E- a; V7 E* H
feature=[ampmat,fremat];
. S0 w* X% L- `4 K# `7 q5 j elseif fea==[1 0 0 0 1]# F3 l3 H- C* `3 O q
feature=[ampmat,mfccmat];5 o9 I+ a% m. V# L+ R4 r
elseif fea==[0 1 1 0 0]8 ?4 X+ R$ Y7 \
feature=[energymat,entropymat];! }5 |; l7 ^8 U4 n3 ^2 u; k
elseif fea==[0 1 0 1 0]/ \. p% N; ]) Y& ~
feature=[energymat,fremat];8 T0 B) j! a# S) {
elseif fea==[0 1 0 0 1] L1 d& K( R# n
feature=[energymat,mfccmat];0 M8 g* V( n0 f C( ~" q8 d
elseif fea==[0 0 1 1 0]! J. U) p6 ~$ e0 A4 W& z
feature=[entropymat,fremat];
9 Q( H2 n# H! ?9 ~) r! r elseif fea==[0 0 1 0 1] q5 L* [6 [! F/ p K
feature=[entropymat,mfccmat];7 A% x, R+ p4 j" E, j7 D3 h
elseif fea==[0 0 0 1 1]
9 m! |6 |6 F# |( o: ] feature=[fremat,mfccmat];/ ~$ k/ w2 S2 T. f2 E
elseif fea==[1 1 1 0 0]
, s. Z0 \: E$ J: y$ |3 K feature=[ampmat,energymat,entropymat];
0 `/ b P, @& z elseif fea==[1 1 0 1 0]) C1 y& h3 k0 s/ S) x- N c
feature=[ampmat,energymat,fremat];1 C" o0 w/ `! W0 v
elseif fea==[1 1 0 0 1]
: Q. I: `9 c+ i; C, ?2 s feature=[ampmat,energymat,mfccmat];
$ t" w* b+ X x4 \) C& W elseif fea==[1 0 1 1 0]- D: s- {1 v+ {7 f8 r
feature=[ampmat,entropymat,fremat];, {, x& Q% e# ~, g
elseif fea==[1 0 1 0 1]% R# H$ g s" ?' g! a+ e: g6 _0 `
feature=[ampmat,entropymat,mfccmat];
+ o. T5 l9 N7 |% l: V elseif fea==[1 0 0 1 1]6 Z" s* |. l/ C4 C, |6 n( \! j
feature=[ampmat,fremat,mfccmat];" |2 x2 z6 G+ @# N, K
elseif fea==[0 1 1 1 0]
% `& a, w7 ]1 W9 Q8 T feature=[energymat,entropymat,fremat];/ \" v' c6 x& X6 H- G6 w4 Y
elseif fea==[0 1 1 0 1]- i" u+ N' }7 o, R4 y. L2 Z5 C
feature=[energymat,entropymat,mfccmat];
* f; N0 `! E* L. w# ~6 n elseif fea==[0 1 0 1 1]* b, n% j7 y7 n& X7 M9 C' T
feature=[energymat,fremat,mfccmat];
! D' |& D9 @7 P N: t. D elseif fea==[0 0 1 1 1]
$ c- c; f) Z1 L feature=[entropymat,fremat,mfccmat];# n) R* C* l2 f
elseif fea==[1 1 1 1 0]+ M9 N9 r" j" X ^3 z% n8 p
feature=[ampmat,energymat,entropymat,fremat];7 j# t9 ~% m! H/ S( u
elseif fea==[1 1 1 0 1]
6 [$ T8 Y. B- I$ b4 k5 g& X& N feature=[ampmat,energymat,entropymat,mfccmat];
; m/ w; h5 m4 a elseif fea==[1 1 0 1 1]1 r1 Y7 r$ K0 b# n, s
feature=[ampmat,energymat,fremat,mfccmat];
2 V' a6 t- X- A9 ^, g+ \* P elseif fea==[1 0 1 1 1]! r0 q. _* v' G' g2 {4 u
feature=[ampmat,entropymat,fremat,mfccmat];" d8 _6 e4 X! V
elseif fea==[0 1 1 1 1]# j# X: F# e) D# s3 o" B2 W; P# S
feature=[energymat,entropymat,fremat,mfccmat];0 o* W! c. q7 w
elseif fea==[1 1 1 1 1]6 J; X/ o' t1 b% f( P/ ]
feature=[ampmat,energymat,entropymat,fremat,mfccmat];
; W! h# w% G M else
, N+ P# a; F( n4 @ errordlg('Error!Please choose features','Error');7 v+ C' @$ x8 I. U+ m. q
end$ b0 {- j1 W2 w$ R
" O9 u7 i V7 T1 d
; r# V. w2 m ? E* U* O
r=randperm(600);
* R: O; ?+ X" W I7 @; z4 P X0=feature(r, ;$ P* ] g$ S, E* M
Xtrain=X0(1:420, ;
, f3 n3 l$ N/ u' \& ` Xtest=X0(421:600, ;
; G" S# a- [# d& j O6 _ label0=label1(r,:);. y7 k/ E; I6 r& Q5 k& O3 X
labeltrain=label0(1:420,:);$ X0 f! n& y/ T: X" C
labeltest=label0(421:600,:);
1 L9 {9 w$ \! z TResult=KNN(Xtrain,Xtest,labeltrain);
% p8 y5 D/ Z5 z rnum=0;
' w' J2 _( p3 l5 M( k' R for i=1:180
8 j0 c( O7 ]1 O# v! `$ z if TResult(i)==labeltest(i)
+ T* F3 X$ R6 \% y( y) G rnum=rnum+1;
9 ^0 \" M8 J- D6 ^" Y* G$ i7 g end
2 ?3 I9 {4 ?5 i/ n end
0 U0 S6 e% o! K% g7 q$ j
d% P; @) T2 Q. Z% ^9 C set(handles.edit1,'String','loading completed');
* M% f0 E- ^, Q) d set(handles.edit2,'String',num2str(rnum/180));$ H8 J! R1 s( |5 A* }1 Y& e) ?
; \1 [0 I! ~+ m/ {& Kfunction result=KNN(train,test,trainlabel)
. T* B; K6 v* q m1 pk=2;
- S$ c8 A: x4 A' Qtestlength=length(test(:,1));* }/ Q) ]! H3 X, R9 J
trainlength=length(train(:,1));$ _/ ^0 J( t3 j/ [8 k4 U* `* J
for i=1:testlength8 a9 u- Y- a0 z2 G
dist=zeros(trainlength,1);
- d! f" z j. ~- E! i for j=1:trainlength
: _' T( \, G) Q dist(j)=distance(test(i,:),train(j,:),1);
" c: P9 Q2 E, x9 D$ M [8 ? end8 s2 d) `2 b9 b; l' O: l
[Y,I]=sort(dist,1);. _+ @9 i, b( M( ^/ y' b% ~
k=min(k,length(Y));
, ?; G& n" x5 Q9 e5 w/ A8 g( F labels=trainlabel(I);; ]. k9 ~' R# J
result(i)=mode(labels(1:k));; H+ r: L8 e+ L2 V& O
end |
|