Bootstrap

python回归算法_支持向量回归(SVR)

前言

提醒:
文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。
其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。


分类与回归算法

机器学习中的分类与回归算法是两种主要的监督学习任务,它们分别用于解决不同类型的问题。以下是这两种算法的总结:

  1. 分类算法
    分类算法用于将数据分成不同的类别,适用于输出为离散标签的问题。常见的分类算法包括:

    1. 逻辑回归:使用逻辑函数来估计概率,用于二分类问题,也可以扩展到多分类问题。
    2. 支持向量机(SVM):通过找到最优的决策边界来最大化样本的分类准确率,适用于高维数据。
    3. 决策树:通过树结构来进行决策,每个节点代表一个特征的选择,叶子节点代表分类结果。
    4. 随机森林:由多个决策树组成的集成学习方法,通过投票来决定最终分类结果。
    5. 梯度提升决策树(GBDT):通过构建和结合多个弱学习器来形成强学习器,适用于分类和回归问题。
    6. 朴素贝叶斯:基于贝叶斯定理,假设特征之间相互独立,适用于文本分类等场景。
    7. K近邻(KNN):根据样本之间的距离进行分类,适用于小规模数据集。
    8. 神经网络:通过多层感知机学习数据的复杂模式,适用于图像、语音等复杂分类问题。
  2. 回归算法
    回归算法用于预测连续数值输出,适用于输出为连续变量的问题。常见的回归算法包括:

    1. 线性回归:通过拟合一条直线来预测目标变量的值,是最简单的回归方法。
    2. 岭回归:线性回归的扩展,通过引入L2正则化项来防止过拟合。
    3. Lasso回归:线性回归的另一种扩展,通过引入L1正则化项来进行特征选择。
    4. 弹性网回归:结合了岭回归和Lasso回归,同时引入L1和L2正则化项。
    5. 决策树回归:使用决策树结构来进行回归预测,适用于非线性关系。
    6. 随机森林回归:由多个决策树组成的集成学习方法,通过平均来决定最终回归结果。
    7. 梯度提升决策树回归(GBDT回归):通过构建和结合多个弱学习器来形成强学习器,适用于回归问题。
    8. 支持向量回归(SVR):支持向量机在回归问题上的应用,通过找到最优的决策边界来最大化样本的回归准确率。
    9. 神经网络回归:通过多层感知机学习数据的复杂模式,适用于复杂的回归问题。
  3. 分类与回归算法的比较

    • 输出类型:分类算法输出离散标签,回归算法输出连续数值。
    • 评估指标:分类算法常用准确率、召回率、F1分数等指标,回归算法常用均方误差(MSE)、均方根误差(RMSE)等指标。
    • 问题类型:分类算法适用于类别预测问题,如垃圾邮件检测;回归算法适用于数值预测问题,如房价预测。 在实际应用中,选择分类还是回归算法取决于问题的性质和需求。有时,可以将回归问题转化为分类问题,或者将分类问题转化为回归问题,具体取决于问题的特点和目标。

支持向量回归(SVR)数学原理

支持向量机(分类算法)可参见:python_支持向量机(SVM)

支持向量回归(Support Vector Regression,简称SVR)是支持向量机(Support Vector Machine,简称SVM)在回归问题上的应用。SVR的目标是找到一个函数f(x),使得f(x)与实际输出y之间的差异不超过ε,同时不存在误判。SVR通过引入ε不敏感损失函数来处理回归问题。
在SVR中,我们使用ε不敏感损失函数来衡量预测值与实际值之间的差异。该损失函数定义为:
L ϵ ( f ( x ) − y ) = max ⁡ ( 0 , ∣ f ( x ) − y ∣ − ϵ ) L_\epsilon(f(x) - y) = \max(0, |f(x) - y| - \epsilon) Lϵ(f(x)y)=max(0,f(x)yϵ)
这意味着只有当预测值与实际值之间的差异超过ε时,才会计算损失。

1. 目标函数

SVR 通过最小化以下目标函数来实现这一目标:

min ⁡ w , b , ξ , ξ ∗ ( 1 2 ∥ w ∥ 2 + C ∑ i = 1 m ( ξ i + ξ i ∗ ) ) \min_{w, b, \xi, \xi^*} \left( \frac{1}{2} \|w\|^2 + C \sum_{i=1}^m (\xi_i + \xi_i^*) \right) w,b,ξ,ξmin(21w2+Ci=1m(ξi+ξi))

