|
这是按钮的回调函数,KNN是其中调用到的一个函数 n8 ^. F0 @* \4 x
function train_Callback(hObject, eventdata, handles)1 _. g" T: Y" A" z
global fea
% A* x0 M; F1 Mglobal classifier& `6 Z' d( P3 E* U% m/ G* b1 g2 Z ^% z8 I
global rnum
0 K8 W) T6 W+ P5 ^ p
) c& X/ J4 ?9 p$ @2 ? load('feature.mat');; y d6 O; M; C/ D6 C
load('label1');* I1 E6 G2 k$ ]/ r0 ?
if fea==[0 0 0 0 0]
U5 S+ V! q, o errordlg('Error!Please choose features','Error');; q# v( Q/ l8 A7 C* X2 Q% i
elseif fea==[1 0 0 0 0]
% ?4 ]9 m J9 T' d) N feature=[ampmat];
. l# ^2 F$ F& n% V. R elseif fea==[0 1 0 0 0]
. E, s+ P/ q* B) e! O- C% m feature=[energymat];/ p* b7 B- r. w+ C6 r
elseif fea==[0 0 1 0 0]
3 f I) i# c+ F: k& [ feature=[entropymat];
; Y$ [) [2 Z! q2 b4 E- \+ j. C" a elseif fea==[0 0 0 1 0]) m( q/ d# M. I: {, Y# u
feature=[fremat];
" ~! \6 l- m. m% g! `) @ elseif fea==[0 0 0 0 1]
q% `. i5 B8 D feature=[mfccmat];
3 P2 J8 ?- _$ e" _; v elseif fea==[1 1 0 0 0]
u5 D4 G( R9 T8 a7 p% J feature=[ampmat,energymat];
; u; ~/ J; z0 z5 u6 a elseif fea==[1 0 1 0 0]- v% |, u# W; W0 f% y
feature=[ampmat,entropymat];
* n# W; W' {- k, B3 G7 P elseif fea==[1 0 0 1 0]" A( A Y: E) F! n$ v
feature=[ampmat,fremat];
. h! {* p/ V0 ?% w elseif fea==[1 0 0 0 1]9 B5 b! z9 i: E
feature=[ampmat,mfccmat];
0 r$ w( e( E2 w elseif fea==[0 1 1 0 0]9 q. ^% V5 x% c. N3 Z+ K* c
feature=[energymat,entropymat];; s0 R& ~6 ^! @
elseif fea==[0 1 0 1 0]
8 e# u/ W6 ]" P; r* g. V" g feature=[energymat,fremat];
# U$ C* n! H6 P" h elseif fea==[0 1 0 0 1]. m {, Y4 N3 P4 H4 z; O$ R1 [; e$ M
feature=[energymat,mfccmat];- g9 u. |! y0 T. H) x _4 F
elseif fea==[0 0 1 1 0]" X- o) @2 e. ]- H/ e) i
feature=[entropymat,fremat];
: n9 [+ \2 z, U5 j: J elseif fea==[0 0 1 0 1]! {; U# m% c+ H& _
feature=[entropymat,mfccmat];; t i2 u2 c' t
elseif fea==[0 0 0 1 1]
; w% W# B u& F$ `) p M feature=[fremat,mfccmat];
3 ~, T5 ], {8 d* }$ d elseif fea==[1 1 1 0 0] s0 Z( {0 A8 c' E1 w
feature=[ampmat,energymat,entropymat];
( ]$ v9 ^. M, K& E9 ? elseif fea==[1 1 0 1 0]
. F( p$ Z' Y% m feature=[ampmat,energymat,fremat];; z9 y% y. ]! A8 A7 Q
elseif fea==[1 1 0 0 1]1 c2 `- C7 M! `8 \+ @# V6 `/ K
feature=[ampmat,energymat,mfccmat];
' l1 Y6 {3 e* v) n9 M' H elseif fea==[1 0 1 1 0]# n! f9 s# ]' q$ C3 ?1 N5 {
feature=[ampmat,entropymat,fremat];
8 V2 P; E2 q+ J; p* A" { elseif fea==[1 0 1 0 1]; P: w* Z4 k. Q
feature=[ampmat,entropymat,mfccmat];
% Y4 G& d: g5 f+ y elseif fea==[1 0 0 1 1]
# `* j' y* ?9 |, U1 M feature=[ampmat,fremat,mfccmat];# u- X/ ~% L( I7 q
elseif fea==[0 1 1 1 0]
$ o* m& [& O( Y( F8 [/ g, c. i feature=[energymat,entropymat,fremat];9 B8 Z" n& J4 @9 r+ N$ F
elseif fea==[0 1 1 0 1] T6 _5 s& V5 u+ N( ?/ T+ q: r
feature=[energymat,entropymat,mfccmat];% x) ?! R- { [& ?/ m* U" }( ?2 _
elseif fea==[0 1 0 1 1]6 v2 P3 q0 B$ m1 T/ M
feature=[energymat,fremat,mfccmat];7 [5 D$ D, j9 ^9 r0 }4 i
elseif fea==[0 0 1 1 1]
' [/ M" p5 U' j* {1 K; z* {; N+ U% u) R feature=[entropymat,fremat,mfccmat];
1 D# Y+ h F. L8 [; [; p elseif fea==[1 1 1 1 0]
" y' M5 X/ K f/ S1 {4 F" R feature=[ampmat,energymat,entropymat,fremat];: m9 r- q0 ^# [/ X+ F
elseif fea==[1 1 1 0 1]
0 A1 s% D0 e6 ]7 q feature=[ampmat,energymat,entropymat,mfccmat]; m5 v" d5 |! i1 K% X
elseif fea==[1 1 0 1 1]
5 m) M: j9 R+ @! D) k- [$ G- `4 W feature=[ampmat,energymat,fremat,mfccmat];- {3 F0 ^' [# i( l' G$ C) }
elseif fea==[1 0 1 1 1]; a3 A) c: `+ Q! }" S1 q
feature=[ampmat,entropymat,fremat,mfccmat];" Y6 R5 E! O2 K+ k& H
elseif fea==[0 1 1 1 1]
: i* r; D4 I" P& D) i feature=[energymat,entropymat,fremat,mfccmat];
5 Z2 ^' d$ M2 ?2 F5 }8 m+ g elseif fea==[1 1 1 1 1]' L# D! f+ [# R% c' N0 B" M
feature=[ampmat,energymat,entropymat,fremat,mfccmat];$ K; `5 _/ O% _7 b4 ^, V
else% C4 ]0 n7 t3 q% l+ e
errordlg('Error!Please choose features','Error');
0 ~* q1 [# E) S" h end# M, m) D5 W# c4 [. m
: i6 G( \ X+ v# V
4 t6 F9 w) j: {% D& v
r=randperm(600);
$ y& ^, }, [( P( i. j X0=feature(r, ;
! }% k* D2 t3 V; \+ C) _ Xtrain=X0(1:420, ;" K* w+ R: d6 L; }' K; [% r/ n! q5 Y$ `
Xtest=X0(421:600, ;
7 B# R) q7 ~. l- a! x label0=label1(r,:);2 P' {# \# b1 u8 r3 l, s
labeltrain=label0(1:420,:);+ Q/ d' z& X8 Q/ Z; W b' L
labeltest=label0(421:600,:);4 I3 I6 O5 |2 U- w3 E9 k
TResult=KNN(Xtrain,Xtest,labeltrain);
( L( q+ s% v7 @2 F; J rnum=0;
5 P3 H. ^% e4 O% K, Z for i=1:180( [9 I/ S; S) p. K/ t
if TResult(i)==labeltest(i)
& ]$ i+ D; o6 n. X! s1 X rnum=rnum+1;6 X$ W& @1 m4 P) s; f7 |$ w: h
end0 Q0 g- E, j4 y6 e% ]
end& w1 l. B9 M0 h8 g7 c2 G
# M* s! h8 B* c' `5 c6 t0 j
set(handles.edit1,'String','loading completed');& d8 R" J2 x/ a" N' ~5 a7 F. y) R
set(handles.edit2,'String',num2str(rnum/180));
9 n% ~0 l- e, ]2 d" T
: b2 u( w* l7 y k% w1 Pfunction result=KNN(train,test,trainlabel)
* b( [9 E! ~4 z' w4 `* ek=2;9 h' f0 X X4 [
testlength=length(test(:,1));
/ _9 g" E* Q1 J1 N7 K8 V, Otrainlength=length(train(:,1));0 v# [& p- ]6 {
for i=1:testlength. O5 E) d( k6 g4 j" P( L8 H9 a2 t% E
dist=zeros(trainlength,1);+ p* D% {! `+ ? M* ~
for j=1:trainlength
0 |5 ~, y% N3 I. O/ j' }" b dist(j)=distance(test(i,:),train(j,:),1);% x* Z, K0 D7 M( i
end1 S: D5 t+ R. T' t1 ~2 a- s: I
[Y,I]=sort(dist,1);
0 s0 [6 e' I& C9 S0 e# r k=min(k,length(Y));' J+ X- h6 D- z6 r$ F- f6 U
labels=trainlabel(I);9 ^5 v! D9 E/ k- M" t
result(i)=mode(labels(1:k));0 M3 G: J$ p, n
end |
|