SVM通常被认为是“黑匣子”。在本文中,我们将介绍可视化学习的SVM模型及其在真实世界数据上的性能的技术。

本文包含以下部分:

  1. 线性模型,SVM和内核简介
  2. 利用SVM内核解释高维特征空间......
  3. 评估高维分类边界性能
  4. 处理大量不平衡数据
  5. 训练SVM需要多少数据

线性模型,SVM和内核简介

在机器学习中,任何模型在模型输入和预测输出之间进行映射的时候都会使用线性分类器。

线性模型相对于神经网络(非线性模型)的主要优点是特征权重直接对应于模型中特征的重要性。因此,很容易理解模型“学到了什么”。

任何线性模型的核心是输入示例和参数/权重向量之间的点积。在线性回归的情况下,这是整个假设函数。其中逻辑回归通过sigmoid函数馈送点积,使得输出在0和1之间,因此适用于二元分类问题。

在考虑分类问题时,线性模型的最终决策边界是直线,平面或超平面,系数等于模型权重/参数,因此只能对可线性分离的数据进行分类,这可能是一个很大的限制。处理更复杂的分析问题。

支持向量机(SVM)是唯一可以对不可线性分离的数据进行分类的线性模型。
您可能会问作为线性模型的SVM如何使线性分类器适合非线性数据。直观地使用简单的线性回归模型,我们可以手动设计x,x²,x³,...特征,以尝试实现非线性数据点集的拟合。

当我们设计x²特征时,我们基本上将特征x乘以它。因此,假设我们通过将特征x1,x2,x3 ......的组合相乘来从我们的数据集中设计特征,然后理论上我们最终可以得到一个空间,在这个空间中,您的工程特征可以线性分离。以前面的简单示例为例,看看下面的数据如何在x³特征空间中转换为几乎线性的趋势。

不幸的是,要使用复杂的数据集来实现这一点,需要创建的不仅仅是三维空间(特征x,x²,x³),而实际上是极高维度的特征空间,对于我们数据集中的每个示例来说,计算成本非常高。下面我展示一个函数ø(x)的例子,它采用我们的原始特征x并将它们组合起来以创建许多二阶多项式特征。在我们继续之前:我将使用x的符号来表示带有上标的数据点/训练样例来表示特定的数据点,并使用下标来表示特定的特征。

幸运的是,对于我们来说,有一种解决这个计算复杂性难题的方法!当我们推导出SVM的优化问题时(复杂的外观公式告诉我们如何在坐标上升期间导出和更新我们的权重以实现最大化),结果证明我们的训练输入x的特征向量只出现在整个优化公式(以红色突出显示)。

此点产生于我们的原始特征空间,因此现在可以使用我们的函数ø替换它与我们的特征空间。

那么这有助于降低计算复杂度呢?根据点积的定义,我们取ø(x(i))的第i个条目并将其乘以ø(x(j))的第i个条目,然后将所有这些相加以获得单一的缩放器。应用此我们得到:

核心技巧是原始方程的一个非常简单的重新排列,我们可以看到我们完全删除了ø(x)并且只需要使用我们的原始输入特征执行计算,但仍然具有计算高维空间的效果。
我们现在要做的就是将涉及ø(x)的点积替换为内核等价物(K(x ^ i,x ^ j)):

类似地,当我们想要使用我们的模型进行预测时,我们从不明确地计算高维空间的权重,而是使用内核技巧来进行预测:

总之,我们可以使用内核技巧将非线性数据集转换为可线性分离的数据集,只是在更高维空间中。Sklearn在SVC实现中带有许多内核的预包装,包括Radius Basis Kernel(RBF)和Polynomial Kernels,每个都有自己的超参数,可以使用交叉验证通过实验进行调整,以获得最佳结果。

解释高维工程特征空间
所以请记住我们如何说线性模型的巨大好处是模型的权重/参数可以被解释为特征的重要性。好吧,一旦我们设计了高维或无限维特征集,模型的权重隐含地对应于高维空间,这对帮助我们的理解没有用。相反,我们可以做的是拟合逻辑回归模型,该模型在给定原始特征的情况下估计标签y为1的概率,其中f(x)是SVM决策函数:

