一、 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
clear all;
close all;%% 载入各情感的特征向量矩阵
load A_fear.mat;
load F_happiness.mat;
load N_neutral.mat;
load T_sadness.mat;
load W_anger.mat;
NumberOfTrain=size(fearVec,2)/2; %一半测试用,一半训练用
trainVector=[fearVec(:,1:NumberOfTrain),hapVec(:,1:NumberOfTrain),neutralVec(:,1:NumberOfTrain),sadnessVec(:,1:NumberOfTrain),angerVec(:,1:NumberOfTrain)]; % 构建训练样本集
testVector=[fearVec(:,(NumberOfTrain+1):size(fearVec,2)),hapVec(:,(NumberOfTrain+1):size(hapVec,2)),neutralVec(:,(NumberOfTrain+1):size(neutralVec,2)),sadnessVec(:,(NumberOfTrain+1):size(sadnessVec,2)),angerVec(:,(NumberOfTrain+1):size(angerVec,2))]; % 构建测试样本集
k=9; %k 最近邻
distanceMatrix=zeros(size(trainVector,2),size(testVector,2)); % 每一列表示某个测试语音与所有训练集样本的距离
%% 计算每个测试样本和训练样本集各样本的距离
for i=1:size(testVector,2)for j=1:size(trainVector,2)distanceMatrix(j,i)=norm(testVector(:,i)-trainVector(:,j)); %计算欧氏距离end
end
%% 统计分类结果 (根据相应的特征向量在数组trainVector或testVector中所处的位置来辨别类型)
totalTestNumber=size(fearVec,2)-NumberOfTrain;
emtionCounter=zeros(1,5);
n1=NumberOfTrain;
n2=n1+NumberOfTrain;
n3=n2+NumberOfTrain;
n4=n3+NumberOfTrain;
n5=n4+NumberOfTrain;
p1=size(fearVec,2)-NumberOfTrain;
p2=p1+size(hapVec,2)-NumberOfTrain;
p3=p2+size(neutralVec,2)-NumberOfTrain;
p4=p3+size(sadnessVec,2)-NumberOfTrain;
p5=p4+size(angerVec,2)-NumberOfTrain;
if(n5~=size(trainVector,2)||p5~=size(testVector,2))disp('data error')return;
endfor i=1:size(distanceMatrix,2)flag=zeros(1,5);[sortVec,index]=sort(distanceMatrix(:,i));% 统计K个近邻中各类别的数量for j=1:kif(n1>=index(j)&&index(j)>=1)flag(1)=flag(1)+1;elseif(n2>=index(j)&&index(j)>n1)flag(2)=flag(2)+1;elseif(n3>=index(j)&&index(j)>n2)flag(3)=flag(3)+1;elseif(n4>=index(j)&&index(j)>n3)flag(4)=flag(4)+1;elseflag(5)=flag(5)+1;endend[~,index1]=sort(flag);% 如果K个近邻中数量最多的类别与该样本实际的类别一致,则认为算法识别正确,相应counter加一。if((p1>=i&&i>=1)&&index1(5)==1)emtionCounter(index1(5))=emtionCounter(index1(5))+1;elseif((p2>=i&&i>p1)&&index1(5)==2)emtionCounter(index1(5))=emtionCounter(index1(5))+1;elseif((p3>=i&&i>p2)&&index1(5)==3)emtionCounter(index1(5))=emtionCounter(index1(5))+1;elseif((p4>=i&&i>p3)&&index1(5)==4)emtionCounter(index1(5))=emtionCounter(index1(5))+1;elseif((p5>=i&&i>p4)&&index1(5)==5)emtionCounter(index1(5))=emtionCounter(index1(5))+1;endend
function feature=featvector(filename)
[y,fs]=wavread(filename);
L=length(y);
ys=y;
for i=1:(length(y)-1)if (abs(y(i))<1e-3)  %  剔除较小值,计算短时能量时使用  %ys(i)=ys(i+1);L=L-1;end
end
y1=ys(1:L);
s=enframe(y,hamming(256),128); %  分帧加窗  %
s1=enframe(y1,hamming(256),128);
[nframe,framesize]=size(s);
[nframe1,framesize1]=size(s1);
E=zeros(1,nframe1);
Z=zeros(1,nframe);
F=zeros(1,nframe);
for i=1:nframeZ(i)=sum(abs(sign(s(i,framesize:2)-s(i,framesize-1:1))))/2;  %  过零率  %
end
for i=1:nframe1E(i)=sum(s1(i,:).*s1(i,:)); %  短时能量  %
end
s1=x2-x1;s2=x3-x4;
E_Reg_coff=s1/s2;
x=0;
for i=1:nframe1t=E(i)-(mean(E)-s1/s2*x4/nframe1)-s1/s2*i;x=x+t^2/nframe1;
end
E_Sqr_Err=x;
feature(1:7,1)=[max(E);min(E);mean(E);var(E);E_shimmer;E_Reg_coff;E_Sqr_Err];%  短时能量相关特征  %%  能量比  %
feature(8,1)=Eratio;end

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
[3]叶斌.基于HMM和PNN的语音情感识别研究.[J]青岛大学学报(工程技术版). 2011,26(04)

