粒子群-支持向量机算法杂七杂八
在阅读论文的时候看到一篇基于粒子群-支持向量机算法对稻壳中的元素定量分析的论文,考虑到支持向量机应用范围也比较广,在传感器数据分析中经常会出现数据分类以及回归预测分析的情况,支持向量机也是一个不错的选择。其实SVM是机器学习中经常提及的算法,MATLAB中其实也有比较成熟可以应用的工具包(python中也包含相应的工具包),这个算法其实也比较古老。
对于SVM建模时参数c与g的选择决定SVM回归的准确度与预测的精度,c是影响回归模型对回归误差大于样本的重视水平,g的大小关系着回归模型的精度。因此,为了提高SVM的学习和泛化能力,需要对c和g两个参数进行优化。那么粒子群算法也就是在参数优化中起到作用。
将粒子群算法用于改进SVM算法,这个时候如果要实现就不能使用MATLAB中自带的工具包了。MATLAB中的函数包的计算以及可视化展现效果还是很不错的(主要用到的是svmtrain函数与svmclassify函数,查看函数源文件)。下图就是用MATLAB自带函数实现的简单1和2的分类,但是该函数包可视化展现只能对二特征分类有效。不过libsvm包的功能更加强大,可视化展现的内嵌函数也可以做到更好。
在查看源代码的同时,自己也在写实现该算法的demo,其实优化SVM算法的参数的方法也有其他的一些方法。其实粒子群算法的核心概念不难理解,粒子群算法就是把鸟看成一个个粒子,并且他们拥有位置和速度这两个属性,然后根据自身已经找到的离食物最近的解和参考整个共享于整个集群中找到的最近的解去改变自己的飞行方向,最后我们会发现,整个集群大致向同一个地方聚集。而这个地方是离食物最近的区域,条件好的话就会找到食物,这就是粒子群算法,很好理解。
PSO算法的实现也不难,入门应用就是寻找函数最小值和最大值。总结起来算法的基本过程为1)初始粒子;2)计算适应度值;3)定义初始个体极值与群体极值;4)更新粒子位置与速度;5)更新个体极值和群体极值。在实际问题的解决中,构建目标函数是最重要的,也是最难的。而粒子群算法中最经典的部分在于步骤4)(更新粒子位置与速度),先拿一个二元函数练练手,以下是步骤4)部分代码。
下图即为迭代次数的表示以及寻找该二元函数的最小值的可视化图形。从图中可以看出,迭代次数基本上在13,14的时候就达到最优,即目标函数取得最小值为8。粒子群算法(PSO)在应用的过程中主要调整权重,学习因子,才能对解决的问题有所针对性。今天才发现其实MATLAB中也有粒子群相关的工具包。
在学习PSO算法的时候也看到了论文使用鸡群算法(CSO)优化参数用于预测二氧化碳排放值,它模拟群的等级制度和鸡群的群体活动行为。 在特殊的等级制度下鸡群中不同鸡种搜寻食物时存在着竞争。公鸡搜索食物能力强,适应值小;母鸡其次;小鸡搜索食物能力最弱,适应值最大。但是对于CSO的具体实现还没有开始搞,计划下周实现一下对于同样的数据PSO算法以及CSO算法的对比。