首页 >>  正文

matlab排序函数从小到大

来源:baiyundou.net   日期:2024-09-21

高光谱成像技术鉴别大花红景天和四裂红景天

1.引言

红景天为景天科红景天属多年生草本植物,中国为红景天属植物的分布中心,有73种2亚种7变种。红景天药用历史悠久,能抗疲劳、抗病毒、抗抑郁、增强免疫力、抗辐射、抗炎、抗缺氧和抗衰老等。由于红景天需求量的急剧增加,导致市场上出现大量的伪品及近缘品种混用的现象,严重影响了红景天使用的安全性和有效性。目前,红景天的品种鉴别和质量控制已有性状鉴别、显微鉴别、紫外可见分光光度法、薄层色谱法、高效液相色谱法、核磁共振光谱法、近红外光谱法、DNA鉴别法等。但这些方法常存在主观性过强、耗时过长、损坏样品、操作复杂和化学试剂污染等缺点。高光谱成像是一门将光谱技术和图像技术相结合的新型“图谱二合一”的快速、无损的检测技术,近几年已被广泛应用于农副产品和中药的质量控制。现利用高光谱成像技术采集红景天高光谱图像,采用支持向量机算法建立基于近红外高光谱鉴别大花红景天和四裂红景天的判别模型,实现对红景天的快速、准确和无损鉴别,为红景天的品质评价和质量控制提供新思路和新方法。

2.仪器与试药

iSpecHyper系列高光谱成像系统、红景天采集于四川省阿坝藏族羌族自治州、甘孜藏族自治州和西藏,经鉴定为景天科红景天属植物大花红景和四裂红景天。

3.方法与结果

3.1 样品的制备

取大花红景天和四裂红景天药材的根及根茎,干燥、粉碎、过80目筛,粉末干燥至恒重,每种药材粉末各取10批,分装于干净、干燥的1.5mLEP管中,密封备用。

3.2 高光谱图像的采集和黑白校正

用药匙分别取适量大花红景天和四裂红景天的干燥药材粉末,置高光谱成像系统的移动平台上,采用推扫式的数据采集。调整相机的视场角、曝光时间间隔、成像速度、样品和镜头的间距等参数的匹配,以保证数据图像的质量。整个系统置于暗箱中,可有效避免图像采集中环境杂散光的干扰,并对高光谱图像进行黑白校正。

3.3 高光谱平均反射率光谱和光谱数据的获取

堆放在移动平台上的红景天粉末大小、形状不规则,边缘不整齐,会影响到后续的光谱预处理、数据降维和建模的精确性。通过ENVI5.3软件手动标定感兴趣区域(ROI),去除零散边缘和背景,取每批粉末中心部位的4个大小相近的矩形作为ROI,提取ROI内所有像素的平均反射率光谱值作为大花红景天和四裂红景天样本的平均光谱数据,共得到80个平均光谱数据。为提高信噪比,去除光谱数据起始和结尾噪声较大的部分,选取有效波长为952.9~1702.2nm的214个波段,建立了大花红景天和四裂红景天的最终平均反射率光谱。由图1A可知:大花红景天和四裂红景天的高光谱曲线走势大致相同,呈现相似的光谱特征。但在相同波长处,大花红景天的光谱反射率要高于四裂红景天,在955~1400nm时,大花红景天的反射率明显高于四裂红景天,而在1400~1700nm时,两者的差距逐渐缩小并趋于一致。光谱曲线在1200、1465nm处有两个明显的吸收峰,1200nm处的吸收峰主要由红景天药材中相关物质C-H(甲基、亚甲基)伸缩的第二泛音产生,1450nm处的强吸收峰主要与O-H键伸缩的第一泛音有关。仅从平均反射率光谱上看,特征峰的个数极少,很难通过寻找特征峰进行鉴别。因此,需要运用化学计量学方法,处理原始反射率光谱,并对高光谱的多维数据进行降维处理,提取或选择特征部分进行建模判别分析。

(A)

(B)

图 1 平均反射率光谱(A)和 SNV 预处理后的平均反射率光谱(B)

3.4 光谱的预处理

虽然红景天样品经过粉碎、过80目筛,但并不能保证所有样品粉末的粒径大小和均匀度完全一致。颗粒不均、样品表面粗糙易造成光散射效应,影响后续分析。光谱预处理通常可用来增强化学差异和去除光谱伪影,减小如散射、探测器噪声、光学效应和样品粗糙表面等的影响。选用标准正态变换(SNV)进行光谱预处理。图1B为大花红景天和四裂红景天经过SNV预处理之后的平均反射率光谱。与原始反射率图谱比较,预处理后的高光谱图峰形更尖锐,图形特征也更明显。

