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) [线性最小二乘?] 举个例子,这是目标函数:
min
∑
i
=
1
n
(
y
i
−
w
i
x
i
)
2
\min \sum_{i=1}^{n} (y_i - w_i x_i) ^ 2
mini=1∑n(yi−wixi)2
上图是波士顿房价预测的最小二乘结果
Lasso, Ridge, 与 ElasticNet等等都是这个简单等式的拓展而已,就是加一个额外的惩罚项,用来降低复杂度或者降低最终模型的特征数量。无论如何,目标都是降低测试集的错误率。
附:几个正则的公式
Lasso:使用L1-norm正则
J
(
θ
)
=
1
2
∑
i
m
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
+
λ
∑
j
n
∣
θ
j
∣
J(\theta)=\frac{1}{2} \sum_{i}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}+\lambda \sum_{j}^{n}\left|\theta_{j}\right|
J(θ)=21i∑m(y(i)−θTx(i))2+λj∑n∣θj∣
Ridge:使用L2-norm正则
J
(
θ
)
=
1
2
∑
i
m
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
+
λ
∑
j
n
θ
j
2
J(\theta)=\frac{1}{2} \sum_{i}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}+\lambda \sum_{j}^{n} \theta_{j}^{2}
J(θ)=21i∑m(y(i)−θTx(i))2+λj∑nθj2
ElasticNet:结合l1-norm、l2-norm进行正则
J
(
θ
)
=
1
2
∑
i
m
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
+
λ
(
ρ
∑
j
n
∣
θ
j
∣
+
(
1
−
ρ
)
∑
j
n
θ
j
2
)
J(\theta)=\frac{1}{2} \sum_{i}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}+\lambda\left(\rho \sum_{j}^{n}\left|\theta_{j}\right|+(1-\rho) \sum_{j}^{n} \theta_{j}^{2}\right)
J(θ)=21i∑m(y(i)−θTx(i))2+λ(ρj∑n∣θj∣+(1−ρ)j∑nθj2)
然而, 如果我们不在乎我们的错误具体有多少,只要它们在可接受的范围内,我们的模型该怎么设置?
以房价为例。 如果我们对预测在一定的金额之内(比如 5,000 美元)的误差不在乎,我们该怎么修改模型呢? 然后,只要误差在该范围内,我们就可以给我们的模型一些灵活的设置来查找预测值。
2. 现在开始说SVR
SVR给了我们这个灵活的设置来定义模型中多大的误差是可接受的,同时我们将得到一条曲线(或者说是一条高维超平面)去拟合数据
与 OLS 相比,SVR 的目标函数是最小化系数——更具体地说,是系数向量的 l2 范数——而不是平方误差。 关于为啥目标函数是这个,可以回看SVM的资料
相反,误差项在约束中处理,我们将绝对误差设置为小于或等于指定的边距,称为最大误差, ϵ \epsilon ϵ(epsilon)。
我们可以调整 epsilon 以获得模型所需的精度。
我们新的目标函数和约束如下:
目标函数:
min
1
2
∥
w
∥
2
\min \frac{1}{2}\|w\|^{2}
min21∥w∥2
约束:
∣
y
i
−
w
i
x
i
∣
≤
ε
\left|y_{i}-w_{i} x_{i}\right| \leq \varepsilon
∣yi−wixi∣≤ε
图例:
让我们在数据集上尝试简单的 SVR。下图显示了已经训练过的 SVR 模型在波士顿房价数据上的结果。 红线代表最佳拟合线,黑线代表误差范围 ε,我们将其设置为 5(5,000 美元)。
您可能很快意识到该算法不适用于所有数据点。该算法尽可能地解决了目标函数,但一些点仍然落在margin之外。 因此,我们需要考虑数据点的误差大于 ϵ \epsilon ϵ的可能性。 类似SVM中的松弛变量,我们可以用来松弛变量做到这一点。
3. 来给我们的模型添加一些松弛
松弛变量的想法很简单:允许任何变量都可以落在margin之外(由 ϵ \epsilon ϵ指定),我们可以将其与边距的偏差表示为 ξ \xi ξ。
尽管我们允许这些松弛存在,允许他们在 ϵ \epsilon ϵ之外,但是我们仍就希望减少他们。因此,我们需要将松弛变量也添加到目标函数中
则目标函数:
min
1
2
∥
w
∥
2
+
C
∑
i
=
1
n
∣
ξ
i
∣
\min \frac{1}{2} \| w \|^2 + C\sum_{i=1}^n | \xi_i |
min21∥w∥2+Ci=1∑n∣ξi∣
约束:
∣
y
i
−
w
i
x
i
∣
≤
ϵ
+
∣
ξ
i
∣
|y_i - w_i x_i | \le \epsilon + |\xi_i|
∣yi−wixi∣≤ϵ+∣ξi∣
松弛SVR的图例
我们现在有一个额外的超参数 C,我们可以对其进行调整。 随着 C 的增加,我们对 ε 之外的点的容忍度也会增加。 当 C 接近 0 时,容差接近 0,等式坍缩为简化的(尽管有时不可行)的。
让我们设置 C=1.0 并重新训练上面的模型。 结果绘制如下:
ϵ
=
5
,
C
=
1.0
\epsilon=5, C=1.0
ϵ=5,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。
让我们用最终的超参数 ϵ \epsilon ϵ=5, C=6.13 构建最后一个模型。
ϵ
\epsilon
ϵ=5, C=6.13 时波士顿房价的 SVR 预测图
上图显示,正如预期的那样,该模型再次有了提升。
结论
SVR 是一种强大的算法,它允许我们选择对错误的容忍度,(通过修改 ϵ \epsilon ϵ 以及 松弛)。
本文的代码在这里:
https://github.com/DrRyanHuang/SVR