《基于MATLAB机器学习算法的肺炎患者的音频信号分类研究》13000字_第1页
《基于MATLAB机器学习算法的肺炎患者的音频信号分类研究》13000字_第2页
《基于MATLAB机器学习算法的肺炎患者的音频信号分类研究》13000字_第3页
《基于MATLAB机器学习算法的肺炎患者的音频信号分类研究》13000字_第4页
《基于MATLAB机器学习算法的肺炎患者的音频信号分类研究》13000字_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

[8]。对于ANN算法,虽然此类方法应用也较为广泛且精确度高,但考虑到实际应用中时间的关系,所以对于本次课题,我选用的是SVM(支持向量机算法)进行模型训练的建立和分类实现,最终实现的结果能大致基于机器模型判断出音频的健康与否,二划分为肺炎患者与健康者。本次课题研究可用于多方面场合,比如医用简易诊断、患者自查或是一些相关方面领域的智能辅助分析。本课题研究主要包括四个方面:其一是通过MATLAB对采集到的音频进行数据的读取,将其以文本形式显示出来,再对特征值维度进行分析并对于过多的特征值进行主成分降维(PCA)提取音频信号特征。其二是针对降维后的数据特征以及量化标签进行SVM算法的模型建立以此来进行疾病与健康的识别。第三是根据SVM算法建立的模型测试患者音频的识别准确率。最后是对于MATLAB程序得到的结果进行绘图分析和进一步的探讨。2肺音信号分类理论基础2.1肺音基础理论肺音,顾名思义主要是人体肺部等器官工作时发出的声音,肺音同样也是指一系列的声音总称,其中包含很多比如气管音等。肺音大体可分为正常与异常两大类。在内部疾病的影响作用下,肺部发出的声音会相比正常者有所不同,较正常肺音信号,病变之后发出的声音会包含一系列的附加声音,比如湿罗音,干罗音等。湿罗音是人体呼吸时从外部吸入的气体通过人体呼吸道中的分泌物比如痰液而形成如水泡破裂般的声音,所以也因此称为称水泡音,通常支气管类病症会伴有此音。干罗音则是由于人体气管通道小,导致从外部吸入空气通过时发出的声音。哮鸣音是广泛小支气管狭窄所致,是一种音调较高的干罗音,若患者患有支气管哮喘那么就有哮鸣音伴随产生。爆裂音则是判断患者是否患肺炎等病症的依据,这是一种持续时间很短的突发音,产生于吸入气体与体内气管之间的摩擦。从时域频域上分析来看,健康个体肺音信号的能量主要分布于低频部分且频响范围一般大于50Hz而小于3000Hz,在这个范围内会有很多人体内产生的其他声音与之混杂,比如心脏活动产生的心音,人体内各种肠胃的活动声等。因而继续采用传统的人工听诊方式会造成大量信息的流失和听诊结果的不确定性,同时也有必要对于采集到的音频信号做预处理工作。肺音音频中随机噪声的产生一来可能由于人体本身,二来也可能来自声音采集器,若所选用采集音频器件的灵敏度过高,在这种情况下,采集器与人体或者环境噪声的影响就会被其接受,通过器件内部电路从而成倍放大,进而影响到整个采集的音频。其中工频干扰部分则主要来自于所用器件及其周遭的电子设备,这种干扰最明显的体现就是对于音频信号造成突刺干扰,即在波形上会形成一个突起的“山峰”。而仪器噪声部分则由热噪声组成为主,人体是一个复杂的工作系统,期内各种各样的器官时时刻刻都在工作,所以由其他器官产生的噪声自然也时时刻刻都在发出声音,同样的道理,采集过程中周围的环境也不一定是理想环境,仪器启动的声音,周围人群行走的身影,甚至被采集者自身所发出的声音都可以称之为噪声。在这样的情况下,对于所采集音频一个必不可少的操作就是对其进行滤波处理和去噪处理,最后经过处理得到的音频才能进行进一步的操作。2.2常见肺音异常音分类除此之外,在整个肺音分类过程中有一个问题我们需要格外注意,主要体现在对于检测分类的正确性和判断指标特征。目前在目前国际上并没有统一的标准进行详细划分各种类的肺音,因为影响判断的因素有很多且因各地区科技水平参差不齐等其他方面的限制做不到完全一样。由于各地方科研条件不一致,实验环境的参差不齐使得所进行实验数据结果也有一定的参差性,在往后的肺音分类研究往后的继续发展中,这是一个需要解决的重要难题。一般的肺音信号属于随机信号,且都是非平稳信号,在进行去噪处理时要注意在去除一般噪声的同时不能消除异常肺音,否则会对诊断结果造成很大的影响。随着研究学者们的研究不断推进,对于爆裂音而言,其逐渐代替了之前的罗音等其他叫法。常见分类如下表所示:图2-1常见异常音分类图2.3分类流程设计肺音信号分类整个过程包含音频信号的采集、对数据的预处理、特征提取以及特征选择、根据算法建立模型、对样本进行测试、结果评估等过程,具体流程如下:结果评估测试样本算法模型建立特征提取,特征选择预处理数据采集结果评估测试样本算法模型建立特征提取,特征选择预处理数据采集图2-2一般肺音分类流程图数据采集:用专门采集患者音频器件收集,比如AKGC417L、Meditron设备等,储存音频格式为wav格式,音频信号均为真实采集所得。预处理:包括周期分割、对所测得数据标准化等步骤,目的是使得数据集更贴合课题的要求。特征提取和特征选择:本数据集频率统一为4000Hz,基于软件为MATLAB,读取音频时特征总数为80000个,所以采用PCA降维技术来减少所用的特征值个数,降维后最具代表性的数据特征于量化标签进行模型的建立。算法模型建立:通过预处理好的数据集进行训练集和测试集的划分,因为本次课题所采集的样本数不多,所以课题选用支持向量机(SVM)算法进行训练模型的建立。测试准确率:将待测样本导入训练好的模型中进行测试。结果评估:对模型测试结果进行分析,对所测得结果进行绘图表示,计算差错率。在本次课题中我负责的部分主要是对采集到并经过初步处理的音频信号进行分类工作,具体流程图如下:归一化处理划分训练、测试集PCA降维数据处理,整合读取图像信息初始化程序归一化处理划分训练、测试集PCA降维数据处理,整合读取图像信息初始化程序结果分析并进行表示对测试集数据进行预测训练SVM模型结果分析并进行表示对测试集数据进行预测训练SVM模型图2-3研究进行流程图3主成分分析(PCA)在肺音分类中的应用3.1主成分分析(PCA)基础理论在对特征值进行降维操作方面,PCA这项技术应用非常广泛,它的方法是利用线性投影方式把一个维度的特征值数据进行映射操作投影到另一个维度上去,而被投影的那一个维度往往比原先的维度更低,而我们知道方差往往可以表示数据的偏离程度,所以如果被投影维度上的数据其方差可以到达最大值,那么通过这个操作我们就可以用尽可能少的低维数据来表达原先尽可能多的高维数据,也就是达到了降维的目的,这就是PCA降维技术的通俗介绍。PCA降维技术作为一种在现今研究中广为流传的数据降维算法,可以将其用唯物辩证法的观点视为将事物的主要矛盾把握的一种途径,从数学上理解也是一种多元的统计分析方法,在特征提取研究方向上一直是很受研究学者们称赞的算法,无论是在以前还是在现在都一直是一个热点技术。不仅因为通过PCA降维操作对初始数据进行降维特征处理后可以让问题的复杂程度和处理时间大大降低,它同时也能提升初始数据集的信噪比,从而来提高数据的抗干扰能力和传输质量。我们知道在概率论中方差定义为变量含有的信息量,如果一个变量的方差越大那么它所含的信息量就越大,但如果在方差为0的情况下我们就可以认为此变量包含的信息量为0。PCA降维的一个重要原则是尽可能多的保证“信息量不丢失”,同时选择那些降维后最具代表性的数据进行数据选择,如果原始数据很多那么在降维的时候应该对愿特数据往保有最大信息量的那些维度上进行投影,经过这样的操作可以将原特征投影到这些维度上使降维后信息量保留尽可能的达到最大。通过联系线性代数的知识举一个简单的例子,我们将初始数据集通过投影放到一个新的空间中,可以类比矩阵里面的变换,只不过是换了一种更简洁的形式将其表示出来,这样我们通过两者之间的一个转换系数或者是公式可以把两者进行联系起来,转换到新的空间中后,如果要把原来的数据集在新的空间中表示出来则和原先的表达方式发生了改变,我们只用原来数据集的最大的一个线性无关组的特征值对应的空间的坐标就可以进行表示。举一个直观的例子,如果初始样本数目有50个,每个样本的特征值有一千个,维数也就是50*1000,我们对于这种数据集就要进行PCA降维,因为特征值超出了处理能力的范围,而且总体数目因为太多,可能有很多特征值可能并不是很重要,也就是包含数据集的信息很少,如果我们不进行降维操作直接进行寻训练模型的建立,那么分析难度会非常大且时间所需也会非常大。PCA降维操作首先需要运用线性代数知识来计算一个初始样本矩阵的协方差矩阵,通过计算完后这个协方差矩阵维度是1000*1000,然后要对这个协方差矩阵再次计算相应参数,即特征值和其对于特征向量,最后通过前述计算出的最大特征值的特征向量表达出转换矩阵。进行完上述操作后就可以对之前计算出的特征值和特征向量进行由高到低的排列.根据贡献率来看,倘若前30个特征值已经可以把整个数据集尽可能多的表示出来,后面的20个特征值对于数据集的表现影响不大的话,在这样的情况下我们只用把前30个特征值的特征向量进行提取。这样就组成了一个1000*30的转换矩阵,最后将原先初始的样本矩阵和这个转换矩阵进行相互乘积,也就是50*1000*1000*30=50*30,这样一来,特征值数目就从原来的一千个降低到了30个,不仅让分析过程难度大大的降低了,也在分析时间是缩短了很多,也就实现了降维的过程。通常情况下,PCA降维操作后样本的特征值数目不会超过最开始的初始样本数,即不会超过初始样本数。对于给定的数据集,PCA降维一般步骤如下图所示:图3-1PCA降维步骤图3.2PCA在MATLAB中的应用3.2.1三种PCA具体实现方法在MATLAB中实现PCA降维的方法有多种,这里主要介绍以下三种方法。用MATLAB系统本身自带函数进行降维。(princomp函数)其中X为初始数据集的矩阵,COEFF代表所计算得出协方差矩阵的特征向量,SCORE是其主成分,若要降k维只需取前从前方往后的k列数据即可,latent则是指包含协方差矩阵特征值的向量,通常用的比较少。进行手动编程实现PCA。具体计算过程如下:将原始数据按m行n列排列为样本矩阵X。(行数为样本个数,列数为每个样本对应的特征值个数)求出样本矩阵X的协方差矩阵C和样本均值m。求协方差矩阵对应的特征值D和特征向量V。(本次课题中MATLAB自带的eigs()函数来求值)对于所求出的特征向量按对应特征值数值大小降序排列按行排列成一个矩阵P,如果要降维至A维,那么只需要前A行数据即可(eigs()返回特征值构成的向量本身就是从大到小排序的)Y=(X-m)×P即为降维到A维后的数据。运用快速PCA降维函数。[pcaDataCOEFF]=fastPCA(X,k)。在降维过程中最主要的计算是协方差矩阵的特征值和特征向量,在函数中X代表初始数据集的矩阵,A指要要降维至多少维,pcaData是降至A维后的A维样本特征向量组成的矩阵,每行一个样本,列数A为降维后的样本特征维数,主成分分量即COEFF,也即样本协方差矩阵的特征向量。3.2.2代码中PCA具体实现本次课题由于读取音频数据的特征值总数共80000个,特征值总数太多且不利于进行具体分析和最后训练模型,所以计划采用PCA将其降维至60个特征值,由于前期对PCA降维部分详细原理了解不是很清楚,个人本着想深入学习的思想,参考了不少开源资源采用了前面的第二种PCA降维方法,即手动进行降维步骤。步骤为下:第一:确定所需降至的维数。第二:求初始数据的样本均值。第三:计算初始数据矩阵的协方差矩阵。第四:对求出的协方差矩阵求特征值和特征向量,这里采用MATLAB自带的eigs()函数进行处理。第五:对求得的特征向量进行归一化处理第六:线性变换投影至K维。此部分具体代码部分如下图所示:图3-2PCA降维程序图4支持向量机(SVM)在肺音分类中的应用4.1支持向量机(SVM)基础理论支持向量机(SVM)是最近几年来运用广泛且受到大量关注的一类算法,支持向量机此算法以统计学方面理论为基础,它最早是由Vapnik等研究者学者于上世纪末期提出的,此算法在解决小样本数据集、数据集属性为线性不可分等问题中表现效果较之于其他算法更为突出,此外SVM可以于其他很多问题相结合,比如函数拟合等其他机器学习问题。支持向量机可以进行分类和回归问题的讨论、分析数据等。支持向量机算法在解决小样本模式识别中具有较强优势,在样本数量需求上SVM并不需要特别多的样本,它会根据训练模型的复杂程度和学习能力间找到一个最优中间点,并且可以找出最优的支持向量,但训练时间较长,需要自己不断进行实验和调试以寻找到最优的核函数以及相关参数。但这也并不是说样本数越少就越好,因为从实际角度来说,大部分机器学习分类算法中更多的样本总是能带来更好的分类效果和准确性。此外,对于样本数据集在线性可分和线性不可分情况下应用SVM算法都可应对,其主要通过引用核函数来实现。支持向量机的具体过程是将向量映射到一个高维空间中(与PCA降维相反),在这个高维空间中寻找一个超平面,这个超平面是最大间隔的,建立方向合适的分隔超平面将使两个与之平行的超平面间的距离最大化,通过这种定义方式可以认为如果平行超平面间的距离越大,那么总误差就越小。最开始的支持向量机技术主要是设计用作简单二分类,在二维平面中找到最大间隔的超平面简单划分+1和-1俩类数据,我们使用一组样本{(xi,y举个例子,就像下面这个图像,在1962年提出的线性支持向量机中有两个概念:“硬间隔”和“软间隔”。硬间隔简单理解就是指一刀切分两半。软间隔就是用线将数据围出来。假设我们的训练数据集的属性良好并且线性可分,那么我们就可以寻求到一个最优的超平面将训练数据集严格地划分开来,将其分为两类(可以想象成一个平板从中间进行切分)。我们找两个这样的超平面,它们如果满足两个条件--两者平行和两者之间距离最大(即下图中的两条虚线)。两个超平面上的样本x称为“支持向量”。“最大间隔超平面”(也就是分类器)是两超平面的平均值。我们定义这两个超平面间的区域为“间隔”。在这种情况下它就是“硬间隔”(可理解为一根坚硬不可弯折的曲线)。其中最大间隔超平面可以表示为:W∗X+b=0。两个超平面可以分别表示为:W∗X+b=1,W∗X+b=−1。基础分类图如下图所示:图4-1SVM二分类图支持向量机可根据数据集的属性分成三种,分别是数据集线性可分,数据集线性不可分和数据集非线性,这三种模型解决的问题由易到难。,应用场合也各自不同,如下图可直观看出三种模型的区别所在:

图4-2三种SVM模型图使用支持向量机算法主要优点如下:首先这种算法是针对于小样本数据集,属于分类算法的一种,也就是样本数目不大的数据集,其目标是基于已获得数据的基础上寻求最优解决方案,并非样本数量趋于无穷时的最优解决方案。其次算法可选择软硬间隔进行分类,借用拉格朗日乘数法来解决局部极值问题,最终为求解一个二次凸规划问题。最终算法可以将所需要解决的难题通过变换关系投影至到一个另一个空间中,在这个空间中用原先空间中不足以表示的方法来解决原空间中的问题。SVM算法的特殊处理方式使得在泛化能力上表现良好,对于特征值维数过大也能很好的解决,特别值得注意的是支持向量机算法复杂性与数据维数无关.4.2SVM在程序中具体应用首先对PCA降维后的特征值数据集进行随机排列以保证训练和测试的随机性,然后划分训练集和测试集,本次课题所研究的数据集总数为72个,故选择前60个为训练集,后12个为测试集。由于划分后的数据集其特征值相差较大且含有正负数值,于是再对其进行归一化处理操作,将所有特征值转换至(0,1)区间内,方便后面进行的SVM模型建立。代码具体操作如下图所示:图4-2数据处理图对于具体的SVM算法本次课题我选择了libsvm软件包,它是由林智仁教授工作室开发的一款功能很强大,简单且实用性高的SVM软件包。此工具包MATLAB没有自带,所以需要自己去搜索下载并进行相关环境的配置。首先在开源网站上下载此功能包然后在MATLAB中进行相关路径的设置,于环境进行配置成功后选择自带的编译器进行编译,相关操作成功后在MATLAB的左方截面会显示出如下的几个mexw64文件:图4-3配置完成文件图在MATLAB如上方显示成功后就可以使用工具包中相关函数功能了。Libsvm工具包详细说明如下图所示:图4-3libsvm工具箱函数使用说明图图4-4libsvm工具箱参数说明图安装完工具包后对前面数据进行处理好的数据集进行模型的建立,然后用建立好的算法模型对测试集进行结果预测,并将预测所得结果通过图表形式表现出来,本次课题做了测试集的实际分类和预测分类图以及SVM测试集的预测误差两个图形,能直观看出预测结果以及误差率。在支持向量机算法中有两个很重要的参数C与g。数据的容忍度随着C值越高而降低,也就是越不容易进行容错,在这种情况下过拟合问题会经常出现。反之如果C值越小,代表容忍度越高,对误差的容错率越高,在这种情况下欠拟合问题会经常出现。g参数是在选择RBF核函数(Radialbasisfunction径向基函数)作为核函数后,由该函数自带的一个参数。该参数隐含地决定了数据映射到新的特征空间后的分布,g值如果越大代表着模型中的支持向量数目就越少,反之g值越小代表着模型中的支持向量数目就越多。其中寻找最佳c,g的思想仍然是让c和g在一定范围内(比如c=2^(-5),c=2^(-4),…,2^5,g=2^(-5),2^(-4),…,2^(5)),然后用交叉验证的方法寻找到准确率最高的c和g参数,在本课题中SVM模型建立过程中的惩罚参数cost以及核参数g为调试所得。下图为SVM算法实现代码:图4-4SVM算法实现以及结果绘图代码在这里有一个需要的注意的地方,因为在上式代码中,通过libsvmtrain函数所给出的accuracy实际上输出包含三个元素,第一个元素是分类的准确率百分比数值,第二个元素是支持向量机做回归预测的均方误差,第三个元素是支持向量机做回归预测的相关系数,本次研究中我们只需要第一个准确率的数值进行结果分析即可,所以在后续绘图代码中所书写的应该是accuracy(1)。其次对于c和g参数的选取也有注意的地方,举个例子比如在训练函数中规定了-g核参数为0.1,在之后的运用中就不需要对其进行定义了,因为这样做会出现报错,系统会告诉你找不到-g参数的存在,这是因为是在SVM训练模型也就是运用svmtrain函数之后会MATLAB系统会给出一个模型model,如果在svmpredict中声明并使用了这个model,所以这个model中其实就已经包含了所有的训练参数了,正因如此svmpredict中没有这个参数。下图为一次代码运行之后分类准确率为83.3%的测试集的实际分类和预测分类图以及SVM测试集的预测误差图(1为分类正确,0为分类错误):图4-5测试集的实际分类图图4-6SVM测试集的预测误差图5肺音分类结果分析5.1SVM程序结果分析前面已经进行了数据预处理、SVM模型的建立以及测试结果的步骤,但训练与测试的数据集有限,经过多次程序修改与测试后发现测试所得数据准确率在83.3%,58.3%,66.6%三种不同的准确率之间徘徊,同时在修改代码测试过程中也发现了一种固定划分训练集和测试集的方法可以使准确率稳定在75%,划分代码具体如下图所示:图5-1划分测试集和训练集图5-2预测分类图图5-3样本预测误差5.2结果进行详细显示对于图表性结果显示虽然观察上更直观,但不易分辨出具体是哪一个分类有错误,为了能进一步详细识别分类结果,对于详细分类结果以下列代码方式进行显示:图5-4显示代码图5-5详细显示形式

结束语21世纪计算机技术正发展的如日中天,几乎在哪里都能看到它的身影,它在当今社会中已经深深融入到了人们的日常生活之中,小到人手一部的手机,大到卫星上天甚至火箭发射。如今在新冠肺炎肆意全球的大背景下,全球人民携手共战疫情,医院诊所位置供不应求,但人力物力毕竟有限,所以计算机辅助诊断技术的研究是有着很大潜力以及意义的,而肺音分类技术和机器学习技术的迅猛发展给基于机器学习的人工智能辅助诊断研究开拓了广阔的市场。可以想象在不久后的将来,便捷易操作的诊断系统会逐渐普及大众走入寻常百姓家,成为判断人民身体健康中不可缺少的一部分,对人们的生活习惯和观念产生重大的影响。其次,肺音分类技术的运用和发展将大大的促进医学领域的进步和发展,同时此项技术对于其他领域也有可印证提高之处,人工智能辅助诊断技术对于减少社会负担和提高工作效率有着很大的作用,提高了普通老百姓的生活安全保障,也促进了生产力发展,对当今社会的普遍改善都有一定的意义。但还应大力发展全球数据库,做到全球资源实时共享。总之,机器学习的发展和推广,是对人们生活和经济的发展有着重大意义的,它不仅对于科学技术邻域有着巨大的推动作用,它的发展也必然给我们社会日常生活的各个方面带来重大改变。学习过程往往是乏味无聊的,开始一个未知领域的学习都会充满迷茫和害怕,但只有坚持到最后才会发觉之前所作并非无用之事。我自己选择这个课题方向的时候其实也很迷茫,但我想挑战一下我自己迷茫且未知的领域,毕竟人的成长也总是在和未知作斗争,通过自己查阅资料和不断的询问相关方面的高手,我也逐渐对自己做的课题有了一个大致的了解与心得体会,并且我对该专业方向产生了很大的兴趣,我坚信本次认真完成毕业论文将会使我终身受益,不仅让我在知识层面上有所提升,同样也让我学到了很多有用的技巧,我相信这次完成毕业论文的经历一定对于我今后的学习生活有着很大的影响作用,多年以后回想起来也必定会为之感到欣慰。参考文献苌飞霸、尹军、何庆华、毕玉田.病理性肺音信号的分析识别方法[J].中国医学物理学杂志.

2016,33(07):739-742+746.高鸣蕾.基于EMD的肺音信号去噪及特征提取方法研究[D].江苏:江苏大学,2019.王文渊;

闫平凡.肺音研究综述[J]北京生物医学工程.

1992,(02)郑明杰.基于机器学习的肺音分类技术的研究进展.[J]计算机科学.

2015,42(12)姚小静、王洪、李燕、崔建国.肺音信号分析及其识别方法的研究进展.[J]重庆理工大学学报(自然科学).

2013,27(12)周冬生.肺音信号的特征提取于模式识别.[D].山东:山东大学.邓博雅.基于夜间音频信号的睡眠分期算法[D].南京理工大学,2018.陈少琼.心肺音频信号的分类和应用[D].华南理工大学,2016.陈佩.主成分分析法研究及其在特征提取中的应用[D].陕西师范大学,2014.朱志婷.基于SVM的音频分类理论研究及应用[D].华南理工大学,2012.张松兰.支持向量机的算法及应用综述[J].江苏理工学院学报,2016,22(02):14-17+21.陈佩.主成分分析法研究及其在特征提取中的应用[D].陕西师范大学,2014.张玉新,赵洋,陶佳.基于音频特性的西瓜成熟度无损检测技术研究[J].河北农业大学学报,2011,34(02):114-118.郑怡文.典型的音频分类算法[J].计算机与现代化,2007(08):59-63./ljl86400/article/details/86686991DemirFatih,SengurAbdulkadir,BajajVarun.Convolutionalneuralnetworksbasedefficientapproachforclassificationoflungdiseases.[J].Healthinformationscienceandsystems,2020,8(1).LungSoundClassificationUsingSnapshotEnsembleofConvolutionalNeuralNetworks.[J].AnnualInternationalConferenceoftheIEEEEngineeringinMedicineandBiologySociety.IEEEEngineeringinMedicineandBiologySociety.AnnualInternationalConference,2020,2020.S.Don.RandomSubsetFeatureSelectionandClassificationofLungSound[J].ProcediaComputerScience,2020,167.NishiShahnajHaider,BikeshKumarSingh,R.Periyasamy,AjoyK.Behera.RespiratorySoundBasedClassificationofChronicObstructivePulmonaryDisease:aRiskStratificationApproachinMachineLearningParadigm[J].JournalofMedicalSystems,2019,43(8).HaiderNishiShahnaj,SinghBikeshKumar,PeriyasamyR,BeheraAjoyK.RespiratorySoundBasedClassificationofChronicObstructivePulmonaryDisease:aRiskStratificationApproachinMachineLearningParadigm.[J].Journalofmedicalsystems,2019,43(8).QingZhangChen,YuZhengChen,CongLingFan,FanYang,PengWang,YanJingLei.ResearchonNodeLocalizationAlgorithminWSNBasingMachineLearning[J].AdvancedMaterialsResearch,2013,2534.ShaharumSM,SundarajK,PalaniappanR.Trachealsoundreliabilityforwheezedatacollectionmethod:Areview[C]//2012IEEEInternationalConferenceonControlSystem,ComputingandEngineering(ICCSCE).IEEE,2012:264-267KaislaT,RajalaH,KatilaT.Cracklesinpatientswithfibrosing.alveolitis,bronchiectasis,COPD,andheartfailure[J].CHESTJournal,1991.99(5);1076-1083

附录%初始化程序

closeall;

clear;

clc;

formatcompact;%压缩空格path=cd;%获取当前的工作路径

%健康的音频信息

au=audioread(strcat(cd,'\4000HZ\Healthy\1(1).wav'));%读取音频尺寸

[auRow,auCol]=size(au);

HealthyData=zeros(35,auRow*auCol);%初始化

LabelData=zeros(35,1);%标签矩阵

fori=1:35

LabelData(i,1)=1;%标签

helth=audioread(strcat(cd,'\4000HZ\Healthy\1(',num2str(i),').wav'));%读取音频

helth=helth(:)';%向量化

HealthyData(i,1:length(helth))=helth;%存储声音特征信息

end

%患病的音频信息

au=audioread(strcat(cd,'\4000HZ\Pneumonia\1(1).wav'));%读取音频尺寸

[auRow,auCol]=size(au);

PneumoniaData=zeros(37,auRow*auCol);%初始化

PneumoniaLabelData=zeros(35,1);%标签矩阵

fori=1:37

PneumoniaLabelData(i,1)=2;%标签

ill=audioread(strcat(cd,'\4000HZ\Pneumonia\1(',num2str(i),').wav'));%读取音频

ill=ill(:)';%向量化

PneumoniaData(i,1:length(ill))=ill;%存储声音特征信息

end%特征信息

input=[HealthyData;PneumoniaData];

%标签信息

output=[LabelData;PneumoniaLabelData];dimension=60;%降维的维度

[r,~]=size(input);%特征的维度

%样本均值

meanVec=mean(input);

%计算协方差矩阵的转置covMatT

Z=(input-repmat(meanVec,r,1));

covMatT=Z*Z';

%计算covMatT的前dimension个本征值和本征向量

[V,~]=eigs(covMatT,dimension);

%得到协方差矩阵(covMatT)'的本征向量

V=Z'*V;

%本征向量归一化为单位本征向量

fori=1:dimension

V(:,i)=V(:,i)/norm(V(:,i));

end

%线性变换(投影)降维至k维

pca_input=Z*V;

input=pca_input;%降维后的特征输入

N=length(output);%全部样本数目

testNum=12;%设定测试样本数目

trainNum=N-testNum;%计算训练样本数目%随机抽取

id=randperm(N);

input=input(id,:);

output=output(id,:);

%训练集、测试集

input_train=input(1:trainNum,:);

output_train=output(1:trainNum);

input_test=input(trainNum+1:trainNum+testNum,:);

output_test=output(trainNum+1:trainNum+testNum);[mtrain,ntrain]=size(input_train);

[mtest,ntest]=size(input_test);

dataset=[input_train;input_test];

%mapminmax为MATLAB自带的归一化函数

[dataset_scale,ps]=mapminmax(dataset',0,1);%归一化到01之间

dataset_scale=dataset_scale';

input_train=dataset_scale(1:mtrain,:);

input_test=dataset_scale((mtrain+1):(mtrain+mtest),:);model=libsvmtrain(output_train,input_train,'-c800-g0.1');[predict_label,accuracy]=libsvmpredict(output_test,input_test,model);

%按类型升序

[output_test,index]=sort(output_test);

predict_label=predict_label(index);

error=predict_label-output_test;%预测值和真实值的误差Accuracy=66.6667%(8/12)(classification)figure

plot(output_test,'bo-','linewidth',1.2)

holdon

plot(predict_label,'r*-','linewidth',1.2)

legend('期望类型','预测类型')

xlabel('测试样本编号'),ylabel('标签类型')

title({'测试集的实际分类和预测分类图';['Accuracy=',num2str(accuracy(1)),'%']},'FontSize',12);

set(gca,'fontsize',12)

figure

plot(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论