3.5 光谱数据的划分

样本光谱数据的有效划分可提高判别模型的精度和鲁棒性。Kennard-Stone(K-S)是一种有效的、广泛应用的选取训练集和测试集的方法,采用K-S算法,将80个预处理后的光谱数据按照3:1的比例划分为60个训练集和20个测试集。

3.6 特征的选择

高光谱数据维度和波段间的相关性较高,具有较高的冗余性。这些冗杂信息可能会影响到建模的精度和稳定性,另外,全波段数据信息处理时间相对缓慢。选用常用的竞争性自适应重加权算法(CARS)和连续投影算法(SPA)两种特征波长选择方法对数据图像进行降维处理。基于MATLABR2017b软件运行代码实现相关函数,完成对全光谱样本数据的CARS特征选择。CARS算法提取特征变量的过程见图2A,图2A1~A3依次表示随蒙特卡洛采样次数的增加,变量数、交叉验证预测均方根误差(RM-SECV)和每个变量回归系数的变化。由图2A1可知:由于指数递减函数的作用,在采样初期,变量数目随采样次数的增加急剧减少;采样后期,变量数目变化不再明显。表明在CARS算法的执行中,包含“粗选”和“细选”两个进程。基于第26次采样中获得的变量子集所建立的PLS回归模型的RMSECV值达到最小,因此,选定该子集作为特征变量子集,共包含20个变量。图2B为CARS算法最终选择的特征变量编号,依次为65、88、99、102、110、111、117、132、135、136、166、180、182、190、195、196、199、205、213、214,对应的波长依次为1175.4、1255.9、1294.5、1305.1、1333.2、1336.7、1357.9、1410.8、1421.4、1424.9、1531.2、1581、1588.1、1616.6、1634.4、1638、1648.7、1670.1、1698.8、1702.3nm。

(A)

(B)

图 2 CARS 特征波长的筛选过程图(A)和 CARS 选择的特征波长(B)

SPA具有快速降维的特点,是一种使矢量空间共线性最小化的前向变量选择算法,根据PRESS准则对候选子集进行评估,采用MLR的分析程序计算候选子集的关联指数,并按照相关性递减的顺序对所选变量进行排序。图3A为SPA选择过程中,均方根误差(RMSE)随选择的变量数目变化的趋势折线图。RMSE是衡量预测值和真实值之间偏差程度的一个标准,RMSE值越小,表明偏差越小,此时预测值和真实值最接近,模型的精度,选择的变量数目最适合建立鉴别模型。当变量数为0~27时,RMSE值整体呈现急剧下降的趋势,在变量数为27时,RMSE值达到局部,为0.1。当变量数为27~30时,虽然RMSE值也有下降,但变化不大,考虑到所选择的变量数目越多,所建模型的运行时间将会相对延长。最终系统选定特征变量数为27。图3B为SPA算法在214个波段中按照相关性逐渐递减的原则筛选的27个特征波段,编号为143、205、180、145、147、212、67、149、87、80、79、136、108、57、214、129、68、134、64、152、66、76、69、77、142、139、141,对应的波长依次为1449.7、1670.1、1581、1456.8、1463.8、1695.2、1182.4、1470.9、1252.4、1227.9、1224.4、1424.9、1326.2、1147.4、1702.3、1400.2、1185.9、1417.9、1171.9、1481.6、1178.9、1213.9、1189.4、1217.4、1446.1、1435.5、1442.6nm。从经过SNV预处理之后的训练集和测试集中,将SPA选择的特征波段数据挑选出来用以进行后续分析。

(A)

(B)

图 3 SPA 选择过程中 RMSE 的变化趋势折线图(A)和 SPA 选择的特征波长(B)

3.7 判别模型的建立与模型评价

SVM包含支持向量机的分类算法(SVC)和支持向量机的回归算法(SVR),本试验选用SVC为建模方法。在SVC建模过程中,核函数及其参数的选取对预测模型的精度有直接影响。核函数在建立分类边界方面是SVM的一个优势,能在有效提升分类模型鉴别性能的同时,降低模型的复杂程度。目前常用的核函数有3类,分别是多项式、S形核函数和径向基核函数(RBF)。多项式核函数属于全局核函数,参数多,当多项式的阶数d比较高的时候,学习复杂性也随之升高,易出现“过拟合”现象,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。当采用S形核函数时,SVM模型将会变成一种多层感知器神经网络。与前两者比较,RBF是一种局部性较强的核函数,参数较少,同时对数据中存在的噪声有着较好的抗干扰能力,无论样本的大小都能有很好的性能。因此,选用RBF作为核函数,以全波段(FS)数据为例,采用布谷鸟搜索(CS)、萤火虫算法(FA)、粒子群算法(PSO)3种参数寻优方法,选择惩罚参数C和核函数参数g后,进行SVM网格训练和预测,以测试集的分类准确率和运行时间为衡量指标,选择的参数优化方法和最适参数。3种参数寻优方法所建立的FS-SVC模型测试集的分类准确率都达到了100%,但在选择的参数值和运行时间上有差别。