我们使用最大似然估计来拟合该逻辑回归模型的参数,该技术称为Platt Scaling。
那么这如何帮助我们理解SVM的工作原理呢?我们只需拟合模型并在数据集中选择一个点进行评估,然后通过一系列值一次扰动一个特征,同时保持其他特征的固定。我们可以使用它来绘制模型对每个特征的灵敏度图表。
SKlearn具有内置于SVC模型中的此功能,您只需确保概率= true,初始化然后使用clf。predict_proba(X)函数获取概率。
在实践中,我发现,不仅仅是围绕单个点进行评估,通常更好地对相关点的集合进行采样,例如。40个负面例子并按特征平均概率分布,以获得更具代表性的东西。
这是我在参加NFL Punt Analytics Kaggle比赛时所做的一个例子,研究各种因素对脑震荡的影响:

我采取了所有的负面例子并对它们的概率进行了平均,我已经突出了每个特征中红色区域,其中玩家最有可能受到冲击。如果你有一堆热门编码变量(如玩家角色),那就是将它们聚合成条形图,然后看看特征存在与不存在之间的概率净变化。
性能评估

当您处理涉及SVM的高维模型时,能够可视化模型如何对数据点进行分类而不仅仅依赖于F1分数或ROC AUC等指标,这将是一件好事。
虽然有些人可能会使用主成分分析等技术来对分类进行可视化,但这样做会破坏我们的特征空间的尺寸,从而扭曲我们想要实现的视觉效果。
我发现一种很好的技术称为“项目直方图”[2],它涉及为训练和测试集绘制SVM决策函数输出的分布图。在SKlearn的SVC实现中很容易获得决策函数,只需调用decision_function(X)。您需要跟踪数据集标签,以便对投影直方图进行颜色编码,如下所示:

投影的直方图很容易解释。直方图x轴标识特定训练示例距SVM的决策边界的距离(由中心虚线指示)。
SVM在决策边界的任一侧具有等于1的间隔余量,这是双优化问题的强制约束('支持向量'是沿着这些边缘的数据点)。您会注意到在上面的模型中,有一些泄漏到边缘区域,并且确实从一个类跨越到决策边界的另一侧的类。这是因为我们设置了正则化超参数C> 0(它允许在一些错误分类和最小化SVM目标函数之间进行权衡)。
尽管使用了高维特征空间,但该图表可视化成功地可视化决策边界区域和所有分类,而不会损失维度。通过直方图也可以看到混淆矩阵中看到的所有度量(即真阳性,假阳性,真阴性和假阴性的数量)。它还使我们能够观察模型是否能够很好地推广到测试集。如果测试集具有类似的决策函数输出到训练集的分布,那么我们可以说模型在泛化上具有良好的性能。该模型还可以用于确定给定所选择的超参数是否数据集是线性可分的。

处理不平衡数据
当一个数据集对于一个类相对于另一个类具有不成比例的数量时,我们说它是不平衡的。

如果我们想要建立一个ML模型来预测少数群体的出现,这就是一个问题,因为我们可以通过简单地将所有少数群体的例子误分类为多数群体来达到高水平的准确性。
这通常发生在现实世界的数据中,无论是识别恶性组织,信用卡欺诈还是运动中的脑震荡,都是由于我们希望正确识别事件的相对罕见性。
使用不平衡数据纠正ML模型有两种普遍接受的做法:

1、对少数群体进行过度抽样/对多数群体进行抽样不足

2、增加成本函数中少数例子的权重

选项1:SMOTE
我们可以通过两种方式重新采样数据,方法是删除现有示例(欠采样)或添加新示例(过采样)。最常被接受的方法是使用称为SMOTE(合成少数过采样技术)的算法对少数类进行过采样[5]
它比名称简单得多,对于数据集中的每个少数点,它选择k最近的其他少数例子(通常为5),并沿着“加入”现有少数例子的行随机插入新的少数例子。
这是一个合理的事情,因为我们只是假设通过在类似的现有示例之间进行插值,我们将获得同一类的新示例。

这往往会显着改善模型的性能,并有助于推广少数例子的决策边界。选项2:将权重引入目标函数
可以采用的另一种方法是在目标函数中分配较高权重,以便对少数例子进行错误分类。这将“激励”算法以正确地对少数类进行分类。

训练SVM需要多少数据
一个合理的经验就是训练样例的数量至少为特征数量的10倍。如果您有大量的训练数据,最好使用少于50,000个训练样例,因为sklearn中的SVC实现具有O(n³)复杂度,这意味着收敛到解决方案的时间随着训练示例的数量而立即增长,它可以即使是一台体面的笔记本电脑或讨人喜欢的容器也会变慢。
它通常值得在较小的数据集上进行培训,并调整模型的超参数。您可以为模型选择保留一个小的交叉验证测试集。尽管您可能使用的实际数据比例很小,但您在测试剩余数据集时模型的概括程度会令您感到惊讶。

