前言
自从上两篇博客详细讲解了Python遗传和进化算法工具箱及其在带约束的单目标函数值优化中的应用以及利用遗传算法求解有向图的最短路径之后,我经过不断学习工具箱的官方文档以及对源码的研究,更加掌握如何利用遗传算法求解更多有趣的问题了。
与前面的文章不同,本篇采用差分进化算法来优化SVM中的参数C和Gamma。(用遗传算法也可以,下面会给出效果比较)
首先简单回顾一下Python高性能实用型遗传和进化算法工具箱的用法。对于一个优化问题,需要做两个步骤便可进行求解:Step1:自定义问题类;Step2:编写执行脚本调用Geatpy进化算法模板对问题进行求解。在上一篇博客曾“详细”介绍过具体的用法:Python遗传算法工具箱的使用(一)求解带约束的单目标优化_Strong_wind的博客-CSDN博客_python遗传算法工具包,但完整的中文教程可以参考官方文档。
下面切入主题:
首先简单描述一下SVM的使用。本文采用Python的sklearn库来跑SVM算法。sklearn中SVM的算法库分为两类,一类是分类的算法库,包括:SVC、NuSVC和LinearSVC 3个类。另一类是回归算法库,包括:SVR、NuSVR和LinearSVR 3个类。相关的类都包裹在sklearn.svm模块之中。
正文
本文重点讲解利用SVC这个类来对iris数据集的数据进行分类。iris数据集的数据格式如下:
前4列是特征数据,第5列是标签数据。整个数据集一共有3种标签:Iris-setosa、Iris-versicolor、Iris-virginica。
本文采用的是将iris数据集拆分成训练集(iris_train.data)和测试集(iris_test.data)两部分的数据,已经拆分好的数据文件详见geatpy/geatpy/demo/soea_demo/soea_demo6 at master · geatpy-dev/geatpy · GitHub
采用SVC对数据进行分类的一般步骤为:
Step1:读取训练集的特征数据,并保存