一、 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:3for j=1:30OO(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:3for j=1:30PP(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:3for j=1:30QQ(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:3for j=1:30RR(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:3for j=1:4V(i,j)=(sum(X(i,:))-X(i,j))/sum(X(i,:));endfunction [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:kfor j=1:dif (c(i)==f(j))if j<=numel(A)      %如果选中的欧距出自x类num1=num1+1;elseif  j>numel(g)             %如果选中的欧距出自y类num3=num3+1;elsenum2=num2+1;       endendj=j+1;endi=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

三、运行结果








四、matlab版本及参考文献

1 matlab版本
2014a

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

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

  1. 【图像去噪】基于matlab GUI butterworth+中值+维纳+小波图像去噪【含Matlab源码 520期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab GUI butterworth+中值+维纳+小波图像去噪[含Matlab源码 520期] 获取代码方式2: ...

  2. 【物理应用】基于matlab GUI气象参数计算综合指标和IAQI【含Matlab源码 2116期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[物理应用]基于matlab GUI气象参数计算综合指标和IAQI[含Matlab源码 2116期] 点击上面蓝色字体,直接付费下载,即可 ...

  3. jiegputo matlab转置,matlab实现用免疫克隆算法求二元函数的最优值(附源码)

    用免疫克隆算法求二元函数的最优值 求下面函数的最小值(最优解) ​ Goldstein-Price函数: ​ f1(x)=[1+(x1+x2+1)2(19-14x1+3x12-14x2+6x1x2+3 ...

  4. 基于JavaWeb Mybatis+MVC(JSP + servlet + javabean)的高校就业管理系统(含项目源码)

    基于JavaWeb Mybatis+MVC的高校就业管理系统 项目简介 基本功能简介 项目要求 概要设计 数据模型(E-R图) 数据库结构设计 主要页面展示 项目实现 创建项目 项目结构展示 项目关键 ...

  5. 【水果识别】基于matlab GUI苹果分级系统(带面板)【含Matlab源码 1827期】

    一.简介 中国苹果产销量居世界首位,传统的苹果分级由人工完成,长期以来,其劣势逐渐显现.因此,智能分拣是当今苹果分级的主要任务,而大小又是苹果分级的重要参考指标.国内外专家做了许多基于图像处理的苹果大 ...

  6. 【目标跟踪】基于matlab GUI帧差法结合卡尔曼滤波行人姿态识别【含Matlab源码 1127期】

    ⛄一.基于人体特征识别和卡尔曼滤波的行人跟踪算法简介 1 基于体型和行为姿态特征的人体识别算法 从红外图像中可以得到目标与背景之间的灰度级差别,从而区分出有生命特征的运动物体,但仅从亮度特征无法区别出 ...

  7. 【图像加密】基于matlab GUI正交拉丁方+二维Arnold置乱图像加密【含Matlab源码 813期】

    ⛄一.正交拉丁方置乱及二维Arnold置乱简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为: ...

  8. 【图像分割】基于matlab GUI医学图像均值聚类+OUST+区域生长法图像分割【含Matlab源码 2210期】

    一.图像分割简介 1 图像分割技术 图像分割 : 根据灰度 , 颜色 , 纹理等,将图像进行分割. 2 常用的分割技术 2.1 边缘检测法 边缘是图像的最重要的特征.边缘是指周围像素灰度有阶跃变化或屋 ...

  9. 【数字信号处理】基于matlab LMD算法和ELMD算法管道泄漏信号处理【含Matlab源码 1985期】

    ⛄一.局部分解理论研究 局部均值分解算法(Local Mean Decomposition, LMD) 作为处理非平稳随机信号的一种手段,得到了广泛应用,并成熟地应用于机械故障诊断.信号特征提取与分析 ...

  10. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

最新文章

  1. 基于图像的摄像机姿态估计方法评析
  2. 剑指offer:链表中倒数第k个结点 python实现
  3. Google Protocol Buffer 简单介绍
  4. 【翻译】QEMU内部机制:顶层概览
  5. mysql dba系统学习(18)mysql主从复制的实现 mysql dba系统学习(19)配置mysql+lvs+keeplived实现Mysql读操作的负载均衡
  6. Cannot place PIO comp S on the proposed PIO site PB6C / F5 because the types of their IOLOGICs a...
  7. LeetCode 705 Design HashSet 解题报告
  8. 使用@Order调整配置类加载顺序
  9. 最大功率点跟踪_华北电力大学颜湘武团队特稿:基于变功率点跟踪和超级电容器储能协调控制的双馈风电机组一次调频策略...
  10. shell提取文件中的dojo mobile类
  11. linux shell学习指南,shell脚本学习指南(shell脚本教程详细讲解) 电子扫描版
  12. sop8封装尺寸图_IC封装原理及功能特性汇总
  13. 莫烦-pytorch
  14. FIT2CLOUD飞致云旗下开源项目DataEase成功进入GitHub趋势榜主榜
  15. ARM920T的MMU
  16. python json.dumps(output) ^ SyntaxError: invalid syntax
  17. 大数据应用场景”之隔壁老王(连载二)
  18. 水性建筑涂料行业调研报告 - 市场现状分析与发展前景预测
  19. iOS定位添加大头针
  20. 荣耀v40怎么样 荣耀v40值得入手吗

热门文章

  1. 2017-2018-1 20155308 《信息安全系统设计基础》第十四周学习总结
  2. Mybatis selectKey标签的keyProperty属性报错,关键字间隔不能有空格
  3. 05-用两个栈实现一个队列
  4. 文本区 JTextArea 的使用
  5. FastReport.Net使用:[23]图表(Chart)控件
  6. Dubbox学习笔记
  7. 快速切换npm源的开源工具--nrm
  8. 使用AVR-GCC编程Arduino
  9. Java 通过JDBC连接Mysql数据库
  10. OpenCV人工智能图像处理学习笔记1目录