【情感识别】基于matlab GUI改进的KNN算法语音情感分类识别【含Matlab源码 354期】

举报
海神之光 发表于 2022/05/29 03:42:05 2022/05/29
【摘要】 一、 KNN算法简介 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即...

一、 KNN算法简介

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

1 定义
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,即由你的“邻居”来推断出你的类别.

2 距离公式
两个样本的距离可以通过如下公式计算,又叫欧式距离
在这里插入图片描述
3 KNN算法的步骤
(1)计算已知类别数据集中每个点与当前点的距离;
(2)选取与当前点距离最小的K个点;
(3)统计前K个点中每个类别的样本出现的频率;
(4)返回前K个点出现频率最高的类别作为当前点的预测分类。

4 KNN原理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5 KNN的优缺点
在这里插入图片描述
6 KNN性能问题
NN的性能问题也是KNN的缺点之一。使用KNN,可以很容易的构造模型,但在对待分类样本进行分类时,为了获得K近邻,必须采用暴力搜索的方式,扫描全部训练样本并计算其与待分类样本之间的距离,系统开销很大。

二、部分源代码

clc;
close all;
defcolor=[0,0,0];
h_fig=figure(1);
set(h_fig,'Menubar','name','语音情感识别系统 v1.0',...
    'Numbertitle','off',...
    'color',[0.9023    0.9074    0.8055]);
h_text=uicontrol(h_fig,'style','text','unit','normalized',...
    'position',[0.0,0.0,1,1]);
h_text1=uicontrol(h_fig,'style','text','unit','normalized',...
    'position',[0.0,0.85,0.25,0.05],'horizontal','left',...
    'string','请选择待检测wav文件:','fontsize',10,'ForegroundColor',defcolor);
h_edit1=uicontrol(h_fig,'style','edit','unit','normalized',...
    'position',[0.28,0.80,0.5,0.1],'horizontal','left',...
   'fontsize',10, 'ForegroundColor',defcolor);
h_push3=uicontrol(h_fig,'style','push','unit','normalized',...
    'position',[0.78,0.8,0.08,0.1],'horizontal','left',...
    'string','...','fontsize',20,'ForegroundColor',defcolor,'callback','getfile');
h_push1=uicontrol(h_fig,'style','push','unit','normalized',...
    'position',[0.4,0.75,0.18,0.05],'horizontal','left',...
    'string','确定','fontsize',10,'ForegroundColor',defcolor,'callback','process');
h_text3=uicontrol(h_fig,'style','text','unit','normalized',...
    'position',[0,0.5,0.28,0.1],'horizontal','left',...
    'string','传统KNN算法获得结果为:','fontsize',10,'ForegroundColor',defcolor);
h_edit2=uicontrol(h_fig,'style','edit','unit','normalized',...
    'position',[0.28,0.5,0.3,0.1],'horizontal','left',...
    'fontsize',10,'ForegroundColor',defcolor);
    [y,fs]=wavread(filename);
sound(y,fs)
X3=mean(FunFre(y,fs));
[X1,X2,X4]=TimePara(y);
k=13;
XA=[Aa Ah As X1];XE=[Ea Eh Es X2];XF=[Fa Fh Fs X3];XZ=[Za Zh Zs X4];  
PA=mapzo(XA);PE=mapzo(XE);PF=mapzo(XF);PZ=mapzo(XZ);
a=[PA(1:30);PE(1:30);PF(1:30);PZ(1:30)];
h=[PA(31:60);PE(31:60);PF(31:60);PZ(31:60)];
s=[PA(61:90);PE(61:90);PF(61:90);PZ(61:90)];
x=[PA(91);PE(91);PF(91);PZ(91)];
%%%传统KNN算法
disp('使用传统KNN算法识别结果为:')
A=oushi(a,x);
H=oushi(h,x);
S=oushi(s,x);
set(h_edit2,'style','text');
set(h_edit2,'string',judge(A,H,S,k));
%%%%%%%改进算法
disp('使用改进算法识别结果为:')
B=mean([Aa' Ah' As' Ea' Eh' Es' Fa' Fh' Fs' Za' Zh' Zs']);
A=reshape(B,3,4);
O=reshape([Aa Ah As],30,3);
for i=1:3
    for j=1:30
     OO(j,i)=(abs(O(j,i)-A(i,1))/A(i,1))^2;
    end
end
O=sqrt(sum(OO));
P=reshape([Ea Eh Es],30,3);
for i=1:3
    for j=1:30
     PP(j,i)=(abs(P(j,i)-A(i,2))/A(i,2))^2;
    end
end
P=sqrt(sum(PP));
Q=reshape([Fa Fh Fs],30,3);
for i=1:3
    for j=1:30
     QQ(j,i)=(abs(Q(j,i)-A(i,3))/A(i,3))^2;
    end
end
Q=sqrt(sum(QQ));
R=reshape([Za Zh Zs],30,3);
for i=1:3
    for j=1:30
  RR(j,i)=(abs(R(j,i)-A(i,4))/A(i,4))^2;
    end
end
R=sqrt(mean(RR));
X=[O' P' Q' R'];
for i=1:3
    for j=1:4
       V(i,j)=(sum(X(i,:))-X(i,j))/sum(X(i,:));
    end
    function [str]=judge(A,H,S,k)
f=[A H S];  %将欧距三个个矩阵合并
g=[A H];
d=numel(f);
c=[1:d];                      %用来存放排序后的欧距
c=lowtohigh(f,d);
 num1=0;                         %用来记录被判x类的次数
 num2=0;                         %用来记录被判y类的次数
 num3=0;
 for i=1:k
    for j=1:d
        if (c(i)==f(j))
            if j<=numel(A)      %如果选中的欧距出自x类
            num1=num1+1;
            elseif  j>numel(g)             %如果选中的欧距出自y类
               num3=num3+1;
            else
               num2=num2+1;       
            end
        end
        j=j+1;
    end
    i=i+1;
 end 
 
 if(num1>num2&num1>num3)
     w=0;
 elseif(num2>num1&num2>num3) 
     w=1;
 elseif(num3>num1&num3>num2) 
     w=2;
 end
end

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/113922259

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。