1.SVM算法原理
支持向量机(support vector machines,SVM)是一种有监督的机器学习算法,适合中小型数据样本、非线性、高维的分类问题。
(这一部分公式太多,直接发word截图,可以照着手推一遍)简单推导一下,借鉴了很多前人经验。之后推荐实用的MATLAB工具箱!!!对推导不感兴趣的可以直接跳过
1.1 支持向量与超平面
1.2 点到超平面的距离公式
1.3 最大间隔的优化模型
1.4 松弛变量
新的拉格朗日函数为
1.5 引入核函数
上文的推导都是在线性可分情况下进行的。对于低维平面内不可分的数据,放在一个高维空间中去就有可能变得可分。以二维平面的数据为例,我们可以通过找到一个映射将二维平面的点放到三维平面之中。理论上任意的数据样本都能够找到一个合适的映射使得这些在低维空间不能划分的样本到高维空间中之后能够线性可分。回顾之前的目标函数
其实找工作让手推SVM时候,像这样简单地推导一下就差不多了
常用的核函数如表1所示。
后续借用核函数解决拉格朗日算子的详细过程,感兴趣的同学可以看看知乎上这些大神的详细介绍:**
2.做SVM的MATLAB工具箱:LIBSVM(必须配合C++编译器,如Visual Studio,或者MinGW)
我用的LIBSVM3.24版本,这一版以上的已经不需要特别编译了,安装和使用都很方便:
在这里下载LIBSVM
下载后文件解压到自己电脑上MATLAB的工具箱文件夹toolbox里面,
然后设置添加路径
编译很简单,但是如果电脑上没有C++的编译器,必须安装一个!!!,
MinGM我没试过,需要专门设置一下地址,稍稍麻烦了一点儿 MinGW的下载、安装经验贴
我装了一个免费的社区版Visual Studio,
Visual Studio2017的下载、安装
安装也简单,不需要特别设置什么。 我的MATLAB是2019a,和Visual Studio2017能搭配,和VS2019又不行了哈哈
搞定C++编译器,然后在MATLAB的命令行窗口输入mex -setup(注意x和-之间有个空格),
然后选择c++,就配置成功了
很多人说必须使用MAKE函数编译一下,但我这一步始终报错,但是!!!!这一步没成功我照样可以用!3.24以上的版本不需要特别编译了
不需要更多操作就可以使用了
3.建议再安装一个FarutoUltimate
建议再安装一个有用的工具箱FarutoUltimate!毕竟分类结果的可视化很重要!
FarutoUltimate工具箱下载地址
经过自行调整部分代码,即可实现归一化、主成分分析、
分类结果可视化
和调参很有用的:
Grid Search 网格搜索、
启发式遗传算法GA、
粒子群算法PSO、
不仅支持分类,而且支持回归问题!快去试试吧!!
安装方法同样很简单,放在文件夹toolbox下然后设置添加路径就可以,但是!!!!!!!切记不要迷信工具箱!很多地方还需要根据自己的需求做调整!!!!比如最后这个图,看标题:最佳的惩罚项参数C取了31.1291?????这么大的惩罚项,早都过拟合了!!!
还有,对样本点寻找超平面分类结果的可视化函数我一直都没跑通过,
svmplot函数一直跑不通,希望有人解决了给我说一下咋改
需要多去修改一下,欸~你们加油吧
4.必须安装gatbx-master工具箱,才能顺利使用FarutoUltimate中的遗传算法寻优函数
在使用FarutoUltimate时会发现遗传算法求参数优化的函数死活不能跑,里面的rep等函数一直在报错,其实是因为作者采用了一个比较古老的遗传算法工具箱叫做gatbx-master!!!你需要安装它,同样是放入matlab的toolbox然后添加路径即可
这个帖子里有人发了gatbx-master工具箱的下载地址,免费注册就可以下载
有了它,你才能正常使用FarutoUltimate中设计遗传算法的一部分函数哦~