此外,通过小的调整,SVM也可以通过使用
2. SVM分类算法-简要解释假设我们有一组属于两个不同类别的点。我们希望以一种方式将这两个类别分开,使我们能够正确地将任何未来的新点分配到其中一个类别。 SVM算法试图找到一个 注意,最终位于间隔边缘上的点被称为 为了帮助理解,让我们来看看下面的示例图。 2.1 硬间隔使用SVM算法分离两类点。硬间隔场景。 被称为'H1'的超平面无法准确地分离这两个类别,因此它对我们的问题来说不是一个可行的解决方案。 'H2'超平面可以正确地分离类别。然而,超平面与最近的蓝色和绿色点之间的间隔很小。因此,存在将任何未来新点错误分类的高风险。例如,当明显应该属于蓝色类别时,算法会将新的灰色点(x1=3,x2=3.6)分配到绿色类别。 最后,'H3'超平面正确地分隔了这两个类别,并且具有最大可能的间隔(黄色阴影区域)。找到了解决方案!
2.2 软间隔有时,无法完美地分离这两个类别。在这种情况下,使用 使用SVM算法分离两类点。软间隔场景。 通过这个例子,我们可以看到'H4'超平面将间隔内的绿色点视为
3. 核技巧上述SVM的解释涵盖了蓝色和绿色类别线性可分的示例。然而,如果我们想将SVM应用于非线性问题,该怎么办呢? 这就是 核函数是一个将原始的非线性问题转化为高维空间中的线性问题的函数。为了解释这个技巧,让我们来看下面的例子。 假设您有两个类别-红色和黑色,如下所示: 原始的二维数据。 正如您所看到的,红色和黑色点不是线性可分的,因为我们无法画一条线将这两个类别放在这条线的不同侧。然而,我们可以通过画一个将所有红色点放在内部、黑色点放在外部的圆来将它们分开。 如何将这个问题转化为线性问题呢? 让我们添加一个第三个维度,将其定义为x和y值的平方和: 使用这个带有 通过核技巧转化的数据。红色和黑色类别现在是线性可分的。可以移步原文链接,查看交互式图表。 4 径向基函数(RBF)核函数和Python示例
Gamma( 因此,根据上述设置,我们可以控制个别点对整个算法的影响。Gamma越大,其他点对模型的影响越近。我们将在下面的Python示例中看到改变gamma的影响。 4.1 设置我们将使用以下数据和库:
让我们导入所有的库: 然后,我们从 Kaggle 获取国际象棋比赛的数据,您可以通过以下链接下载:https://www./datasnaek/chess。 在您的机器上保存数据后,使用下面的代码将其导入。请注意,我们还派生了一些新的变量供我们在建模过程中使用。 现在,让我们创建几个函数,以便在构建不同模型和绘制结果时进行复用。 第一个函数将把数据分为训练集和测试集,拟合模型,在测试集上预测结果,并生成模型性能评估指标。 下面的函数将使用测试数据和模型预测表面绘制一个 Plotly 的三维散点图。 4.2 使用默认的 C 和 Gamma 值构建模型让我们使用
由于我们使用了先前定义的 该函数打印出以下模型评估指标: 我们可以看到,测试数据上的模型性能与训练数据上的模型性能相似,这表明模型可以很好地使用默认超参数进行泛化。 现在,我们通过简单调用 Plot_3D 函数来可视化预测:
虽然概率存在局部变化,但决策边界位于 x=0(即评分差=0)附近,因为这是概率穿过 p=0.5 边界的位置。 4.3 SVM模型2:Gamma=0.1现在让我们看看当我们设置相对较高的 我们可以看到,增加 与之前的平滑预测曲面不同,现在我们有一个非常 '尖锐' 的曲面。要理解为什么会这样,我们需要更仔细地研究核函数。 当我们选择较高的 相反,降低 4.4 SVM模型3-Gamma=0.000001让我们重新运行这些函数,带有 正如预期的那样,降低 带有 gamma=0.000001 的 SVM 分类模型的预测平面。图片由作者提供。 4.5 调整超参数 C我决定不在本文中包含使用不同 C 值的示例,因为它会以类似的方式影响预测平面的平滑度,尽管原因不同。您可以通过将值(如 C=100)传递给 5. 结论SVM 算法非常强大和灵活。虽然我只介绍了使用其中一种可用核函数的基本用法,但我希望这让您了解了 SVM 和 RBF 的内部工作原理。这应该使您能够自己探索所有其他选项。 本文介绍结束。 代码下载,移步: https://pan.baidu.com/s/1VFUQwiNy3P-wdQ9b7RxxhA?pwd=dgg7 祝学习愉快。 |
|
来自: taotao_2016 > 《计算机》