smote算法_支持向量机算法的可解释和可视化相关推荐

  1. cb32a_c++_STL_算法_查找算法_(5)adjacent_find

    cb32a_c++_STL_算法_查找算法_(5)adjacent_find adjacent_find(b,e),b,begin(),e,end() adjacent_find(b,e,p),p-p ...

  2. 常用十大算法_回溯算法

    回溯算法 回溯算法已经在前面详细的分析过了,详见猛击此处. 简单的讲: 回溯算法是一种局部暴力的枚举算法 循环中,若条件满足,进入递归,开启下一次流程,若条件不满足,就不进行递归,转而进行上一次流程. ...

  3. Python机器学习算法之支持向量机算法

    支持向量机算法 1.算法起源 2.算法概述 3.算法分类 4.算法思想 5.算法步骤 6.算法相关概念 7.算法实现 7.算法优点 8.算法优化 1.算法起源 1963年,前苏联学者Vladimir ...

  4. 蛮力写算法_蛮力算法解释

    蛮力写算法 Brute Force Algorithms are exactly what they sound like – straightforward methods of solving a ...

  5. 数据挖掘算法_数据挖掘算法入门

    有南方的朋友讲过北方人喜欢打比方,尤其是甲方的,其实也没什么不好了.如果是做菜的话,那么这些算法就相当于烹饪的工具了.对原始的食材进行预处理.加工整合,选择合适烹饪工具,以及对应的方法步骤,最后收获舌 ...

  6. 编程神奇算法_分类算法的神奇介绍

    编程神奇算法 由Bryan Berend | 2017年3月23日 (by Bryan Berend | March 23, 2017) About Bryan: Bryan is the Lead ...

  7. prim算法_贪心算法详解(附例题)

    贪心算法的特征规律 贪心算法,"贪心"二字顾名思义,因此其规律特征就是更加注重当前的状态,贪心法做出的选择是对于当前所处状态的最优选择,它的解决问题的视角是微观的"局部& ...

  8. 层次聚类算法 算法_聚类算法简介

    层次聚类算法 算法 Take a look at the image below. It's a collection of bugs and creepy-crawlies of different ...

  9. 接受拒绝算法_通过算法拒绝大学学位

    接受拒绝算法 数据科学 (Data Science) Nina was close to tears when she accused Nick Gibb of ruining her life. N ...

最新文章

  1. 【C#】Gif文件生成
  2. docker 无法正常启动 解决方法
  3. 编译执行和解释执行的区别
  4. 核桃编程 | 前端可观测性建设之路
  5. python中如何输出中文_python中怎么输出中文-问答-阿里云开发者社区-阿里云
  6. 【C语言】创建一个函数,判断某一正整数是否为水仙花数,并调用这个函数找出1000以内所有水仙花数...
  7. 我用Python帮学校写了一款图书管理系统!教导员居然请我吃饭
  8. IT职场人生系列之十:创业观
  9. 微信小程序官方界面UI设计秘籍
  10. 前端和后端哪个工资更高呢?
  11. 计算机大类专业分流问题,2019级计算机大类专业分流实施细则
  12. 什么是CSR ? 什么是公钥和私钥?
  13. matlab中 .name,matlab中propertyname都有什么
  14. Python中使用wxpy定时机器人给微信好友发送每日一文
  15. Gluster集群管理小分析
  16. Proteus 8.12 仿真软件安装
  17. 记一次基于vmware的gentoo安装
  18. 如果我比别人走得更远些,那是因为我站在巨人的肩上。
  19. pytorch优化器详解:SGD
  20. 惠民工程(2013中南大学研究生复试[最小生成树])

热门文章

  1. 作者:胡良霖(1973-),男,中国科学院计算机网络信息中心高级工程师
  2. 【Java】深入探讨Java数值舍入问题
  3. 【Java】探究Java实现多接口时同名方法冲突问题
  4. cmake 常用变量和常用环境变量
  5. python类之高级应用
  6. iview表单验证不生效问题注意点
  7. Python之函数的参数
  8. gerrit Cannot Merge
  9. 笔记《javascript高级程序设计》 第12章 DOM2和DOM3
  10. MYSQL临时表创建索引