|
|
这是按钮的回调函数,KNN是其中调用到的一个函数; N: L- _! _" W* w$ ~
function train_Callback(hObject, eventdata, handles); P4 I+ x' ?0 q- O' l {
global fea/ y" B8 ?6 o0 A/ z, f4 d6 o
global classifier
, a) [3 K$ d" d& c# J( Yglobal rnum2 P, d; f, J _" f. k
4 c+ \& W7 ^; r( D load('feature.mat');. d& U9 |: h( f" _: x4 T& K* D; ?
load('label1');% h' @7 ?1 l- m% ]. x
if fea==[0 0 0 0 0]8 O4 f* V1 p9 ?8 v6 [" n9 Y3 \
errordlg('Error!Please choose features','Error');7 s' m) r1 }' J1 B& w9 A. }0 Y
elseif fea==[1 0 0 0 0]
8 w3 M5 C5 P7 v" v( \0 { feature=[ampmat];* Q& B7 L9 h( m9 r6 Z k% S) S
elseif fea==[0 1 0 0 0]
; r& P2 t$ v# r! A feature=[energymat];
6 v% _7 } b* F% j4 q) h8 `) o/ O elseif fea==[0 0 1 0 0]
1 d* Z! ~7 R# O. \8 D feature=[entropymat];# N9 p% k, f- J! a6 `+ ^' z1 M7 ^/ [
elseif fea==[0 0 0 1 0]& h, Y; R& S7 S# z
feature=[fremat];
- E( h+ q* {0 W elseif fea==[0 0 0 0 1]
- _& R& p" F$ ^, J: P; ]# ~ feature=[mfccmat];
* P4 B) D2 L: f; C: k/ @ elseif fea==[1 1 0 0 0]
( l* u1 v+ E! @( y" ^ Y8 r" { feature=[ampmat,energymat];6 Z! J( H$ f/ n; N0 G- \
elseif fea==[1 0 1 0 0]" B3 E9 w$ _' O
feature=[ampmat,entropymat];" P/ F' Q% k3 U5 R4 b+ s4 {
elseif fea==[1 0 0 1 0]7 A! z5 G0 P# J$ \
feature=[ampmat,fremat];
: `" s! D5 h" L4 ?' Y, u elseif fea==[1 0 0 0 1]
/ F! l6 F: d4 q: n) s feature=[ampmat,mfccmat];& @3 U2 J% g. K. q* H5 B& K, Z3 w
elseif fea==[0 1 1 0 0]# ~ S( y( F$ E4 L: z) n/ M
feature=[energymat,entropymat];: I* U7 s1 J9 A
elseif fea==[0 1 0 1 0]3 b- Z5 O$ \( R, b
feature=[energymat,fremat];
6 a; x2 x7 k. n4 |% |7 s elseif fea==[0 1 0 0 1]
) k5 H& B7 Q8 n% D feature=[energymat,mfccmat];
& g2 Y1 `2 q7 K3 ]- C8 Y m elseif fea==[0 0 1 1 0]
7 l. _. W- o; {& L$ Y" e2 r8 |; s0 o feature=[entropymat,fremat];# p `$ r1 M: C3 f
elseif fea==[0 0 1 0 1]5 M+ ]% @1 y4 c0 v
feature=[entropymat,mfccmat];
. d2 g& `7 \* Z+ N$ O. r5 p$ [% b elseif fea==[0 0 0 1 1]
( U/ I$ R, T& @) U0 Z& S feature=[fremat,mfccmat];! M: d- G1 g+ R2 o7 L
elseif fea==[1 1 1 0 0]
# [5 y) S Q! `& d5 }0 M feature=[ampmat,energymat,entropymat];2 r$ ?' C8 P4 ?7 M+ {3 p
elseif fea==[1 1 0 1 0]
, X/ c! J" u4 q4 Y, O feature=[ampmat,energymat,fremat];* r* j* P7 j- U" M
elseif fea==[1 1 0 0 1]; z! |% e3 } `9 @+ J9 s
feature=[ampmat,energymat,mfccmat];
; S, f) \5 V+ E. y elseif fea==[1 0 1 1 0]
) G. V: K. }1 m$ n/ j8 O feature=[ampmat,entropymat,fremat];
7 H' v4 W( M1 S% j2 k' t elseif fea==[1 0 1 0 1]
5 m0 b/ T" n$ I, e i$ N* }) k feature=[ampmat,entropymat,mfccmat];* n6 K y6 A: s* G3 q$ |
elseif fea==[1 0 0 1 1]
$ a7 O+ B9 N5 w3 W3 ` N. G- y+ I feature=[ampmat,fremat,mfccmat]; G) a. R8 `/ K+ P1 b0 I* J
elseif fea==[0 1 1 1 0]
$ h) u' [+ D; b% d7 W1 O feature=[energymat,entropymat,fremat];0 O1 C# |5 ?$ t+ Y {$ b
elseif fea==[0 1 1 0 1]
' Y# w" r! y9 {: h, I feature=[energymat,entropymat,mfccmat];' T% L( X/ G+ q
elseif fea==[0 1 0 1 1]5 M% ?. n1 }4 ^. R6 e
feature=[energymat,fremat,mfccmat];9 j6 {. e; U. y3 Z
elseif fea==[0 0 1 1 1]% d1 _0 b: N1 \" I1 o3 }* N
feature=[entropymat,fremat,mfccmat];. c8 f: d9 b& Y8 K6 h. Q; m% q
elseif fea==[1 1 1 1 0]* A2 |/ y: S4 w R9 M
feature=[ampmat,energymat,entropymat,fremat];* b9 {- Z3 ^( S, a1 _
elseif fea==[1 1 1 0 1]: E$ \' V) i7 A H# u1 a
feature=[ampmat,energymat,entropymat,mfccmat];
* ?" j5 ?1 Y1 r! z- A# g elseif fea==[1 1 0 1 1]
# V* d' P" }$ ] feature=[ampmat,energymat,fremat,mfccmat];
. e" J+ t' ~) v8 {+ A7 f. t8 `6 F- z elseif fea==[1 0 1 1 1]% b# U6 ?' O( o$ N
feature=[ampmat,entropymat,fremat,mfccmat];/ I; q7 n3 ^, h
elseif fea==[0 1 1 1 1]
$ [: ~, F) `+ M. s; ^( f feature=[energymat,entropymat,fremat,mfccmat];
+ K" y5 \4 @/ A. P" i0 ?! d% K3 [ elseif fea==[1 1 1 1 1]
* `& {2 E# n3 X1 X+ t, x feature=[ampmat,energymat,entropymat,fremat,mfccmat];
. o1 j8 H6 X( _; g2 Q' [ else+ y: ^1 G5 K5 r" M& N0 O) X
errordlg('Error!Please choose features','Error');
% x* P5 P" X' a* B7 h) z end$ s2 U( a9 `( ?5 j) @9 ~: v
9 K5 ~# C* a9 t& k( c& S
& y) [8 D0 J9 w r=randperm(600);
- ~- a1 I$ b" N9 m0 ^ X0=feature(r, ; D) @1 O0 X4 U! m: [
Xtrain=X0(1:420, ;* T# q8 p. A$ {9 v5 w m. x, V
Xtest=X0(421:600, ;
! a8 Q9 u; C" ~7 l8 N label0=label1(r,:);8 ~: l7 r3 z8 S: d4 e; G+ q
labeltrain=label0(1:420,:);
- z, T) l- A# Y, q4 e labeltest=label0(421:600,:);
& z' o# X$ B6 k TResult=KNN(Xtrain,Xtest,labeltrain); 8 f) v6 V% u8 n g$ h% Z
rnum=0;! C! y( p% U( }0 m& l: {
for i=1:180! S* D) K+ G d8 r" H5 G
if TResult(i)==labeltest(i)$ d3 k1 g5 @1 L2 W7 }
rnum=rnum+1; X* | I, k- |5 y& x
end9 V" f3 K9 w2 G+ t+ h
end
, c4 u2 p% ~4 b6 Y% Q4 y, D; [ 9 T8 J3 t2 H9 ?4 Y" b% [7 C
set(handles.edit1,'String','loading completed');
3 R* b% j6 x2 U- t set(handles.edit2,'String',num2str(rnum/180)); S- E; \: U! u
, |8 @- L( O) }& o1 l9 y% afunction result=KNN(train,test,trainlabel)+ j4 {/ R! E7 t! v* @
k=2;
; {3 L* \( r$ k3 q- r6 otestlength=length(test(:,1));
& O6 W5 c! s2 c; E$ Btrainlength=length(train(:,1));
0 L9 n5 @0 \* X1 I4 T* \, \0 ofor i=1:testlength7 V' c) `: e- R, L8 H
dist=zeros(trainlength,1);+ D1 z/ ?& e1 j0 p4 l2 h
for j=1:trainlength
; a0 a0 z* h. s5 J f7 [ dist(j)=distance(test(i,:),train(j,:),1);
2 Q G3 ~3 i1 T: \5 ?$ G end
, h8 P, I0 V& k; Y [Y,I]=sort(dist,1);5 Y( J1 Z/ @7 y V7 \0 ~
k=min(k,length(Y));
/ R5 u5 Z; x2 s8 ] labels=trainlabel(I);" Q+ e- S) ?7 @; v+ @+ h
result(i)=mode(labels(1:k));0 G3 H: Y+ `4 S, a" I
end |
|