|
|
这是按钮的回调函数,KNN是其中调用到的一个函数' l! B8 M, l! h8 o
function train_Callback(hObject, eventdata, handles)
& j: S& b" z, `global fea- q2 j ^! M/ F) L' m9 T. Y+ r+ w$ y
global classifier
7 A# B7 m5 J! Z7 F# s: @, Nglobal rnum
z: h4 N% \6 r2 \$ ^4 c+ s# F. a: v
5 i' z" }! \; A5 Q3 N: T! M9 B load('feature.mat');9 A0 ~6 r$ m( n3 l9 ]/ D' V
load('label1'); F( l4 ?$ _- u0 X. @* K
if fea==[0 0 0 0 0]
8 h6 N, D d" z. l errordlg('Error!Please choose features','Error');
; Y& P, \- ^: z, n elseif fea==[1 0 0 0 0]
6 s8 C o0 J9 A7 P B feature=[ampmat];
/ o2 r- ]: k! {: R) A elseif fea==[0 1 0 0 0]8 c# e- Z2 a, o! A6 S. x5 i9 p
feature=[energymat];
8 U: h- ^4 l$ X! J) h elseif fea==[0 0 1 0 0]
7 X: Z. i- e6 a" q: Q) U) z$ d, z feature=[entropymat];
( c6 T w) m" a0 S( X" K# O4 x8 w elseif fea==[0 0 0 1 0]2 ^7 \- g6 h1 I7 p4 b# j
feature=[fremat];: K: F' \4 _( Q; v' [' I
elseif fea==[0 0 0 0 1]5 L7 e8 P. G }, p
feature=[mfccmat];
9 _7 y+ A9 q2 N5 x( U( V3 E elseif fea==[1 1 0 0 0]
3 e' E. P6 C4 n3 N; k feature=[ampmat,energymat];
# y# S, \/ b3 F/ h elseif fea==[1 0 1 0 0]( I# x2 q" c# p8 Z; y" B# g& l8 T, ?7 o, D
feature=[ampmat,entropymat];
; U# `& b/ v( _7 c" N7 b elseif fea==[1 0 0 1 0]; \7 e7 p9 _7 {; ` G' X' k9 b5 W6 z
feature=[ampmat,fremat];
1 A$ C* w% e, } T" x i8 k' a elseif fea==[1 0 0 0 1]1 \+ l9 i6 ~3 M% n0 b
feature=[ampmat,mfccmat];( p; K+ R8 i, r( u; ^, W
elseif fea==[0 1 1 0 0]
: X7 v9 s0 S- E9 M feature=[energymat,entropymat];
& w- e. w& |! ]% ]6 ?) O: L elseif fea==[0 1 0 1 0]
/ C, J5 v, j: \: m feature=[energymat,fremat];
7 o& c0 i" A7 v* N elseif fea==[0 1 0 0 1]; k7 Q. u) e# X3 G, H/ [
feature=[energymat,mfccmat];: r% S. ^7 X# `/ q& d
elseif fea==[0 0 1 1 0], c8 F: ?: r4 X* o
feature=[entropymat,fremat];
9 t: S( i4 N5 E/ Q' n- \2 h elseif fea==[0 0 1 0 1]. g ?. w# `( p* @ R9 w0 n
feature=[entropymat,mfccmat];6 L' p, R2 ~, L) c4 }8 k
elseif fea==[0 0 0 1 1]7 |5 G. y8 l T. V7 |
feature=[fremat,mfccmat];& L! p8 t" _, M; F
elseif fea==[1 1 1 0 0]
5 u0 M6 W A' E+ l6 {. [5 [ feature=[ampmat,energymat,entropymat];
# G2 Q6 p' i ~% \. v: n elseif fea==[1 1 0 1 0]( r) H$ x: G0 w. }' {3 ^
feature=[ampmat,energymat,fremat];( ? P5 K% e" s n9 n M9 o: g, U
elseif fea==[1 1 0 0 1]
; G2 \) x0 G$ T% g" c5 p feature=[ampmat,energymat,mfccmat];
, \6 s! E6 x: k O. V2 t2 s0 ? elseif fea==[1 0 1 1 0]
+ ]5 p8 X1 q5 f+ v feature=[ampmat,entropymat,fremat];7 h' P# b0 G& i9 c
elseif fea==[1 0 1 0 1]
; \! s. a$ @4 h9 D2 @8 A% x9 Z feature=[ampmat,entropymat,mfccmat];
- V- o4 N$ G$ w4 W9 z) w1 i2 I+ `; \ elseif fea==[1 0 0 1 1]
j% j) K9 V! d" k# B2 N feature=[ampmat,fremat,mfccmat];
; h: K" l: X5 X7 b elseif fea==[0 1 1 1 0]
" d V* B! F, w8 {' z2 q( t3 `4 Q: l feature=[energymat,entropymat,fremat];
7 I% x- _8 X& | f& O4 S elseif fea==[0 1 1 0 1]( ]; T2 S; |2 Z
feature=[energymat,entropymat,mfccmat]; n9 z! e4 }, X! b5 y) b9 @
elseif fea==[0 1 0 1 1]
# |" `- G! o+ s2 G$ }: ?* M feature=[energymat,fremat,mfccmat];% t/ a0 A7 @1 I0 G" |) i
elseif fea==[0 0 1 1 1]0 H% ~- G" m% P+ F
feature=[entropymat,fremat,mfccmat];. q: o! t1 o9 a+ W
elseif fea==[1 1 1 1 0]" G9 E- M9 k$ U! f
feature=[ampmat,energymat,entropymat,fremat];
( R" ~# M O& r% \, s; x elseif fea==[1 1 1 0 1]/ B2 {$ e, u4 Z" g4 U
feature=[ampmat,energymat,entropymat,mfccmat];2 A; [0 C. p' p8 F( {
elseif fea==[1 1 0 1 1]
, l$ ^1 M1 v- m$ l& }3 h1 F feature=[ampmat,energymat,fremat,mfccmat];
- u; N4 {7 s9 V+ e; t- K, y+ E elseif fea==[1 0 1 1 1]+ o; o T. R5 k( a. I/ e2 a6 a* [0 I
feature=[ampmat,entropymat,fremat,mfccmat];
& ?* q# [ t) R4 O; i6 }! A elseif fea==[0 1 1 1 1]
! P" c' l# q. c1 |5 x& Z feature=[energymat,entropymat,fremat,mfccmat];
4 E# y$ U! r( D1 [; }. p1 w: ] elseif fea==[1 1 1 1 1]: ~5 X1 {1 ?2 i4 ?
feature=[ampmat,energymat,entropymat,fremat,mfccmat];
4 T/ _# d: x5 a# r& N4 | else
9 Y- {' e, A" f6 @ errordlg('Error!Please choose features','Error');
% ?" u/ t; D) v end
$ b0 l0 j4 }+ ]( \+ K+ S. ~$ l4 _
5 K2 Y. p' A) ` % J5 w8 e# ^9 d, u9 q
r=randperm(600);/ Z( w- T/ j9 T* @! n
X0=feature(r, ;) C |( \% ~# a7 ?: |
Xtrain=X0(1:420, ; {/ I7 l, n, R0 H1 X c' m
Xtest=X0(421:600, ;
( i% W) D5 e% T$ k0 c! ~$ a label0=label1(r,:);, j9 E7 [7 O: n' r. A
labeltrain=label0(1:420,:);4 m4 U4 B2 x0 r+ B% s! A5 a
labeltest=label0(421:600,:);. h+ z& b* d5 P" f+ ^8 B% [
TResult=KNN(Xtrain,Xtest,labeltrain);
% V0 [8 I9 d) p1 g- u4 E) t) Z6 x2 @& T rnum=0;
8 ^6 F! [+ k8 Y' t) r for i=1:180; x7 J6 G# s! ^
if TResult(i)==labeltest(i)
) n9 G2 n- f2 q: K' Y4 ^" C% M! j5 P/ P0 G rnum=rnum+1;5 I5 c( N$ E5 Z* N y; E& m$ C
end; c: D( E: g2 f9 s! o1 A& T
end4 c9 D9 h8 p6 M' d9 e. q9 c! R2 @
+ ~, E4 Y; R, @: l# Q7 t" V$ J set(handles.edit1,'String','loading completed');
b; c5 \/ f0 z7 N9 g set(handles.edit2,'String',num2str(rnum/180));* I$ O* U* ^; x. n- K
7 E. q, _) p z
function result=KNN(train,test,trainlabel)
3 n1 @2 m& K' \; U ek=2;
9 i3 \6 k1 h" stestlength=length(test(:,1));
4 ^5 z1 u2 H0 l# `( ztrainlength=length(train(:,1));+ b/ k3 l5 j( I& u3 _( N( I) |! ^
for i=1:testlength& M+ K. e; W% q5 o7 M& {5 r
dist=zeros(trainlength,1);
" k2 z. S2 d7 h6 b) n3 B* h for j=1:trainlength
$ ~) Z( l1 m/ ~3 X, ], u- n dist(j)=distance(test(i,:),train(j,:),1);, Z+ Y+ Z( {8 [- @% z z
end, G7 V& | G* g
[Y,I]=sort(dist,1);
" v3 I$ L4 V6 p7 x! c# n7 o7 Y k=min(k,length(Y));
# m. F% s4 K8 B, g1 [ labels=trainlabel(I);$ |6 [" W* V2 _" K: \
result(i)=mode(labels(1:k));% \5 F9 ?) V; v$ q
end |
|