|
|
这是按钮的回调函数,KNN是其中调用到的一个函数, t) ~8 V1 }% G* D3 C! }0 T: l
function train_Callback(hObject, eventdata, handles)
0 L1 L2 P5 R9 ]global fea
9 n m9 I9 j- Q& e9 o6 Jglobal classifier
. \8 L1 ^1 v$ H# uglobal rnum. q- h5 q" R, Y4 B4 S
5 e- e9 p" B9 o" |! l load('feature.mat');! G1 f; z6 k' z; n" ~# C
load('label1');/ o4 ~) P: P) ]2 o) W4 K
if fea==[0 0 0 0 0]
# S# m, g4 Y0 P3 ?* O errordlg('Error!Please choose features','Error');+ p, Q& U* F* e Q$ O
elseif fea==[1 0 0 0 0]
: y8 V3 E" `( |8 P% I7 V, {8 u, m feature=[ampmat];
; U* F# ^, C* ? j2 Z E. k6 i elseif fea==[0 1 0 0 0]
' G- R+ K" G& a5 q* a) r6 s1 |2 {/ f feature=[energymat];
: {- p% c0 I8 V. e3 u& b0 ^ elseif fea==[0 0 1 0 0]
. K" E' M' i" ~) C* H feature=[entropymat];
# y' m5 ^8 z& z4 X* Y elseif fea==[0 0 0 1 0]( p* [ ?; f6 _8 A0 Z" _8 y) e
feature=[fremat];8 Y9 u1 k/ y& L' b v' Z
elseif fea==[0 0 0 0 1]
& g9 l# L* c/ B' l feature=[mfccmat];( b' A0 _# O- @! Y# p+ k
elseif fea==[1 1 0 0 0]
% ~; K8 a: Z7 A: W/ B feature=[ampmat,energymat];/ X+ @" K& F5 \9 S8 |" W- M: B7 q. T
elseif fea==[1 0 1 0 0]
$ W& C+ o. i0 N0 z feature=[ampmat,entropymat];2 B# z$ z% _' f1 `* Z4 i
elseif fea==[1 0 0 1 0]
. w6 w# s. ^4 s( I$ a feature=[ampmat,fremat];. ^+ i8 _! G0 v
elseif fea==[1 0 0 0 1]; S7 T& w3 r9 C; V) H; A
feature=[ampmat,mfccmat];1 o( {! `8 l1 p
elseif fea==[0 1 1 0 0]
6 N* N" O4 W/ D" U( g2 J) { feature=[energymat,entropymat];
1 d7 J/ A; Y' o$ l! Z* c" Z5 _5 r elseif fea==[0 1 0 1 0]
4 W0 x5 b \& P feature=[energymat,fremat];8 o G) [1 m" |" k% S% H
elseif fea==[0 1 0 0 1]
* @1 ~8 i9 i6 y; l2 D" u feature=[energymat,mfccmat];
# A) y3 y+ Q6 Y9 p8 m2 ~* f- D* T elseif fea==[0 0 1 1 0]
4 M, r4 `- A9 u; V3 g1 c! ^ feature=[entropymat,fremat];& z' [5 t) `8 f% {/ c5 q1 E& w
elseif fea==[0 0 1 0 1]
# J6 r! V+ C' v- W4 V feature=[entropymat,mfccmat];
- S! T7 `: \# O6 ?0 r elseif fea==[0 0 0 1 1]
: h! j7 Q3 }: l! a$ v feature=[fremat,mfccmat];
r' [1 c4 V8 c; ]0 b) P elseif fea==[1 1 1 0 0]
9 }1 A$ B) b4 S4 S+ p4 I4 @" ^ feature=[ampmat,energymat,entropymat];
0 B& k$ b- j( T: r2 X4 a elseif fea==[1 1 0 1 0]/ q9 w/ z4 b& ]0 L$ w: e/ S! w
feature=[ampmat,energymat,fremat];
! \$ ?2 m H! D. ]7 [ elseif fea==[1 1 0 0 1]
3 j, g% _8 x3 I7 g( X! X feature=[ampmat,energymat,mfccmat];
0 Y7 f$ L. x! G+ K7 ~6 |' y7 d0 u elseif fea==[1 0 1 1 0]
% c: D! p: m0 E- j2 e, ?) V feature=[ampmat,entropymat,fremat];3 J( ?9 }- {6 `/ E" g1 a7 c
elseif fea==[1 0 1 0 1]; m% E1 i! n; s1 _
feature=[ampmat,entropymat,mfccmat];3 y0 o- L& t1 v, [* L4 {
elseif fea==[1 0 0 1 1]
W" C/ N0 b; b$ m7 G9 F7 J8 e6 t4 l feature=[ampmat,fremat,mfccmat];
, @% t, s% U, p$ | elseif fea==[0 1 1 1 0]+ ?2 S# D8 I3 [
feature=[energymat,entropymat,fremat];, |4 a5 O3 z4 n! p' L9 Z1 B
elseif fea==[0 1 1 0 1]
?2 ? e' z, F2 e/ _$ ~# B5 m3 m feature=[energymat,entropymat,mfccmat];
. ?% V: T" d M. t1 t) H, X* d elseif fea==[0 1 0 1 1]
5 \" V: N1 J% }6 |3 J feature=[energymat,fremat,mfccmat];
|6 [% e$ N4 r$ a6 h1 W% B elseif fea==[0 0 1 1 1]1 o- n& N* S$ h$ c2 o, {% Z5 h
feature=[entropymat,fremat,mfccmat];$ f6 ?" b/ U1 l, E1 L" p
elseif fea==[1 1 1 1 0]
* G4 T9 l5 J7 e' \$ B1 H, N feature=[ampmat,energymat,entropymat,fremat];4 ]/ N( V# {3 B @' i) Q4 a
elseif fea==[1 1 1 0 1]
' C4 m$ y. z6 j feature=[ampmat,energymat,entropymat,mfccmat];/ g1 r, J% j+ U3 ]# u
elseif fea==[1 1 0 1 1]
" A5 k. c, r( @# {0 f% c feature=[ampmat,energymat,fremat,mfccmat];" j( y: \! ]2 e/ v$ v! U7 G& m7 H
elseif fea==[1 0 1 1 1]
) g9 j3 l2 W: e" `, o* [ feature=[ampmat,entropymat,fremat,mfccmat];$ f; o' s, v1 j3 N0 O- r3 L
elseif fea==[0 1 1 1 1]
: s ^+ C G$ g5 T$ b* i! y* z feature=[energymat,entropymat,fremat,mfccmat];' p4 }2 L+ P+ m
elseif fea==[1 1 1 1 1]
, M- o/ d) `4 ~/ Z% @+ b2 X& O feature=[ampmat,energymat,entropymat,fremat,mfccmat];
% E4 G. G; x' d0 T3 H else
3 h5 a5 L$ v5 C4 W6 P errordlg('Error!Please choose features','Error');# D5 a6 i6 n) ?; i4 m1 e6 l
end' a" N+ }2 Q, f( m
3 k! P5 C& F! _" a / C9 |$ H1 q8 J9 H, ~: Q) i7 G) ]
r=randperm(600);
0 W6 G8 M; U3 U( z X0=feature(r, ;% M/ v- k0 M1 ?: G* x
Xtrain=X0(1:420, ;
- @! }: ~7 ^' Q9 a4 c Xtest=X0(421:600, ;$ d g* N) A( V
label0=label1(r,:);( L1 r3 v( J0 Q: E3 \6 I% G
labeltrain=label0(1:420,:);' R( Z) q! _/ j9 t
labeltest=label0(421:600,:);( Y& D9 S/ g n) U+ ~ a& V
TResult=KNN(Xtrain,Xtest,labeltrain); 5 U+ c |* X/ i* _9 c$ h2 |
rnum=0;6 x: f) p8 s6 J5 }* g4 ~7 g; V
for i=1:180+ W" K# e# F6 I' G5 K$ E' M
if TResult(i)==labeltest(i)" m% T% X/ d8 F" k+ D9 G
rnum=rnum+1;1 Z0 M6 F* j! g" T h
end" {1 V7 |$ r* q# j) G6 A( O
end
! }% x; ^' [$ `5 F7 j; y, f5 X. w 9 J/ R5 M$ S) ^7 M7 E
set(handles.edit1,'String','loading completed');
2 d+ _% G5 H4 u- n6 w set(handles.edit2,'String',num2str(rnum/180));
4 K$ i% p8 Q6 d! b! u# A: K; j% R9 c; z$ ?% m4 V& V
function result=KNN(train,test,trainlabel)
6 D; x! G1 g& w' ok=2;
- T3 [( g; f' i2 F1 M/ Qtestlength=length(test(:,1));
. I5 D# B9 _. \trainlength=length(train(:,1));% I' ]' U3 l) Z$ ?" f+ V
for i=1:testlength: G" A; x; P1 P: F6 p/ n+ P
dist=zeros(trainlength,1);
9 T0 ^: D3 J4 Y3 |) F6 l3 u& E for j=1:trainlength
5 }: R" L" \* u/ |- A; G$ h dist(j)=distance(test(i,:),train(j,:),1);
* s' a8 U) U/ j, @- C end
7 r* {. V- Q7 A R- T5 N [Y,I]=sort(dist,1);
! l9 ^& ]0 p8 l( p k- B2 F k=min(k,length(Y));1 S7 ` y8 W. I% k
labels=trainlabel(I);/ m2 y* G7 k+ h0 e) a3 ~
result(i)=mode(labels(1:k));; t# \" C1 I: T7 F5 U
end |
|