【情感识别】基于matlab KNN算法语音情感识别【含Matlab源码 542期】相关推荐

  1. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  2. 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  3. 【BA TSP】基于matlab蜜蜂算法求解旅行商问题【含matlab源码 1248期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab蜜蜂算法求解旅行商问题[含matlab源码 1248期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...

  4. 【IA TSP】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[旅行商问题]基于matlab免疫算法求解旅行商问题[含Matlab源码 195期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  5. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  6. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  7. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  8. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  9. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  10. 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...

最新文章

  1. YOLOv5 它来了!基于 PyTorch,体积比 YOLOv4 小 90%,速度却超 2 倍!
  2. Vim使用技巧及基本命令分类
  3. 用ASDM管理思科PIX防火墙
  4. java面向对象思想如何理解
  5. Python爬虫开发:中文字符编码问题quote解决
  6. Java黑皮书课后题第5章:**5.33(完全数)如果一个正整数等于除它它本身外其他所有除数之和。就称之为完全数。如6是第一个完全数,因为6=1+2+3。10000以下的完全数有4个,编写程序找出
  7. 中点击按钮新建widget_iOS 14-Widget开发
  8. 云原生应用 Kubernetes 监控与弹性实践
  9. raspberry pi_如何使用Raspberry Pi测量颗粒物
  10. Spring : Spring Aop JDK和CGLIB动态代理调用过程
  11. 请写出至少五个块级元素_Java 面试题(五)
  12. java map的应用_JAVA map的简单应用
  13. 共合网,风投的概念和阳谋
  14. CTFHUB Web题解记录(信息泄露、弱口令部分)
  15. socket基本使用
  16. 我们都是穷人甲乙丙丁
  17. 小米电视联网后显示无法解析小米电视服务器,小米电视机功能详解 教你轻松使用...
  18. 高数 08.02 可分离变量微分方程
  19. android room 主线程,Android Jetpack之Room篇
  20. 常见的网页设计布局有哪些?优秀的网页设计都有的8个特点

热门文章

  1. 非常吃惊,程序猿在工作中的幸福感居然是?????
  2. 【bzoj2219-数论之神】求解x^a==b(%n)-crt推论-原根-指标-BSGS
  3. 2020-11-30 03_空域图像处理 笔记
  4. 传智播客Java引用和数值类型思考
  5. Atitit 信息处理设备与历史与趋势 目录 1. It设备简史与艾提拉觉得常见重要的设备 2 2. 第一部分 IT萌芽期(约公元前4000年至1945年) 2 2.1. 苏美尔人的象形文字(约公元
  6. Atitit lucence 使用总结 目录 1. 基本概念 1 1.1.   Index:索引库,文档的集合组成索引。 1 2. 建立索引 2 2.1. Api查询 2 2.2. Dsl查询 3
  7. Atitit webdav应用场景 提升效率 小型数据管理 目录 1.1. 显示datalist 1 1.2. Ajax填充数据 1 1.3. 编辑数据 2 1.1.显示datalist
  8. Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
  9. paip.前端加载时间分析之道优化最佳实践
  10. paip.python php的未来预测以及它们的比较优缺点