|
|
这是按钮的回调函数,KNN是其中调用到的一个函数2 G: H: d) h# s$ W. N2 n$ J
function train_Callback(hObject, eventdata, handles)
5 K6 h5 p7 {3 F5 T+ nglobal fea L2 k d; I0 U; m
global classifier/ G: W6 u1 V+ l2 Z3 E: u0 X9 g
global rnum
! K$ }. c7 o$ x
5 \; z; C* x/ U' Y; } load('feature.mat');( J9 x" y5 [* y5 h( ^& j3 q3 Y
load('label1');
# u! y& Y M; s3 I if fea==[0 0 0 0 0]6 t4 }0 C5 s2 s; H E- d% o
errordlg('Error!Please choose features','Error');
, z2 i1 e! E. i2 Y3 W. E( v) }& ~9 ^ elseif fea==[1 0 0 0 0]
# c7 D$ I/ E) x3 w) @ Z8 ?2 _ feature=[ampmat];
1 q" u* b: y* J( S' I elseif fea==[0 1 0 0 0]7 k$ K* ^. e: V& P! i7 c" }+ r7 f% L
feature=[energymat];% F) v5 Z! A& P, k
elseif fea==[0 0 1 0 0]
0 z# }! g( j+ C; d feature=[entropymat]; K, B0 {0 [( s) P3 Q& l% ~
elseif fea==[0 0 0 1 0]
: ]2 L$ b, f: X8 g5 I feature=[fremat];
' W, |$ y* [( N& Q* O+ d* S elseif fea==[0 0 0 0 1]. }0 t( T9 Z2 q% E
feature=[mfccmat];
8 j! m4 U& i# K( {- h0 n4 k elseif fea==[1 1 0 0 0]# n9 G6 }, f6 ~1 v3 K) o5 @& Z
feature=[ampmat,energymat];# R2 i# ^) s/ n- m. T3 A$ V
elseif fea==[1 0 1 0 0]
5 ?3 }2 e0 f& T+ G' _! X8 j2 \+ u feature=[ampmat,entropymat];
: A% ]; J7 C3 r' X6 U1 N N# `% O5 [ elseif fea==[1 0 0 1 0]9 V; ?. J3 `# S6 W- U% P. _
feature=[ampmat,fremat];# A+ A+ A/ G. f- M3 g2 P5 H8 t. S
elseif fea==[1 0 0 0 1]
7 u% h* Y0 t+ y feature=[ampmat,mfccmat];; R ] Y& o9 p* O9 |2 [1 |
elseif fea==[0 1 1 0 0]
! l, j. P3 y; Q1 S" O$ R feature=[energymat,entropymat];$ P" U1 p- U3 ]
elseif fea==[0 1 0 1 0]
2 \* V+ i/ f+ X5 p0 h; r' T- A feature=[energymat,fremat];
3 ? l Y( \# P o: W W elseif fea==[0 1 0 0 1]' L/ J- W3 Y6 Z
feature=[energymat,mfccmat];7 h k ~% x8 I& R/ w0 ^ {
elseif fea==[0 0 1 1 0]
0 h7 C) ]2 p* b8 k) O feature=[entropymat,fremat];
4 O c$ |* `& s0 `! x9 i+ b: ` elseif fea==[0 0 1 0 1]6 F+ i0 h5 }% i
feature=[entropymat,mfccmat];+ E3 s# U% Z4 g6 A! D8 @% r% q
elseif fea==[0 0 0 1 1]% d8 [8 z8 ` K5 n; g* z; b
feature=[fremat,mfccmat];6 C/ O7 j* u. Y% C0 B; N- Y
elseif fea==[1 1 1 0 0]
, }# n- o7 j# `' ?# g4 v- F feature=[ampmat,energymat,entropymat];" E9 b( R) w! i# v4 [- m0 q% a5 T
elseif fea==[1 1 0 1 0]4 N1 I# i4 L8 Y
feature=[ampmat,energymat,fremat];+ _$ h. d' u& Y* v2 `2 y, q# O# b8 o
elseif fea==[1 1 0 0 1]$ B1 W7 T# v/ G! a f% g4 e6 i
feature=[ampmat,energymat,mfccmat];
* L3 C! k/ q3 D, a1 `+ V elseif fea==[1 0 1 1 0]6 X' d8 N( z' m' {2 E, Q
feature=[ampmat,entropymat,fremat];
6 P+ P6 c8 @. L2 q7 D# q$ c elseif fea==[1 0 1 0 1]& K7 d. f1 z1 z6 ]
feature=[ampmat,entropymat,mfccmat];
& }% P- Q" W m. J1 q3 c7 ] elseif fea==[1 0 0 1 1]( l$ h; H2 W0 k) F
feature=[ampmat,fremat,mfccmat];
4 ^' w3 s1 M, d: P) D elseif fea==[0 1 1 1 0]+ X# ]3 L+ |5 o% g+ K( C0 B# x" |
feature=[energymat,entropymat,fremat];
5 d' {$ E0 B- Z0 }7 P elseif fea==[0 1 1 0 1]1 C# w1 o& q) u$ z. ]
feature=[energymat,entropymat,mfccmat];$ W' E7 _# {' q! ~
elseif fea==[0 1 0 1 1]
- m! ?+ w' R4 G feature=[energymat,fremat,mfccmat];
! f0 F3 z; R2 r5 x elseif fea==[0 0 1 1 1]
2 @8 Z6 {8 w! d$ k6 ? feature=[entropymat,fremat,mfccmat]; H9 v2 q: K! f$ B
elseif fea==[1 1 1 1 0]& t- j _2 C# @9 s! K+ l, ?5 ~
feature=[ampmat,energymat,entropymat,fremat];: V4 g# E$ O* \+ x
elseif fea==[1 1 1 0 1]' z3 y/ P7 @. A9 v
feature=[ampmat,energymat,entropymat,mfccmat];
' c. i: [( X7 N. j, t elseif fea==[1 1 0 1 1]; E+ v( [8 ^1 I3 l1 d
feature=[ampmat,energymat,fremat,mfccmat];2 L" t/ i$ x% t8 d7 {; x
elseif fea==[1 0 1 1 1]
, V% s- L2 M4 s7 j feature=[ampmat,entropymat,fremat,mfccmat];
# a' V4 s$ D9 q. i+ Q7 S elseif fea==[0 1 1 1 1]+ ]0 w% X# y/ i1 `7 f
feature=[energymat,entropymat,fremat,mfccmat];
; X h2 s$ q, ~ elseif fea==[1 1 1 1 1]
6 A1 J# ~1 u9 [5 G feature=[ampmat,energymat,entropymat,fremat,mfccmat];. V! |7 f" c7 f6 ?" a
else
# W( q1 X6 N& R6 J4 _6 N5 Q errordlg('Error!Please choose features','Error');8 k6 `+ r9 H5 C; M4 }# a
end. T( H a! q5 l! t: U, W) h
3 [( o2 V' v- `1 Y6 f' Y8 Z% x
% b* x# _3 m' i3 t0 v; F r=randperm(600);( x- ?8 ~3 v+ y" }$ n& W
X0=feature(r, ;
) E! M- @7 a Y- Z. h& S! ` Xtrain=X0(1:420, ;/ C$ D2 l# M d- C7 k% C
Xtest=X0(421:600, ;3 v* ~- H w$ {3 M0 _' d: A9 y8 w
label0=label1(r,:);7 h9 ^: i! h9 @6 U
labeltrain=label0(1:420,:);
6 V& q- e" T8 @) w9 h$ O' U# ^ labeltest=label0(421:600,:);
* m! U# K* ?) \) x( P/ N TResult=KNN(Xtrain,Xtest,labeltrain); : \) H. t: |; {2 c& l0 ]8 W9 r& z6 d
rnum=0;
) T5 Y. d1 i" j* D7 k for i=1:180
: ` F6 ?5 l/ w if TResult(i)==labeltest(i)% ]6 |6 i6 j% ]+ l9 e0 m
rnum=rnum+1;
( d0 v( O. O4 n$ d end
( d3 F: H# |3 o; S& h end
2 m6 n$ T0 @: S4 ~' ? 5 _3 l' u5 [6 |: q/ P
set(handles.edit1,'String','loading completed');
$ G' Q2 U2 |. ^7 {' E. V set(handles.edit2,'String',num2str(rnum/180));
# }9 ~" }0 c$ }: y" I8 S0 ^5 t1 M
function result=KNN(train,test,trainlabel)0 m$ }# v$ a: [' g& v& E% y; \) w! |
k=2;7 J# y' f' `, y5 Q, @
testlength=length(test(:,1));
* I9 f( a1 R, d% z. l4 D$ ztrainlength=length(train(:,1));
6 R4 u a5 [6 |; `$ H0 `' k9 ^for i=1:testlength
; U+ S; a' W: B& X: V& k8 T dist=zeros(trainlength,1);
) W# [! Z/ ]% g2 D) {. y' o for j=1:trainlength; D0 K1 U5 |1 {5 U. S
dist(j)=distance(test(i,:),train(j,:),1);
- S! }7 i6 k* B& f% V9 X end- B& n+ ?7 F9 w* Q& A( L
[Y,I]=sort(dist,1);: h0 M! a) ]# _ q
k=min(k,length(Y));* e: j# A9 Z$ T8 y. L) O
labels=trainlabel(I);
6 {8 G/ o# w9 u! \+ V- |5 ? result(i)=mode(labels(1:k));3 ]3 t! c7 i U
end |
|