表1 参数寻优的结果

由表1可知:惩罚参数C控制对错分样本的惩罚程度,在样本偏差和机器泛化性能之间进行权衡;C值过大或过小容易造成过拟合或欠拟合;g值隐含地决定了数据映射到新的特征空间后的分布,g值大小与影响训练和预测速度的支持向量个数呈正相关。综合比较来看,FA算法选择的C值适中,且运行时间较其他两种**缩短。因此,选择FA算法为参数优化方法。对80个平均光谱数据进行SNV预处理后,采用K-S算法划分为60个训练集和20个测试集样本。将RBF核函数作为SVC算法的核函数,综合评价CS、FA、PSO3种参数优化方法后,选用FA算法选择惩罚参数C和核函数参数g。

FA算法是一种基于智能群的优化算法,主要利用萤火虫发光的特点进行随机优化。利用萤火虫个体模拟问题的可行解,目标函数值表示萤火虫的亮度。较亮的萤火虫会吸引其他个体向此方向进行位置移动,他们之间的吸引力与距离成反比。如果某个萤火虫周围没有更亮的个体,它选择不移动或者随机变换位置。FA算法的运行参数设置为萤火虫数量20,迭代次数50,步长因子0.5,吸引度0.2,光强吸收系数1。输出的参数值为C=39.2,g=0.01,利用此数值建立SVC分类判别模型。RMSE和平方相关系数是用来衡量模型的预测值和实测值之间偏差大小的标准。优异的分类判别模型应同时具备高的分类准确率和平方相关系数以及低的均方根误差。由表2可知:经过FA算法优化的模型在准确率和运行时间上都较未经参数优化的模型**提高,3种分类鉴别模型都达到了很好的分类鉴别效果,除SPA-FA-SVC模型外的其他两种判别模型的分类准确率均达到了100%,且CARS-FA-SVC模型的运行时间**短。考虑到在实际应用中要对大规模红景天样本进行分类鉴别,为节约时间成本,判别模型在具备优异的判别性能的同时也应尽量缩短运行时间。因此,**终选定CARS-FA-SVC为判别模型。

表2 支持向量机判别模型的性能

5.讨论

文中竞争性自适应重加权算法 (CARS) 和连续投影算法 (SPA) 能有效降低高光谱多维几杂信息的影响,缩短模型的运行时间,是一种有效的特征变量选择方法。经过FA算法优化的支持向量机 (SVM) 判别模型整体性能均高于未经参数优化的同类模型,其中以CARS-FA-SVC判别模型的表现,测试集分类的准确率达到了100%,均方根误差为0,且平方相关系数达到了1,运行时间也为6个判别模型中最短的。FA算法能显著提高判别模型的预测精度,并缩短运行时间,为一个较好的参数寻优方式。

推荐:

便携式高光谱成像系统 iSpecHyper-VS1000

专门用于公安刑侦、物证鉴定、医学医疗、精细农业、矿物地质勘探等领域的产品,主要优势具有体积小、帧率高、高光谱分辨率高、高像质等性价比特点采用了透射光栅内推扫原理高光谱成像,系统集成高性能数据采集与分析处理系统,高速USB3.0接口传输,全靶面高成像质量光学设计,物镜接口为标准C-Mount,可根据用户需求更换物镜。

