|
这是按钮的回调函数,KNN是其中调用到的一个函数" [( G- x: l1 v& C+ W6 H2 ?& P
function train_Callback(hObject, eventdata, handles)
3 h4 l) w, N0 Z& {* `2 S; Yglobal fea
% w& s6 O* }# U$ f$ X8 {global classifier0 M3 V2 T) \- P6 D
global rnum
3 z7 i, D* |' n
( g# z, W4 ~. H! p load('feature.mat');: k/ [' V0 G c9 u
load('label1');( B o/ `% ^8 g. w+ n& R
if fea==[0 0 0 0 0]
; w X8 y. B, p" \3 U errordlg('Error!Please choose features','Error');
* b' Z2 `# c! g$ r: g! g! x4 B! V elseif fea==[1 0 0 0 0]/ b/ B( Q5 u% o, a. O
feature=[ampmat];' q4 D# c% C0 f# H. }- v# U
elseif fea==[0 1 0 0 0]
. y/ X7 o4 W! t! g feature=[energymat];
- X5 y. q' e) b! K elseif fea==[0 0 1 0 0]
8 x+ ], W8 x: j: k0 I1 ?6 \5 Q! X! J feature=[entropymat];
% K9 L9 |5 J% g# O. t: r: | elseif fea==[0 0 0 1 0]
6 T7 U5 r+ }3 h W+ Q' Z o* R feature=[fremat];" n- N2 B- M5 n% O3 h9 m( _! ]! V
elseif fea==[0 0 0 0 1]
7 U8 [- \6 c, H8 T; W+ e4 z feature=[mfccmat];' k1 l$ e7 t q8 j: r9 y
elseif fea==[1 1 0 0 0]
( l% l. U9 \3 G& U! u* I feature=[ampmat,energymat];
_0 k, }# ?& V elseif fea==[1 0 1 0 0]
9 M3 G" I5 ~/ W; b' [. w feature=[ampmat,entropymat];
$ B5 p% ^2 M0 k& D. z9 B+ y6 Y elseif fea==[1 0 0 1 0], b( m/ t& L8 {# R8 h
feature=[ampmat,fremat];
: ?& S& l$ U; X) d: m. ] elseif fea==[1 0 0 0 1]
/ C, A" w/ d. g/ V, x* B7 Y feature=[ampmat,mfccmat];
* y" S$ n( x3 J6 _; X elseif fea==[0 1 1 0 0]
; I4 Y$ Q$ H8 ^: s; N3 B( O+ }0 i5 y feature=[energymat,entropymat];
. o; t, f2 |( g elseif fea==[0 1 0 1 0]# V/ Q! H* b7 H- `# h: V
feature=[energymat,fremat];
0 Y. W# `" ?; `" a) x4 q elseif fea==[0 1 0 0 1]
- e. W5 ~8 }9 ~# f$ {% |, t: @ feature=[energymat,mfccmat];# [, J& _/ Q3 W% {2 p, j& S- @9 y
elseif fea==[0 0 1 1 0]
2 E$ a$ f9 s$ i$ E+ U5 @' }7 b. l/ O/ z feature=[entropymat,fremat];
+ Q5 q* K9 u+ f8 R2 v" } elseif fea==[0 0 1 0 1]
' x; E k( i% Q$ e* v; _ feature=[entropymat,mfccmat];8 B6 `% [* U t
elseif fea==[0 0 0 1 1]( j" ]( [% f% w
feature=[fremat,mfccmat];' e8 D: c" Z$ c) p- ^9 h4 \
elseif fea==[1 1 1 0 0]/ u2 Z( O J2 a8 k' K
feature=[ampmat,energymat,entropymat];
, y# f& c4 z, ^2 e, r5 F$ T elseif fea==[1 1 0 1 0]8 Z8 A1 Y, n6 F0 K9 ]
feature=[ampmat,energymat,fremat];
" v% Z: w& S& @6 \ elseif fea==[1 1 0 0 1]
* L# L( E! q* ] feature=[ampmat,energymat,mfccmat];/ F) h, U' X A1 U1 E: B
elseif fea==[1 0 1 1 0]
1 H, U. x" i! ]8 N4 I7 Z4 k feature=[ampmat,entropymat,fremat];+ H2 V( k; u- b6 k
elseif fea==[1 0 1 0 1]
( ^: q$ U d D. Q5 k$ @" p+ Q feature=[ampmat,entropymat,mfccmat];
8 F: @9 A/ q9 x: M elseif fea==[1 0 0 1 1] A$ E7 Z2 M6 N) ?; s
feature=[ampmat,fremat,mfccmat];
& |( R# c% i' u1 x! {' Y elseif fea==[0 1 1 1 0]+ ~. \! b/ s. m
feature=[energymat,entropymat,fremat];
$ ?; v2 O& n' H$ t+ o* P, w elseif fea==[0 1 1 0 1]
( p% H) { W+ w- L feature=[energymat,entropymat,mfccmat];! ]3 h2 G- Q) \3 ^! F) w- h0 t# @: g
elseif fea==[0 1 0 1 1]0 k8 _2 |$ O" P
feature=[energymat,fremat,mfccmat];" a% { i8 ~; i& M- \: z! Q
elseif fea==[0 0 1 1 1]
4 z, H4 ^ B1 M: @ feature=[entropymat,fremat,mfccmat];- C& D6 N% Y. [# O0 F6 I/ B) m
elseif fea==[1 1 1 1 0]4 U9 M+ m; D2 ]# u9 h
feature=[ampmat,energymat,entropymat,fremat];
V& Y+ \/ L+ i; L elseif fea==[1 1 1 0 1]
0 Z; q! O. e5 O feature=[ampmat,energymat,entropymat,mfccmat];
1 B/ ~0 a8 g' c: C% \7 h elseif fea==[1 1 0 1 1]
" y; }7 d: h+ i3 M2 p& V feature=[ampmat,energymat,fremat,mfccmat];3 ]+ u3 m4 |. k3 T8 i' R+ Y
elseif fea==[1 0 1 1 1]9 w0 y2 o" A; g! V1 m
feature=[ampmat,entropymat,fremat,mfccmat];
+ o1 L+ n; O1 Y! ]- u elseif fea==[0 1 1 1 1]
+ l, _0 V- [( z feature=[energymat,entropymat,fremat,mfccmat];& P* G# h7 N9 f& m
elseif fea==[1 1 1 1 1]
W" R; l0 o: a6 Q$ ] feature=[ampmat,energymat,entropymat,fremat,mfccmat];
) c$ z( n. y. n E8 K else ?% `4 u ^" \5 z+ |9 S9 U
errordlg('Error!Please choose features','Error');5 `4 p0 o# s2 ]8 J% o0 z. |) T1 X
end
& r; M6 Q8 J m% k6 U) _ 7 _! I! _$ L% j: m- ?& r& ]/ z
0 Y' ~# K+ b4 |) A r=randperm(600);" a9 p% ~2 d9 h: i# C! h" ?0 J
X0=feature(r, ;
E: h0 B; \3 w1 c6 h8 n Xtrain=X0(1:420, ;' V' O# [0 V- J6 @
Xtest=X0(421:600, ;
- W. M5 s9 s! c, `5 r7 ^/ M3 j# _ label0=label1(r,:);
4 E; C4 D+ ^7 c: f labeltrain=label0(1:420,:);
$ z* ]: d5 z$ f. X) { labeltest=label0(421:600,:);/ Z! i2 k8 l4 g; ^0 R9 f3 x# f# r
TResult=KNN(Xtrain,Xtest,labeltrain); ; T9 ~( e g1 \% n4 L
rnum=0;
! Q1 L4 w! m7 R# [; o for i=1:180
0 z6 Q* X7 C: I if TResult(i)==labeltest(i)
0 G1 B i( o5 c# \9 K rnum=rnum+1;
8 x: B, Y6 P& e3 e1 Q% q& o; ` end
" c" P8 ~8 X& P# q end$ ]/ x* p, s( T& F
' K; V( J6 I8 t" M: F
set(handles.edit1,'String','loading completed');
. m$ y0 E0 }( h1 Y) i" } set(handles.edit2,'String',num2str(rnum/180));3 Y0 h' b1 y, c
1 T5 {( Y7 l- k! z
function result=KNN(train,test,trainlabel)# j" @5 A6 Z. z( Y5 e9 x: T) f
k=2;
+ c+ b: k, `) K' A7 \9 j( Wtestlength=length(test(:,1));! L( F7 G9 _: P
trainlength=length(train(:,1));
- g' h- L8 Z7 t# b5 gfor i=1:testlength
! @1 e4 n: y( [$ o dist=zeros(trainlength,1);
" l4 A, R8 b6 Y( p for j=1:trainlength, T, G8 f/ M. V, _
dist(j)=distance(test(i,:),train(j,:),1);4 y) d3 g( n0 ~. l0 N
end
. | j& r1 @3 V7 v5 G5 ~3 r8 e [Y,I]=sort(dist,1);0 |& p( Z! |$ ~0 n7 M% E
k=min(k,length(Y));6 j* J3 M+ m2 g. Z2 F4 T- F8 ]2 z
labels=trainlabel(I);
5 G2 E5 O/ \5 O' ? result(i)=mode(labels(1:k));% x3 z( N/ |) S4 z1 u6 Y% r. g' j
end |
|