|
|
这是按钮的回调函数,KNN是其中调用到的一个函数0 f* N. Q5 F. L# O" f; @
function train_Callback(hObject, eventdata, handles)' k! l: ~8 E: V6 V
global fea
: S1 G( `1 j; O0 j) Vglobal classifier# d8 v1 @" C7 w, I. _
global rnum0 V" {4 @" s* R' p9 l
- B+ Y. U2 N8 w7 b load('feature.mat');
1 _4 ~6 N& i3 Z* [ load('label1');
2 W8 E4 w+ Z7 H if fea==[0 0 0 0 0]
) y5 W& B) a. U# h) w3 I errordlg('Error!Please choose features','Error');: e I0 x, K8 g
elseif fea==[1 0 0 0 0]- S$ B$ Q \7 ~9 `' _+ ]2 K
feature=[ampmat];1 X" ?+ x$ y2 j* J
elseif fea==[0 1 0 0 0]1 z6 \7 C0 [6 _5 m
feature=[energymat];/ G" t- [/ r9 H: B: k( X
elseif fea==[0 0 1 0 0]
8 }9 p, q) _; r1 \ feature=[entropymat];
; I4 V& p5 t% n, b/ e0 t8 U* G elseif fea==[0 0 0 1 0]
/ K+ q1 M) H1 E feature=[fremat];
|. P. Y- B4 x7 G2 m# @; E" C4 r5 m elseif fea==[0 0 0 0 1]1 l% K, g/ G: ~) b- D9 v4 e
feature=[mfccmat];8 _! a `( L3 G. ~0 x) A% U+ C
elseif fea==[1 1 0 0 0]" V5 J5 f( y1 i* l! t+ G
feature=[ampmat,energymat];+ Y- P, M! p' X6 ?! L. _+ g
elseif fea==[1 0 1 0 0]' b! W# @! f$ i& D/ t# V
feature=[ampmat,entropymat];3 g* H) j: n8 ^
elseif fea==[1 0 0 1 0]* o# u r0 l; D/ L3 N
feature=[ampmat,fremat];' e& q. M* i6 O% [! z2 K t9 ]
elseif fea==[1 0 0 0 1]2 ?/ e" J6 B2 F' t7 W
feature=[ampmat,mfccmat];6 z# }: u2 i5 N" y
elseif fea==[0 1 1 0 0]
2 x) ^ S% ~8 L6 ?" {" p8 ~6 ] feature=[energymat,entropymat];! t; q' `) _5 p; r0 e0 Y5 y
elseif fea==[0 1 0 1 0]
" Y9 I' m9 i2 n5 x feature=[energymat,fremat];! C. s- P% h0 I% ~! x% T
elseif fea==[0 1 0 0 1]5 Y& P/ l, x, l+ u) S/ t4 v X
feature=[energymat,mfccmat];
# V/ z+ I, d, V# ~5 |* w g! @: y6 y elseif fea==[0 0 1 1 0]
3 s' V6 F6 i' ~ feature=[entropymat,fremat];
! L. F% I$ @( c# B" t- H elseif fea==[0 0 1 0 1]
& S. \6 R( d* ?3 T. b feature=[entropymat,mfccmat];
8 G* [; Q7 C' }) M; h9 a elseif fea==[0 0 0 1 1]
# A0 v2 B8 U% n/ l! @' ^ feature=[fremat,mfccmat];
/ \ Z, s4 ?/ i0 n, r2 Z elseif fea==[1 1 1 0 0], I; r a" ?7 n: f* R. y
feature=[ampmat,energymat,entropymat];
2 a+ O# [, y( v6 j! Z1 W3 A/ C- ~ elseif fea==[1 1 0 1 0]
|& i- R/ }: q' Q2 g5 }, j feature=[ampmat,energymat,fremat];
: W5 L5 y# E- I2 Z8 p elseif fea==[1 1 0 0 1]
9 d C# ]( O/ g+ S' b feature=[ampmat,energymat,mfccmat];
4 M' D; l, O s elseif fea==[1 0 1 1 0]0 J1 l" G0 j8 H
feature=[ampmat,entropymat,fremat];
9 A1 d0 K1 Z/ u, O( g elseif fea==[1 0 1 0 1]; l2 I' N+ V$ b! p) C9 X
feature=[ampmat,entropymat,mfccmat];. L( A8 `' i0 a n6 f
elseif fea==[1 0 0 1 1]
6 s$ B; _9 F3 y9 K" @5 m feature=[ampmat,fremat,mfccmat];/ r& \" Q( n1 W" G6 Q
elseif fea==[0 1 1 1 0]7 j4 D6 A: n3 w" b. D. v7 Y
feature=[energymat,entropymat,fremat];+ [, b8 K {( c6 Z8 N+ ]
elseif fea==[0 1 1 0 1]
% p0 w _& {4 \$ q$ D0 C, J# k0 ^ feature=[energymat,entropymat,mfccmat];; m/ P8 }; W( X* Q; d9 L
elseif fea==[0 1 0 1 1] U4 T; \4 g* L/ s& d
feature=[energymat,fremat,mfccmat];7 \4 ~% y" `1 t, H5 y
elseif fea==[0 0 1 1 1]1 _$ T6 n6 L: ?/ c
feature=[entropymat,fremat,mfccmat];
) E' b( {5 `$ ^9 b elseif fea==[1 1 1 1 0]
" f1 w% J( a. q9 O4 w/ A, y feature=[ampmat,energymat,entropymat,fremat];
6 W5 e# r# W7 V0 Z elseif fea==[1 1 1 0 1]
( |6 Y' z8 b& {$ ^, z8 V3 ~6 I# i feature=[ampmat,energymat,entropymat,mfccmat];9 k6 P' N3 z( W' }3 ?1 Z3 E
elseif fea==[1 1 0 1 1]& K# n9 K; _3 u. z+ p
feature=[ampmat,energymat,fremat,mfccmat];
4 O" b P+ w( n elseif fea==[1 0 1 1 1]$ p* V6 n( N* ]/ L7 ~6 {7 z
feature=[ampmat,entropymat,fremat,mfccmat];
@0 K! c. C$ @3 W) E elseif fea==[0 1 1 1 1]
4 B. `9 H4 [' Q) _ S feature=[energymat,entropymat,fremat,mfccmat];
. ~6 {; c( g& T( O$ ]. } elseif fea==[1 1 1 1 1]
( W* j% d+ M/ j6 B feature=[ampmat,energymat,entropymat,fremat,mfccmat];
" b. u [% S9 }" S* `: Q else
" f& L8 C9 H. S( [+ _ errordlg('Error!Please choose features','Error');
- _$ w" J ]5 j% t+ z1 J" y+ ? end! u% G" F* B+ w2 m1 {& b; T
5 M9 h) @- @6 j! T5 N" ]
`! Y" h3 D, U4 D9 ] r=randperm(600);( R! _6 k# S2 i- F& n" X$ Y5 z& ^
X0=feature(r, ;; s W6 c; P* t4 W1 A
Xtrain=X0(1:420, ;
0 h2 J7 @1 m# i3 G1 o1 I- ^ Xtest=X0(421:600, ;
( |0 |' V& Q- q label0=label1(r,:);
: O- \' T/ C9 Q8 | labeltrain=label0(1:420,:);0 r3 T" L( o$ d8 E T, P
labeltest=label0(421:600,:);
; |2 C$ v& V, n' l TResult=KNN(Xtrain,Xtest,labeltrain);
" l6 y; H; A8 t- h! x$ u! O8 B% a rnum=0;
. O& i5 F9 }8 ?4 u for i=1:180* T, M- X, m: A1 I
if TResult(i)==labeltest(i)
' f7 q! B3 p( u5 Z' g6 M7 \6 m2 c rnum=rnum+1;
- e0 J+ B" {( l8 i" m8 v' G end0 ?; u5 A0 T8 \7 p
end
2 Z4 U v: o9 a2 F+ Y9 m
3 I& g# r1 p" d+ b4 }9 X set(handles.edit1,'String','loading completed');
% a- V2 E8 f. F set(handles.edit2,'String',num2str(rnum/180));2 r& d0 \1 S1 P7 a5 I- G, E( o
; L+ V/ J9 W) P m/ j3 V0 ]function result=KNN(train,test,trainlabel)
: d2 P7 R9 K S' R _; U, M$ Ok=2;
% g: o: s8 u. w6 R& e8 k- i1 Ytestlength=length(test(:,1));+ a- `$ N2 R. K9 \
trainlength=length(train(:,1));* e+ R" a6 ]& }. _/ N
for i=1:testlength
: d: f( E! ?% j( b dist=zeros(trainlength,1);/ [) a, D8 n- E
for j=1:trainlength
" ~( |3 c* K2 l dist(j)=distance(test(i,:),train(j,:),1);
5 t/ F5 Y+ R9 u0 E end& F6 L9 p; v" h, J: a% V
[Y,I]=sort(dist,1);9 u" D' d& ]2 [* F
k=min(k,length(Y));
8 m' P4 S* \" k& p5 V labels=trainlabel(I);
5 E* Y: y k# x: j7 a: I result(i)=mode(labels(1:k));
* h- |' ]3 Y* V- Eend |
|