首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习100天-Day1601线性支持向量机分类

说明:本文依据《Sklearn 与 TensorFlow 机器学习实用指南》完成,所有版权和解释权均归作者和翻译成员所有,我只是搬运和做注解。

第五章是对支持向量机SVM的系统介绍,阐述支持向量机的核心概念,怎么使用这个强大的模型,以及它是如何工作的。

这应该是第三次做这方面的内容了,贴出另一个比较全面的SVM进阶博客。

https://blog.csdn.net/v_JULY_v/article/details/7624837

支持向量机(SVM)是个非常强大并且有多种功能的机器学习模型,能够做线性或者非线性的分类,回归,甚至异常值检测。机器学习领域中最为流行的模型之一,是任何学习机器学习的人必备的工具。SVM特别适合应用于复杂但中小规模数据集的分类问题

本章使用数据为Sklearn中iris数据

源代码已经同步在github中

https://github.com/jwc19890114/-02-learning-file-100days

1. 线性支持向量机分类

教程给出两张图,左图中绿色虚线作为决策边界分类效果不好,红色和紫色线虽然已有数据分类上表现较好,但是因为太靠近样本,这样在引入新的数据时会出现误判。右图中实线为SVM分类器的判定边界,不仅分开了两种类别,而且还尽可能地远离了最靠近的训练数据点。

以下的代码为生成对比图的,原教程中没有出现,看看就好

注意

在生成SVM模型的SVC函数中有两个关键参数,kernel和C

1.σ越大,f越平滑,非线性效能越小,对噪声越不敏感

large σ: High Bias

small σ: High Variance

2.C类似于正则化中1/λ的作用。C越大,拟合非线性的能力越强。较小的C会导致更宽的margin,但会有更多的间隔违规。如果SVM模型过拟合,可以尝试通过减小超参数C去调整。

large C: High Variance

small C: High Bias

若使用核函数,一定要对Feature做Feature Scaling(Normalization)。

若训练集m太小,但Feature数量n很大,则训练数据不足以拟合复杂的非线性模型,这种情况下只能用linear-kernel(就是fi=xifi=xi)不能用高斯核。

现在增加样本,会发现出现在margin外的样本也不会影响判断,因为判定边界是由margin边缘样本确定的,这些确定边界的样本点,被称为“支持向量”

注意SVM 对特征缩放比较敏感,在下图的左图中,垂直的比例要更大于水平的比例,所以最宽的margin接近水平。但对特征缩放后(例如使用Scikit-Learn的StandardScaler),判定边界看起来要好得多

软、硬间隔分类

如果我们严格地规定所有的数据都不在margin上,都在正确地两边,称为硬间隔分类,硬间隔分类有两个问题

第一,只对线性可分的数据起作用。

第二,对异常点敏感。

下图显示了只有一个异常点的鸢尾花数据集:左边的图中很难找到硬间隔,右边的图中判定边界和我们之前在图 5-1 中没有异常点的判定边界非常不一样,它很难一般化。

为了避免这一问题,一般会倾向使用软间隔分类。目的在保持margin尽可能大和避免间隔违规(例如:数据点出现在margin中央或者甚至在错误的一边)之间找到一个良好的平衡。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190110A0MIGH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券