|
|
这是按钮的回调函数,KNN是其中调用到的一个函数
* O8 p# h0 ~$ b9 h! N3 xfunction train_Callback(hObject, eventdata, handles)
r% f) x$ n+ T: f7 V4 Cglobal fea
. J+ `4 Q+ L/ S, x' Hglobal classifier. y6 S; B' ^5 J4 P( O
global rnum. R' f: q, j+ `! t8 r5 ~% a5 L( \) C
0 p/ m& d/ ?& h ^ load('feature.mat');' s7 C; O$ W, ~1 N+ f. r% W
load('label1'); ^$ _7 u, O& k I0 p" F
if fea==[0 0 0 0 0]
) B, J& R0 [; T5 X errordlg('Error!Please choose features','Error');
4 m% {' C- K; c5 r# A. k' S) C* a7 r elseif fea==[1 0 0 0 0]$ _+ M, B7 A' Y: ?
feature=[ampmat];. s2 g \* r u, u9 D
elseif fea==[0 1 0 0 0]# x" Q2 ^9 j& ^- {! |
feature=[energymat];" R+ J3 o4 Y; f& K3 Z3 ]0 h
elseif fea==[0 0 1 0 0]# S' \) n+ }5 @+ n3 A3 w
feature=[entropymat];
: U, c" }& Q. N s& v* b: C' C elseif fea==[0 0 0 1 0]3 B* O% w, j6 F5 W6 O) u
feature=[fremat];# [, z* |5 Q! ]
elseif fea==[0 0 0 0 1], ]" j" [7 [! E
feature=[mfccmat];
, X S( r& G/ X elseif fea==[1 1 0 0 0]7 A; B' N) B, k5 r/ v! r$ o) e
feature=[ampmat,energymat];
* o9 L* t7 n( @$ R- D) p- ?& i elseif fea==[1 0 1 0 0]
+ e2 r8 F& G7 d2 a3 g feature=[ampmat,entropymat];- R1 f0 G. G# ]1 H4 V
elseif fea==[1 0 0 1 0]* \( f9 ]# z- u, T3 A2 B/ u
feature=[ampmat,fremat];
4 p+ E) t" P7 }2 O% b# D- W5 S elseif fea==[1 0 0 0 1]
7 i. ]5 R+ {9 L/ M6 X/ I# ~! @ feature=[ampmat,mfccmat];1 K) X3 m' I9 S- l$ s
elseif fea==[0 1 1 0 0]
. t4 |- j) [5 I" B3 ` feature=[energymat,entropymat];3 |0 F! _2 G, V2 r. t
elseif fea==[0 1 0 1 0]- [" t/ p" h6 o- H8 \0 v
feature=[energymat,fremat];1 S/ o) m0 `5 R O
elseif fea==[0 1 0 0 1]
" w! U" y8 p: s/ x' h feature=[energymat,mfccmat];: J) ?5 E( z6 b B! J- m
elseif fea==[0 0 1 1 0]
1 Z0 B% T& z, A- q) _0 Z feature=[entropymat,fremat];
9 f/ Z/ B6 h$ h0 S elseif fea==[0 0 1 0 1]
: |$ R5 s9 r" j1 |: B7 b0 }& @ feature=[entropymat,mfccmat];) g8 T! s/ }' d {- [5 \
elseif fea==[0 0 0 1 1]
. F( y) J" Y0 X% E7 H feature=[fremat,mfccmat];
* t/ G' s: N1 I( a! ?/ H elseif fea==[1 1 1 0 0]7 Q/ p5 d4 e% i% c, D8 p
feature=[ampmat,energymat,entropymat];) Z1 X) @+ {/ P* i
elseif fea==[1 1 0 1 0]
0 f- `! l2 _0 H# p4 q$ [6 | feature=[ampmat,energymat,fremat];0 ~2 |2 ?! Z+ \# X) P5 C, k; z
elseif fea==[1 1 0 0 1]( u- |' w8 p7 K
feature=[ampmat,energymat,mfccmat];
( z2 ?! w- X* s X1 _ elseif fea==[1 0 1 1 0]
. Z6 w% {4 C3 ^9 @ feature=[ampmat,entropymat,fremat];
% H( W1 U& R* O elseif fea==[1 0 1 0 1]- B1 @/ { O8 n: ]1 j% M. b1 q0 E& _! l: {
feature=[ampmat,entropymat,mfccmat];; r: v* m# ?& i
elseif fea==[1 0 0 1 1]5 j' ] ]/ v% y& j" D$ P
feature=[ampmat,fremat,mfccmat];
' N2 o6 b' w4 D5 `" P! d9 u& N$ x elseif fea==[0 1 1 1 0]; q8 U! Y) Y* B$ Z6 K) U( f
feature=[energymat,entropymat,fremat];7 m; B& z# ^* f& f8 q
elseif fea==[0 1 1 0 1]
6 |) B9 }7 s# J. ~, l8 I3 ? feature=[energymat,entropymat,mfccmat];
) d7 @( P' a' P; k8 y# f1 k) ? elseif fea==[0 1 0 1 1]
: S" D4 M/ A$ y \' J1 t9 Z feature=[energymat,fremat,mfccmat];
/ E4 h- U0 z7 h6 L# L/ {. v) [ elseif fea==[0 0 1 1 1]
# h5 A+ A. N$ ?9 @* @) M, L feature=[entropymat,fremat,mfccmat];- Q2 `3 T2 ^7 n6 B, x9 W
elseif fea==[1 1 1 1 0]
7 G9 y6 I, H# t% l/ p feature=[ampmat,energymat,entropymat,fremat];
5 [3 ?% O& c& f8 F5 q) N+ ]& D elseif fea==[1 1 1 0 1]9 P# f, }2 e1 ?& {
feature=[ampmat,energymat,entropymat,mfccmat];7 w/ b+ S, P0 B1 [5 z
elseif fea==[1 1 0 1 1]8 z! k: q% @7 B: A: \
feature=[ampmat,energymat,fremat,mfccmat];: v. V# M0 G6 T6 r9 w& Q
elseif fea==[1 0 1 1 1]
1 y0 R7 Q4 H7 H( k4 U1 q5 f: L v' F feature=[ampmat,entropymat,fremat,mfccmat];
: B2 c/ v' n. X1 a$ W! O5 q elseif fea==[0 1 1 1 1]
/ n! q" c1 l% {2 G, S% q feature=[energymat,entropymat,fremat,mfccmat];/ i4 Q- R4 m' d' A4 g0 J4 U
elseif fea==[1 1 1 1 1]
1 a" V; Z# j/ Q: B: z8 G/ y0 s feature=[ampmat,energymat,entropymat,fremat,mfccmat];1 M' N4 B7 b+ r3 k+ R7 q7 f9 Y0 f
else
# R( n' o1 m" i8 m errordlg('Error!Please choose features','Error');" x2 |2 F; L9 ]
end: J: b% v3 l6 B+ H4 u
3 {; a# B- A- E; Y: Z: v/ l* B4 H# l7 I4 S
; W. F% b8 A3 {9 y0 h8 f8 k+ G5 e7 ? r=randperm(600);" Y& Q7 T- }% ? b
X0=feature(r, ;' r) N% ^7 G2 b* ]/ N
Xtrain=X0(1:420, ;
& y+ I( [9 N* s4 m7 ~7 {0 y) L7 D- X Xtest=X0(421:600, ;
' }9 U3 _$ o) E' `7 p/ x. ?) X- q label0=label1(r,:);
- E6 A: [( L& Y+ Z labeltrain=label0(1:420,:);2 D; z3 k: P* y* j, X4 F
labeltest=label0(421:600,:);4 O# J/ b+ N; B1 y% q. Q2 W
TResult=KNN(Xtrain,Xtest,labeltrain);
8 V) g& [* e# e7 q9 x$ } rnum=0;6 }; n, K2 J3 e4 P; S( ~0 z9 Y
for i=1:180# F/ ]0 K- u8 ]3 X
if TResult(i)==labeltest(i)' J! C! y. M' B1 ]7 i
rnum=rnum+1;
2 s% q+ J: F" L0 H3 H end) v7 U6 E7 F4 y% A+ P5 b
end5 Y V- s$ G% |
# K- o5 S9 o# m# {1 W+ [: J
set(handles.edit1,'String','loading completed');3 b2 G( v5 a' \5 N8 P l
set(handles.edit2,'String',num2str(rnum/180));
* ~ a& ^- o5 [9 \
6 R9 e: t1 C5 C# O5 X# a) k, lfunction result=KNN(train,test,trainlabel)
+ I$ \) `! ^6 P3 y/ x. Rk=2;
8 p- E/ y( o7 B& R" u. k/ Y# A; Xtestlength=length(test(:,1));
7 W' T) C) S8 ]( W0 F. a0 k- v: ctrainlength=length(train(:,1));4 E) L+ o( p0 ?, L; B, a4 C! ~
for i=1:testlength
' }3 W% C, Z2 z6 q6 c4 h dist=zeros(trainlength,1);- I J2 p: n9 m* d' v
for j=1:trainlength7 T# E) j+ f, k' S1 x4 j6 ?% g
dist(j)=distance(test(i,:),train(j,:),1);+ ~0 o! ^5 _4 g ?8 E
end
8 d, W0 u; ~& U i [Y,I]=sort(dist,1);; S2 u* A3 a2 }2 I! Y3 o
k=min(k,length(Y));
2 Q% a( y4 W( I* Z7 V$ ] labels=trainlabel(I);" c& O& V% A# w* n5 j- f
result(i)=mode(labels(1:k)); \7 {' k2 L& {
end |
|