","gnid":"9066610c8687e08cd","img_data":[{"flag":2,"img":[{"desc":"","height":"468","title":"","url":"https://p0.ssl.img.360kuai.com/t01ec519250bc4ff56c.jpg","width":"600"},{"desc":"","height":"340","title":"","url":"https://p0.ssl.img.360kuai.com/t012ed988075d90833c.png","width":"554"},{"desc":"","height":"351","title":"","url":"https://p0.ssl.img.360kuai.com/t013956c654ce5bfe94.png","width":"554"},{"desc":"","height":"223","title":"","url":"https://p0.ssl.img.360kuai.com/t01811f04017722910f.png","width":"554"},{"desc":"","height":"374","title":"","url":"https://p0.ssl.img.360kuai.com/t017278ec1ed2746cc5.png","width":"553"},{"desc":"","height":"335","title":"","url":"https://p0.ssl.img.360kuai.com/t01aae1480204bad9bb.png","width":"553"},{"desc":"","height":"363","title":"","url":"https://p0.ssl.img.360kuai.com/t014a44c85a42f8bcc7.png","width":"554"},{"desc":"","height":"172","title":"","url":"https://p0.ssl.img.360kuai.com/t013d596b0dab7cc23b.png","width":"554"},{"desc":"","height":"129","title":"","url":"https://p0.ssl.img.360kuai.com/t01126348729c1fb7ae.png","width":"553"},{"desc":"","height":"300","title":"","url":"https://p0.ssl.img.360kuai.com/t014aea231df60dfd62.png","width":"705"}]}],"original":0,"pat":"art_src_0,fts0,sts0","powerby":"pika","pub_time":1704250897000,"pure":"","rawurl":"http://zm.news.so.com/6d54aaf7d46239dcbb98cb41fcb2c8b0","redirect":0,"rptid":"787745144c24c370","rss_ext":[],"s":"t","src":"莱森光学LiSenOptics","tag":[],"title":"莱森光学:高光谱成像技术鉴别大花红景天和四裂红景天

臧邢空3243MATLAB用户输入一个向量,编写函数将这个向量中的元素从小到大进行排列,并输出排列好的向量 -
张琴丁17769049034 ______ >> a = input( 'input a vector:' ) input a vector:[ 3, 1, 6, 4, 9 ] a = 3 1 6 4 9 >> sort( a ) ans = 1 3 4 6 9

臧邢空3243求MATLAB中 数组元素排序 - - 函数:sort() -
张琴丁17769049034 ______ 简单地说,Y=sort(X),就是把X数组的数按从小到大排序,并存入Y中,然后X里面的值保值不变.直接在matlab输入命令,help sort 这样更加准确

臧邢空3243Matlab中排序的函数 -
张琴丁17769049034 ______ 排序函数为sort >> Vcap= randi(100,1,5) [sA,index] = sort(Vcap) Vcap = 92 80 96 66 4 sA = 4 66 80 92 96 index = 5 4 2 1 3

臧邢空3243请教高手:matlab中sort(数组 ,维数 , 模式)这个排序函数的实际功能是什么?能举个例子吗? -
张琴丁17769049034 ______ 数组是你要排序的数组.第二个参数指:行排序,还是列排序,默认是行排序(1).模式有:升序,降序.默认是升序.例子:sort(a,2,'descend') 对数组a,按列降序 排序.(1:行排序,2:列排序,3....)

臧邢空3243如何用matlab排序?
张琴丁17769049034 ______ 直接用是sort函数就可以了.默认为升序排列,可以设置系数进行降序排列,在网上找一个这个函数用法.

臧邢空3243matlab 如何将一5*3的矩阵A中每行元素从小到大排序,并将排序后的矩阵定义为B.
张琴丁17769049034 ______ x=rand(5,3)sort(x,2)

臧邢空3243在matlab,对一个数列排序后,怎样得到原数列的各个元素在排序后的数列的位置? -
张琴丁17769049034 ______ 假如你要排序的数组是 A,那么: 1 [B,I] = sort(A) 返回的 B 是排序后的数组,I 是对应元素原来在 A 中的位置. 比如: 1 2 3 4 5 6 7 A = [79, 39, 25, 41, 10]; [B, I] = sort(A) % >>> % B = % 10 25 39 41 79 % I = % 5 3 2 4 1 观察 I,第一个元素是 5.这就表示,原来的第 5 个元素,排序后在第 1 的位置. 这个元素的值是 10,即是 B(1).如果你只关心 I 对排序后的数组不感兴趣,也可写成: 1 [~,I] = sort(A) 这样就只返回 I,不返回 B 了.

臧邢空3243matlab 把矩阵 的每一行按由小到大重新排列 -
张琴丁17769049034 ______ 直接b=sort(a,2);%对每一行从小到大排列

臧邢空3243matlab 冒泡法排序 我刚刚接触 老师要求用M函数 思路很模糊 建立任意数组 然后将其从小到大排序 不知? -
张琴丁17769049034 ______ function M=paixu(N) [Line,Row]=size(N); h=Line*Row-1; for j=h:-1:1 for i=1:j if N(i)>N(i+1) Temp=N(i+1); N(i+1)=N(i); N(i)=Temp; end end end M=N; %命令行输入paixu(排序的数组),返回的就是按列排序好的

臧邢空3243matlab中是否有函数能对一组数组进行排序 -
张琴丁17769049034 ______ 比如我的矩阵是a=【2 7 4 9】,现在我要对它排序而且序号也要跟着变.也就是从小到大排序后的矩阵是【2 4 7 9】,同时我要得到序号【1 2 3 4】变为【1 3 2 4】!

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024