介绍
支持向量机(SVM)是一种可用于分类和回归问题的监督学习算法,一般常用于分类问题。其基本思想是我们将数据集中的点在n维空间中表示出来,其中n表示数据中变量的个数。然后寻找一个超平面将其分成不同的类别。如下图所示:
工作原理
通常支持向量机采用超平面将数据进行分类,那么怎么确定一个正确的超平面来提高分类准确率呢?有以下几个步骤:
通常我们在判别超平面时的一个方法就是选择一个分类结果做好的平面。当有图中三个平面时,哪一个更加符合分类情况?显然是B。
那么当有下图三个平面都有较好的分类效果时,我们应该选择哪一个呢?
这个时候我们需要计算两类向量到超平面之间的距离之和,也称为“间隔”。取间隔最大的那个超平面即为我们需要的超平面。如下图我们选择C更适合。
如下图,在我们遇到异常值时,向量机在计算超平面时忽略此异常值,因此向量机在处理异常只是具有鲁棒性。
在遇到下图情况不能使用一个线性的超平面来进行分类时,我们会引入一种新的特征函数来解决这个问题。
python实现
在Python中,sklearn机器学习库中为我们提供了svm的函数接口,我们可以直接调用,代码如下:
SVM调参
根据训练数据调整算法相应的参数可以提高算法的准确性和适用性。向量机的参数有以下几种。
一般来说,我们讨论“kernel”,“gamma”和“C”这三个对模型影响较大的参数。
kernel:svm中kernel有三种情况,分别为linear、rbf和poly,其中rbf和poly是非线性超平面。其使用效果图所示
gamma:gamma值越高,算法会试图精确拟合每个训练数据集,即泛化误差,导致过拟合问题。gamma值越低会导致系统不能够完整学习样本,产生欠拟合问题。如下图所示:
C:错误项的惩罚参数C。它还控制了平滑决策边界和正确划分训练点之间的权衡。不同c值效果如下:
通过上述讨论,我们在训练模型时要通过交叉验证来选择合适的参数,避免产生过拟合。
算法优缺点
优点
分类效果较好,有清晰的间隔
适用于高维空间中是有效的。
适用于在维度数量大于样本数量的情况
该算法在决策函数中使用了训练点的子集,因此内存效率较高。
缺点
样本大时需要的训练时间较长
当数据集有更多噪声时,比如目标类重叠时,它的性能也不太好
支持向量机并不直接提供概率估计
结语:
在本文中我们介绍了机器学习中支持向量机算法的基本情况,并用python将算法实现。更多机器学习算法的学习欢迎关注我们。对机器学习感兴趣的同学欢迎大家转发&转载本公众号文章,让更多学习机器学习的伙伴加入公众号《python练手项目实战》,在实战中成长。
领取专属 10元无门槛券
私享最新 技术干货