其中:

  • ∥ w ∥ 2 \|w\|^2 w2 代表模型的复杂度。
  • C C C 是正则化参数,用于平衡复杂度和误差。
  • ξ i \xi_i ξi ξ i ∗ \xi_i^* ξi 是松弛变量,用于处理超出 ϵ \epsilon ϵ 范围的偏差。

2. 约束条件

目标函数受以下约束:

{ y i − ⟨ w , ϕ ( x i ) ⟩ − b ≤ ϵ + ξ i , ⟨ w , ϕ ( x i ) ⟩ + b − y i ≤ ϵ + ξ i ∗ , ξ i , ξ i ∗ ≥ 0 ∀ i . \begin{cases} y_i - \langle w, \phi(x_i) \rangle - b \leq \epsilon + \xi_i, \\ \langle w, \phi(x_i) \rangle + b - y_i \leq \epsilon + \xi_i^*, \\ \xi_i, \xi_i^* \geq 0 \quad \forall i. \end{cases} yiw,ϕ(xi)⟩bϵ+ξi,w,ϕ(xi)⟩+byiϵ+ξi,ξi,ξi0i.

其中:

  • ϵ \epsilon ϵ ϵ \epsilon ϵ-不敏感损失函数的阈值。
  • ϕ ( x i ) \phi(x_i) ϕ(xi) 是输入特征向量 x i x_i xi 的高维映射。
  • ⟨ w , ϕ ( x i ) ⟩ \langle w, \phi(x_i) \rangle w,ϕ(xi)⟩表示内积,又称为点积或标量积,是两个向量之间的一种运算,返回一个标量值。对于实向量空间 R n \mathbb{R}^n Rn 中的两个向量 u \mathbf{u} u v \mathbf{v} v,内积定义为:
    u ⋅ v = ∑ i = 1 n u i v i \mathbf{u} \cdot \mathbf{v} = \sum_{i=1}^{n} u_i v_i uv=i=1nuivi
    这表示将两个向量的对应分量相乘,然后将所有这些乘积相加。
    为了方便矩阵运算,内积也可以表示为:
    u ⋅ v = u T v \mathbf{u} \cdot \mathbf{v} = \mathbf{u}^T \mathbf{v} uv=uTv
    在函数空间 L 2 ( [ a , b ] ) L^2([a, b]) L2([a,b]) 中,内积可以定义为积分形式。对于定义在区间 [ a , b ] [a, b] [a,b] 上的两个函数 f f f g g g,内积表示为:
    ⟨ f , g ⟩ = ∫ a b f ( x ) g ( x )   d x \langle f, g \rangle = \int_{a}^{b} f(x) g(x) \, dx f,g=abf(x)g(x)dx

3. ϵ \epsilon ϵ-不敏感损失函数

SVR 使用 ϵ \epsilon ϵ-不敏感损失函数,定义如下:

L ϵ ( y , f ( x ) ) = { ∣ y − f ( x ) ∣ − ϵ , 如果  ∣ y − f ( x ) ∣ > ϵ 0 , 否则 L_{\epsilon}(y, f(x)) = \begin{cases} |y - f(x)| - \epsilon, & \text{如果 } |y - f(x)| > \epsilon \\ 0, & \text{否则} \end{cases} Lϵ(y,f(x))={yf(x)ϵ,0,如果 yf(x)>ϵ否则

4. 拉格朗日函数

为了将问题转化为对偶问题,引入拉格朗日乘子 α i \alpha_i αi α i ∗ \alpha_i^* αi。拉格朗日函数 L L L 表示为:

L ( w , b , ξ , ξ ∗ , α , α ∗ ) = 1 2 ∥ w ∥ 2 + C ∑ i = 1 m ( ξ i + ξ i ∗ ) − ∑ i = 1 m α i ( ϵ + ξ i − y i + ⟨ w , ϕ ( x i ) ⟩ + b ) − ∑ i = 1 m α i ∗ ( ϵ + ξ i ∗ + y i − ⟨ w , ϕ ( x i ) ⟩ − b ) L(w, b, \xi, \xi^*, \alpha, \alpha^*) = \frac{1}{2} \|w\|^2 \\+ C \sum_{i=1}^m (\xi_i + \xi_i^*) - \sum_{i=1}^m \alpha_i (\epsilon + \xi_i - y_i + \langle w, \phi(x_i) \rangle + b) - \sum_{i=1}^m \alpha_i^* (\epsilon + \xi_i^* + y_i - \langle w, \phi(x_i) \rangle - b) L(w,b,ξ,ξ,α,α)=21w2+Ci=1m(ξi+ξi)i=1mαi(ϵ+ξiyi+w,ϕ(xi)⟩+b)i=1mαi(ϵ+ξi+yiw,ϕ(xi)⟩b)

5. 对偶问题

w w w b b b 求偏导数并设为零,得到最优条件:

∂ L ∂ w = w − ∑ i = 1 m ( α i − α i ∗ ) ϕ ( x i ) = 0 ⇒ w = ∑ i = 1 m ( α i − α i ∗ ) ϕ ( x i ) \frac{\partial L}{\partial w} = w - \sum_{i=1}^m (\alpha_i - \alpha_i^*) \phi(x_i) = 0 \Rightarrow w = \sum_{i=1}^m (\alpha_i - \alpha_i^*) \phi(x_i) wL=wi=1m(αiαi)ϕ(xi)=0w=i=1m(αiαi)ϕ(xi)

∂ L ∂ b = − ∑ i = 1 m ( α i − α i ∗ ) = 0 ⇒ ∑ i = 1 m ( α i − α i ∗ ) = 0 \frac{\partial L}{\partial b} = -\sum_{i=1}^m (\alpha_i - \alpha_i^*) = 0 \Rightarrow \sum_{i=1}^m (\alpha_i - \alpha_i^*) = 0 bL=i=1m(αiαi)=0i=1m(αiαi)=0

将这些条件代入拉格朗日函数,得到对偶问题:

max ⁡ α , α ∗ ( ∑ i = 1 m ( α i − α i ∗ ) y i − 1 2 ∑ i , j = 1 m ( α i − α i ∗ ) ( α j − α j ∗ ) K ( x i , x j ) ) \max_{\alpha, \alpha^*} \left( \sum_{i=1}^m (\alpha_i - \alpha_i^*) y_i - \frac{1}{2} \sum_{i,j=1}^m (\alpha_i - \alpha_i^*) (\alpha_j - \alpha_j^*) K(x_i, x_j) \right) α,αmax(i=1m(αiαi)yi21i,j=1m(αiαi)(αjαj)K(xi,xj))

约束条件:

∑ i = 1 m ( α i − α i ∗ ) = 0 和 0 ≤ α i , α i ∗ ≤ C ∀ i \sum_{i=1}^m (\alpha_i - \alpha_i^*) = 0 \quad \text{和} \quad 0 \leq \alpha_i, \alpha_i^* \leq C \quad \forall i i=1m(αiαi)=00αi,αiCi

其中 K ( x i , x j ) = ⟨ ϕ ( x i ) , ϕ ( x j ) ⟩ K(x_i, x_j) = \langle \phi(x_i), \phi(x_j) \rangle K(xi,xj)=ϕ(xi),ϕ(xj)⟩ 是核函数。
为了使 SVR 能够处理非线性回归问题,通常使用核函数 K ( x i , x j ) K(\mathbf{x}_i, \mathbf{x}_j) K(xi,xj) 将输入数据映射到高维空间。常用的核函数包括:

  • 线性核函数: K ( x i , x j ) = x i T x j K(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i^T \mathbf{x}_j K(xi,xj)=xiTxj
  • 多项式核函数: K ( x i , x j ) = ( γ x i T x j + r ) d K(\mathbf{x}_i, \mathbf{x}_j) = (\gamma \mathbf{x}_i^T \mathbf{x}_j + r)^d K(xi,xj)=(γxiTxj+r)d
  • 高斯核(RBF): K ( x i , x j ) = e − γ ∣ ∣ x i − x j ∣ ∣ 2 K(\mathbf{x}_i, \mathbf{x}_j) = e^{-\gamma ||\mathbf{x}_i - \mathbf{x}_j||^2} K(xi,xj)=eγ∣∣xixj2

6. 解的重构

求解对偶问题后,得到 α i \alpha_i αi α i ∗ \alpha_i^* αi。利用这些值计算 w w w

w = ∑ i = 1 m ( α i − α i ∗ ) ϕ ( x i ) w = \sum_{i=1}^m (\alpha_i - \alpha_i^*) \phi(x_i) w=i=1m(αiαi)ϕ(xi)

选择一个合适的样本 j j j,计算 b b b

b = y j − ⟨ w , ϕ ( x j ) ⟩ b = y_j - \langle w, \phi(x_j) \rangle b=yjw,ϕ(xj)⟩
预测函数为:
f ( x ) = ∑ i = 1 n ( α i − α i ∗ ) K ( x i , x ) + b f(x) = \sum_{i=1}^n (\alpha_i - \alpha_i^*) K(x_i, x) + b f(x)=i=1n(αiαi)K(xi,x)+b
其中 b b b 通过支持向量计算得到。

7. 参数选择

  • 正则化参数 C C C:控制模型复杂度和误差的平衡。较大的 C C C 会使模型对误差更加敏感,可能导致过拟合;较小的 C C C 可能导致欠拟合。
  • ϵ \epsilon ϵ 容忍度:控制 ϵ \epsilon ϵ-不敏感损失函数的阈值。较大的 ϵ \epsilon ϵ 会使模型对预测偏差更加宽容,而较小的 ϵ \epsilon ϵ 会使模型对误差更加敏感。
  • 核函数:选择合适的核函数(如高斯核 K ( x , x ′ ) = exp ⁡ ( − γ ∥ x − x ′ ∥ 2 ) K(x, x') = \exp(-\gamma \|x - x'\|^2) K(x,x)=exp(γxx2))可以捕捉数据中的复杂关系。

算法实现

手动实现

import numpy as np
from cvxopt import matrix, solvers
import matplotlib.pyplot as plt


class SVR:
    def __init__(self, C=1.0, epsilon=0.1):
        # 惩罚参数
        self.C = C
        # ε-不敏感损失函数的参数
        self.epsilon = epsilon
        # 权重向量
        self.w = None
        # 偏置项
        self.b = None

    def fit(self, X, y):
        n_samples, n_features = X.shape

        # 构建二次规划问题的参数
        # 目标函数中的二次项系数矩阵
        P = np.zeros((2 * n_samples, 2 * n_samples))
        for i in range(n_samples):
            for j in range(n_samples):
                P[i, j] = X[i].dot(X[j])
                P[i + n_samples, j + n_samples] = X[i].dot(X[j])
                P[i, j + n_samples] = -X[i].dot(X[j])
                P[i + n_samples, j] = -X[i].dot(X[j])
        P = matrix(P)

        # 目标函数中的一次项系数向量
        q = matrix(np.hstack([self.epsilon - y, self.epsilon + y]))

        # 不等式约束条件
        G1 = np.vstack([-np.eye(2 * n_samples), np.eye(2 * n_samples)])
        h1 = np.hstack([np.zeros(2 * n_samples), np.ones(2 * n_samples) * self.C])
        G = matrix(G1)
        h = matrix(h1)

        # 等式约束条件
        A = matrix(np.hstack([np.ones(n_samples), -np.ones(n_samples)]).reshape(1, -1))
        b = matrix(0.0)

        # 求解二次规划问题
        sol = solvers.qp(P, q, G, h, A, b)
        alphas = np.ravel(sol['x'])
        alphas_pos = alphas[:n_samples]
        alphas_neg = alphas[n_samples:]

        # 计算权重向量
        self.w = np.zeros(n_features)
        for i in range(n_samples):
            self.w += (alphas_pos[i] - alphas_neg[i]) * X[i]

        # 计算偏置项
        # 找到支持向量
        support_vectors = (alphas_pos > 1e-5) | (alphas_neg > 1e-5)
        self.b = 0
        for i in np.where(support_vectors)[0]:
            sgn = np.sign(alphas_pos[i] - alphas_neg[i])
            self.b += y[i] - sgn * self.epsilon - self.w.dot(X[i])
        self.b /= support_vectors.sum()

    def predict(self, X):
        return np.dot(X, self.w) + self.b


# 生成一些示例数据
np.random.seed(42)
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(X).ravel() + np.random.randn(80) * 0.1

# 创建SVR模型并拟合数据
svr = SVR(C=1.0, epsilon=0.1)
svr.fit(X, y)

# 生成用于绘制预测曲线的点
X_test = np.linspace(0, 5, 200)[:, np.newaxis]
y_pred = svr.predict(X_test)

# 绘制原始数据点
plt.scatter(X, y, color='darkorange', label='Data')
# 绘制预测曲线
plt.plot(X_test, y_pred, color='navy', lw=2, label='SVR Prediction')
# 绘制 ε-不敏感带
plt.plot(X_test, y_pred + svr.epsilon, color='red', lw=1, linestyle='--', label='Upper Bound')
plt.plot(X_test, y_pred - svr.epsilon, color='green', lw=1, linestyle='--', label='Lower Bound')

plt.xlabel('X')
plt.ylabel('y')
plt.title('Support Vector Regression')
plt.legend()
plt.show()

运行结果:
在这里插入图片描述

python函数库实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVR

# 生成示例数据
np.random.seed(42)
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(X).ravel() + np.random.randn(80) * 0.1

# 创建不同核函数的SVR模型
svr_rbf = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=0.1)
svr_lin = SVR(kernel='linear', C=100, gamma='auto')
svr_poly = SVR(kernel='poly', C=100, gamma='auto', degree=3, epsilon=0.1, coef0=1)

# 训练模型
svr_rbf.fit(X, y)
svr_lin.fit(X, y)
svr_poly.fit(X, y)

# 生成用于预测的点
X_test = np.linspace(0, 5, 200)[:, np.newaxis]

# 进行预测
y_rbf = svr_rbf.predict(X_test)
y_lin = svr_lin.predict(X_test)
y_poly = svr_poly.predict(X_test)

# 可视化结果
plt.figure(figsize=(12, 8))
plt.scatter(X, y, color='darkorange', label='Data')
plt.plot(X_test, y_rbf, color='navy', lw=2, label='RBF model')
plt.plot(X_test, y_lin, color='c', lw=2, label='Linear model')
plt.plot(X_test, y_poly, color='cornflowerblue', lw=2, label='Polynomial model')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Support Vector Regression')
plt.legend()
plt.show()

运行结果:
在这里插入图片描述

scikit-learn库中,svr_rbf.fit(X, y)svr_lin.fit(X, y)svr_poly.fit(X, y) 这三行代码分别用于训练使用径向基核(RBF)、线性核和多项式核的支持向量回归(SVR)模型。下面结合数学公式详细讲解其含义。

不同核函数下的具体含义

线性核(svr_lin.fit(X, y)

当使用线性核时, f ( x ) = w T x + b f(x) = w^T x + b f(x)=wTx+b,优化问题就是在输入特征空间中寻找一个最优的超平面来拟合数据。在 fit 方法调用时,模型会求解上述优化问题以确定 w w w b b b 的最优值。

在求解过程中,通常会将原问题转化为对偶问题:
max ⁡ α , α ∗ − 1 2 ∑ i = 1 n ∑ j = 1 n ( α i − α i ∗ ) ( α j − α j ∗ ) x i T x j − ϵ ∑ i = 1 n ( α i + α i ∗ ) + ∑ i = 1 n y i ( α i − α i ∗ ) \max_{\alpha,\alpha^*} -\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} (\alpha_i - \alpha_i^*) (\alpha_j - \alpha_j^*) x_i^T x_j - \epsilon \sum_{i=1}^{n} (\alpha_i + \alpha_i^*) + \sum_{i=1}^{n} y_i (\alpha_i - \alpha_i^*) α,αmax21i=1nj=1n(αiαi)(αjαj)xiTxjϵi=1n(αi+αi)+i=1nyi(αiαi)
s.t. { ∑ i = 1 n ( α i − α i ∗ ) = 0 0 ≤ α i , α i ∗ ≤ C \text{s.t.} \begin{cases} \sum_{i=1}^{n} (\alpha_i - \alpha_i^*) = 0 \\ 0 \leq \alpha_i, \alpha_i^* \leq C \end{cases} s.t.{i=1n(αiαi)=00αi,αiC
其中 α i \alpha_i αi α i ∗ \alpha_i^* αi 是拉格朗日乘子。求解对偶问题得到最优的拉格朗日乘子后,就可以计算出 w = ∑ i = 1 n ( α i − α i ∗ ) x i w = \sum_{i=1}^{n} (\alpha_i - \alpha_i^*) x_i w=i=1n(αiαi)xi,再通过满足 Karush - Kuhn - Tucker(KKT)条件的样本计算出 b b b

径向基核(RBF)(svr_rbf.fit(X, y)

径向基核函数的表达式为 K ( x i , x j ) = exp ⁡ ( − γ ∥ x i − x j ∥ 2 ) K(x_i, x_j) = \exp(-\gamma \| x_i - x_j \|^2) K(xi,xj)=exp(γxixj2),其中 γ \gamma γ 是核系数。

在使用径向基核时,模型会将输入数据映射到一个高维特征空间,在这个高维空间中进行线性回归。对偶问题变为:
max ⁡ α , α ∗ − 1 2 ∑ i = 1 n ∑ j = 1 n ( α i − α i ∗ ) ( α j − α j ∗ ) K ( x i , x j ) − ϵ ∑ i = 1 n ( α i + α i ∗ ) + ∑ i = 1 n y i ( α i − α i ∗ ) \max_{\alpha,\alpha^*} -\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} (\alpha_i - \alpha_i^*) (\alpha_j - \alpha_j^*) K(x_i, x_j) - \epsilon \sum_{i=1}^{n} (\alpha_i + \alpha_i^*) + \sum_{i=1}^{n} y_i (\alpha_i - \alpha_i^*) α,αmax21i=1nj=1n(αiαi)(αjαj)K(xi,xj)ϵi=1n(αi+αi)+i=1nyi(αiαi)
s.t. { ∑ i = 1 n ( α i − α i ∗ ) = 0 0 ≤ α i , α i ∗ ≤ C \text{s.t.} \begin{cases} \sum_{i=1}^{n} (\alpha_i - \alpha_i^*) = 0 \\ 0 \leq \alpha_i, \alpha_i^* \leq C \end{cases} s.t.{i=1n(αiαi)=00αi,αiC
svr_rbf.fit(X, y) 会求解上述对偶问题,得到最优的拉格朗日乘子,然后在预测时使用 f ( x ) = ∑ i = 1 n ( α i − α i ∗ ) K ( x i , x ) + b f(x) = \sum_{i=1}^{n} (\alpha_i - \alpha_i^*) K(x_i, x) + b f(x)=i=1n(αiαi)K(xi,x)+b 进行预测。

多项式核(svr_poly.fit(X, y)

多项式核函数的表达式为 K ( x i , x j ) = ( γ x i T x j + r ) d K(x_i, x_j) = (\gamma x_i^T x_j + r)^d K(xi,xj)=(γxiTxj+r)d,其中 γ \gamma γ 是核系数, r r r 是偏置项, d d d 是多项式的次数。

同样,在使用多项式核时,模型会将输入数据映射到高维特征空间并求解对偶问题:
max ⁡ α , α ∗ − 1 2 ∑ i = 1 n ∑ j = 1 n ( α i − α i ∗ ) ( α j − α j ∗ ) K ( x i , x j ) − ϵ ∑ i = 1 n ( α i + α i ∗ ) + ∑ i = 1 n y i ( α i − α i ∗ ) \max_{\alpha,\alpha^*} -\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} (\alpha_i - \alpha_i^*) (\alpha_j - \alpha_j^*) K(x_i, x_j) - \epsilon \sum_{i=1}^{n} (\alpha_i + \alpha_i^*) + \sum_{i=1}^{n} y_i (\alpha_i - \alpha_i^*) α,αmax21i=1nj=1n(αiαi)(αjαj)K(xi,xj)ϵi=1n(αi+αi)+i=1nyi(αiαi)
s.t. { ∑ i = 1 n ( α i − α i ∗ ) = 0 0 ≤ α i , α i ∗ ≤ C \text{s.t.} \begin{cases} \sum_{i=1}^{n} (\alpha_i - \alpha_i^*) = 0 \\ 0 \leq \alpha_i, \alpha_i^* \leq C \end{cases} s.t.{i=1n(αiαi)=00αi,αiC
svr_poly.fit(X, y) 会根据输入的训练数据 X X X 和目标值 y y y 求解这个对偶问题,确定最优的拉格朗日乘子,进而得到用于预测的函数 f ( x ) = ∑ i = 1 n ( α i − α i ∗ ) K ( x i , x ) + b f(x) = \sum_{i=1}^{n} (\alpha_i - \alpha_i^*) K(x_i, x) + b f(x)=i=1n(αiαi)K(xi,x)+b

fit 方法的本质是根据不同的核函数,求解对应的优化问题,以确定模型的参数,从而使得模型能够对输入数据进行有效的拟合和预测。

;