|
|
这是按钮的回调函数,KNN是其中调用到的一个函数
: X+ R; E" u! I1 f3 \function train_Callback(hObject, eventdata, handles)9 d$ ~( q% o$ R; e- P0 _& {
global fea
! T1 d0 ]5 e: q2 e8 d4 ?global classifier, n$ f$ j4 k8 b7 o8 H4 A$ j" t" L5 m
global rnum
! X8 T5 g J; R3 N2 O6 j9 K8 _" |
load('feature.mat');- Z" o+ w! U& D6 q5 `& ]) T, t
load('label1');+ x9 l9 c' H+ c: H. ^
if fea==[0 0 0 0 0]
- Y" V* D& q% B% D6 x5 ~1 [ errordlg('Error!Please choose features','Error');
4 W& _% S. j% w7 p9 j; b elseif fea==[1 0 0 0 0]
6 Q+ j& Z3 j7 R6 [! j' |- F9 F feature=[ampmat];* C' e/ S5 P* Y# c5 u
elseif fea==[0 1 0 0 0]
# Y, j5 h4 K9 Y2 U: p* m5 b' b feature=[energymat];
2 l( ~9 [) o0 ~( y" x4 m elseif fea==[0 0 1 0 0] k( v a0 K. p/ l+ Z, I% x J2 @2 h2 b+ \
feature=[entropymat];8 z2 X% a J% x
elseif fea==[0 0 0 1 0]
" e5 B( y4 y1 |. Y* d6 R3 c feature=[fremat];
" h d2 S% `" }" j1 B/ @ elseif fea==[0 0 0 0 1]2 c. c7 x$ O( p
feature=[mfccmat];& Q5 V, }5 b! X2 u- R8 B, n
elseif fea==[1 1 0 0 0]% F' J- @! h3 @6 U' c& {" T, O
feature=[ampmat,energymat];" S) N0 O4 D% Q. Z5 T
elseif fea==[1 0 1 0 0]) a1 P4 ~! [) {1 Y
feature=[ampmat,entropymat];
0 [9 S/ l. y4 S* N9 `6 N& z elseif fea==[1 0 0 1 0]
# T1 y' m2 Y9 w; t) E feature=[ampmat,fremat];% b; y! d8 k0 x3 q/ }7 G7 B
elseif fea==[1 0 0 0 1]6 w/ s' C0 b2 P: ^
feature=[ampmat,mfccmat];
+ `) H( n! z9 v' ~ elseif fea==[0 1 1 0 0]: Q7 L) v! p1 ^( e: W/ `, ?! a) u, Y
feature=[energymat,entropymat];% O" u. ~1 D% i9 ]2 @9 T. D1 p
elseif fea==[0 1 0 1 0]
/ v4 J. L2 M% V- L feature=[energymat,fremat];. c# W) P, E. \4 G
elseif fea==[0 1 0 0 1]8 F6 V) g0 F7 P5 c. G6 ?2 v
feature=[energymat,mfccmat];
4 Z) M) b% L! V I0 R* L4 j! Y elseif fea==[0 0 1 1 0]
1 m; Y6 U0 t% f F) V7 L7 t$ M7 ~ feature=[entropymat,fremat];
8 L! t% ]3 |! O' j$ `7 ~, a elseif fea==[0 0 1 0 1]
0 `) f" e6 ~# t8 _ feature=[entropymat,mfccmat];
, {; Z- C9 L2 B, E& B6 W+ n# [ elseif fea==[0 0 0 1 1]: O6 q6 m/ d! b. f" s; B+ Z4 M" v& K J
feature=[fremat,mfccmat];
2 ]+ T4 Q; _1 b o& w2 M8 U* i elseif fea==[1 1 1 0 0]# E& d+ c# f! q5 l
feature=[ampmat,energymat,entropymat];! P3 q$ m7 q7 l
elseif fea==[1 1 0 1 0]! x& R+ n( O4 n; w+ @: d
feature=[ampmat,energymat,fremat];
5 R+ I8 R2 l9 i elseif fea==[1 1 0 0 1]4 X% w0 G& ~7 @8 N8 b
feature=[ampmat,energymat,mfccmat];9 j0 U. C- {( G& A: V$ X% h$ @
elseif fea==[1 0 1 1 0]( C$ a% n7 ~. a. A
feature=[ampmat,entropymat,fremat];6 v! y; ]2 ^# G3 c7 U
elseif fea==[1 0 1 0 1]
0 ^ s2 o2 J ^" Y. W/ L4 J feature=[ampmat,entropymat,mfccmat];- L/ j( i# g0 t8 l3 F
elseif fea==[1 0 0 1 1]5 |$ Y1 w; n5 L; F4 M$ s. u; s
feature=[ampmat,fremat,mfccmat];
6 `! F2 d+ ^; Q3 G, k+ C. x9 g elseif fea==[0 1 1 1 0]8 [9 f, P& A6 T1 w# T6 i- e. l7 X4 s
feature=[energymat,entropymat,fremat];
& u, a8 `. Z6 K. _, H( `3 k! | elseif fea==[0 1 1 0 1]
" U& b2 n+ a! [) v, ^/ H feature=[energymat,entropymat,mfccmat]; G- Y, ^/ L: T% ?& t- w$ d
elseif fea==[0 1 0 1 1]' S! Y9 v* m! O! }" m1 q
feature=[energymat,fremat,mfccmat];
% v1 T5 } a& `9 h% r elseif fea==[0 0 1 1 1]- u0 T8 ^) r& D# X0 C$ Z
feature=[entropymat,fremat,mfccmat];; c: G, G5 r8 A* G7 d
elseif fea==[1 1 1 1 0]
% X, R$ N8 S, V9 ?9 o d- B feature=[ampmat,energymat,entropymat,fremat];0 m4 s+ X4 V! s" `1 [6 E5 k5 P& z2 h
elseif fea==[1 1 1 0 1]
0 l( J9 g, ~% c. o4 u; n9 H1 h feature=[ampmat,energymat,entropymat,mfccmat];# q, i# u) H3 G
elseif fea==[1 1 0 1 1]1 N/ [; y- @1 T
feature=[ampmat,energymat,fremat,mfccmat];5 F% ^* e& F6 L0 h8 p; z9 m1 H
elseif fea==[1 0 1 1 1]
- |7 m T# ?/ {3 [# u# A; Q feature=[ampmat,entropymat,fremat,mfccmat];6 t/ C+ A4 ^. d- y5 Y
elseif fea==[0 1 1 1 1]9 q# C0 p. l* F5 K, O2 p4 b
feature=[energymat,entropymat,fremat,mfccmat];9 r3 a% k! \5 \
elseif fea==[1 1 1 1 1]3 Y" b; i. B: c! P# Z* B
feature=[ampmat,energymat,entropymat,fremat,mfccmat];
! w/ P Z' V) J6 y else
# o4 M: E, R% o" ]( h0 O4 w errordlg('Error!Please choose features','Error');
8 W f% s* Z, K+ @' Y r end7 _# U. p) @3 n
- W9 Q7 U% q, |2 z: s 2 l- G! E0 G! ]! g/ U" l
r=randperm(600);
: o4 n# L: M( r: q# z/ E X0=feature(r, ;' K% r7 b6 ?: R' u( K) Y
Xtrain=X0(1:420, ;
: X; M& y4 G$ n5 o1 ^ Xtest=X0(421:600, ;
- ?& Q3 H' L8 q8 r label0=label1(r,:);
8 o5 v L/ h3 f0 P2 A2 ~, ` labeltrain=label0(1:420,:);
* \' c* R) c s% I) @3 ^- g labeltest=label0(421:600,:);
: C4 u# A. G4 u% } TResult=KNN(Xtrain,Xtest,labeltrain);
4 b0 J, }6 W, U. m* R rnum=0;2 c4 Z6 `9 l/ m5 l) p7 p |- K
for i=1:180
. M; a/ s* |7 ?" N8 w0 S if TResult(i)==labeltest(i)
9 V/ K" Q! V$ `! p rnum=rnum+1;. C u& z8 d/ w
end
0 J7 y: Y' F3 A4 { end
4 ?, B- E$ a9 C* S, M 7 x& y% D m7 |3 j) @% I9 C5 J
set(handles.edit1,'String','loading completed');
6 Q" F6 C0 Q O0 g5 R$ a set(handles.edit2,'String',num2str(rnum/180));3 R) ~5 c1 y2 o% ^4 X) l/ U0 \# v
* i" s6 s. R+ m4 d2 S$ L
function result=KNN(train,test,trainlabel)1 ~( d9 `, r0 k; b J8 g* m
k=2;/ r* {1 W! ?- Z# ^6 `
testlength=length(test(:,1));
7 B6 h/ k0 ~/ Z, W, w n. G0 z& P5 ktrainlength=length(train(:,1));/ i* U6 p; P( w. E
for i=1:testlength
! A% |. r) p3 u }+ v dist=zeros(trainlength,1);/ \, K0 A. C' h4 o+ `
for j=1:trainlength* r' n0 c$ k% z% Q) C; i# s
dist(j)=distance(test(i,:),train(j,:),1);
: @4 F; Q. _/ C' ] end l/ p4 m5 H+ Q- R0 f" Y
[Y,I]=sort(dist,1);
9 y9 Z+ ]; r( v( k1 i& x k=min(k,length(Y));' r+ Q7 z" p5 `& h0 N' d
labels=trainlabel(I);' F; F, d5 w5 Z
result(i)=mode(labels(1:k));
+ e9 Y4 P; {* L. @" P J2 `5 gend |
|