X. Introduction
本文先翻译一下:
http://www.saedsayad.com/support_vector_machine_reg.htm
Support Vector Machine can also be used as a regression method, maintaining all the main features that characterize the algorithm (maximal margin).
支持向量机SVM也可以用作回归方法SVR,保留了SVM算法的所有主要思想(也就是最大化间隔)。The Support Vector Regression (SVR) uses the same principles as the SVM for classification, with only a few minor differences.
支持向量回归 (SVR) 使用与 SVM 相同的分类原理,只有一点儿细微的差别。First of all, because output is a real number it becomes very difficult to predict the information at hand, which has infinite possibilities.
首先,由于回归问题的输出是实数,因此很难十分精确的预测,因为这具有无限多的可能性。In the case of regression, a margin of tolerance (epsilon) is set in approximation to the SVM which would have already requested from the problem.
在回归的情况下,间隔的容差 (epsilon) 设置为其实可以看做一个SVM的求解。(我也不知道该怎么翻译)But besides this fact, there is also a more complicated reason, the algorithm is more complicated therefore to be taken in consideration.
但除了这个事实之外,还有一个更复杂的原因,算法更复杂。(我也不知道该怎么翻译)However, the main idea is always the same: to minimize error, individualizing the hyperplane which maximizes the margin, keeping in mind that part of the error is tolerated.
但是,主要思想始终是相同的:最小化错误,找到那个能最大化间隔的超平面,记住部分“错误”是可以容忍的。
以上几句话,就是白说,没什么感觉对吧,我也是。不用纠结了,我换一篇博客看看,这篇还不错,建议直接看原文
An Introduction to Support Vector Regression (SVR)
https://towardsdatascience.com/an-introduction-to-support-vector-regression-svr-a3ebc1672c2
In this article, I will walk through the usefulness of SVR compared to other regression models, do a deep-dive into the math behind the algorithm, and provide an example using the Boston Housing Price dataset.
老哥带你深入了解SVR数学原理,并给一个波士顿房价的例子
1. 简单回归
大部分回归模型,目标是最小化均方误差,用 Ordinary Least Squares(OLS) [线性最小二乘?] 举个例子,这是目标函数:
上图是波士顿房价预测的最小二乘结果
Lasso, Ridge, 与 ElasticNet等等都是这个简单等式的拓展而已,就是加一个额外的惩罚项,用来降低复杂度或者降低最终模型的特征数量。无论如何,目标都是降低测试集的错误率。
附:几个正则的公式
Lasso:使用L1-norm正则
Ridge:使用L2-norm正则
ElasticNet:结合l1-norm、l2-norm进行正则
然而, 如果我们不在乎我们的错误具体有多少,只要它们在可接受的范围内,我们的模型该怎么设置?
以房价为例。 如果我们对预测在一定的金额之内(比如 5,000 美元)的误差不在乎,我们该怎么修改模型呢? 然后,只要误差在该范围内,我们就可以给我们的模型一些灵活的设置来查找预测值。
2. 现在开始说SVR
SVR给了我们这个灵活的设置来定义模型中多大的误差是可接受的,同时我们将得到一条曲线(或者说是一条高维超平面)去拟合数据
与 OLS 相比,SVR 的目标函数是最小化系数——更具体地说,是系数向量的 l2 范数——而不是平方误差。 关于为啥目标函数是这个,可以回看SVM的资料
相反,误差项在约束中处理,我们将绝对误差设置为小于或等于指定的边距,称为最大误差,(epsilon)。
我们可以调整 epsilon 以获得模型所需的精度。
我们新的目标函数和约束如下:
目标函数:
约束:
图例:
让我们在数据集上尝试简单的 SVR。下图显示了已经训练过的 SVR 模型在波士顿房价数据上的结果。 红线代表最佳拟合线,黑线代表误差范围 ε,我们将其设置为 5(5,000 美元)。
您可能很快意识到该算法不适用于所有数据点。该算法尽可能地解决了目标函数,但一些点仍然落在margin之外。 因此,我们需要考虑数据点的误差大于的可能性。 类似SVM中的松弛变量,我们可以用来松弛变量做到这一点。
3. 来给我们的模型添加一些松弛
松弛变量的想法很简单:允许任何变量都可以落在margin之外(由指定),我们可以将其与边距的偏差表示为。
尽管我们允许这些松弛存在,允许他们在之外,但是我们仍就希望减少他们。因此,我们需要将松弛变量也添加到目标函数中
则目标函数:
约束:
松弛SVR的图例
我们现在有一个额外的超参数 C,我们可以对其进行调整。 随着 C 的增加,我们对 ε 之外的点的容忍度也会增加。 当 C 接近 0 时,容差接近 0,等式坍缩为简化的(尽管有时不可行)的。
让我们设置 C=1.0 并重新训练上面的模型。 结果绘制如下:
时,SVR的结果图
4. 找到 C 的最佳值
上述 soft 模型似乎更适合数据。我们可以更进一步,在参数 C 上进行网格搜索以获得更好的解决方案。让我们定义一个评分指标% within Epsilon
。
该指标衡量我们的测试集中有多少数据点落在我们的误差范围内。
我们还可以查看平均绝对误差 (MAE) 如何随 C 变化。
下面是网格搜索结果的图,x 轴上为 C 值,% within Epsilon
值在左,MAE 值在右。
正如我们所看到的,MAE 通常随着 C 的增加而减小。 但是,指标% within Epsilon
我们需要寻找最大值。 由于我们这个模型的最初目标是在我们的误差范围内(5,000 美元)最大化预测,我们希望找到% within Epsilon
最大时的 C 值。 因此,C=6.13。
让我们用最终的超参数 =5, C=6.13 构建最后一个模型。
=5, C=6.13 时波士顿房价的 SVR 预测图
上图显示,正如预期的那样,该模型再次有了提升。
结论
SVR 是一种强大的算法,它允许我们选择对错误的容忍度,(通过修改
本文的代码在这里:
https://github.com/DrRyanHuang/SVR