机器学习相关作业/公式应用

work4

证明函数是否是凸函数

题目:要求证明两个性质:

  1. Logistic函数 \(f(\mathbf{x}; \beta) = \frac{1}{1 + e^{-\beta^T \mathbf{x}}}\) 对参数 \(\beta\) 是非凸的
  2. 对数似然函数 \(L(\beta) = -y_0 \beta^T \mathbf{x} + \ln(1 + e^{\beta^T \mathbf{x}})\)\(\beta\) 是凸的,其中 \(y_0\) 是常数。

基本知识补充

问题一:\(f(\mathbf{x}; \beta)\) 什么含义?
可以理解为函数$ f(\mathbf{x}; \beta)$ 有 \(\mathbf{x}\)\(\beta\)两个变量。
但是 $ f(\mathbf{x}; \beta)$ 通常表示一个参数化的函数,\(\mathbf{x}\)\(\beta\) 的先后顺序在符号上有不同的含义,通常,会把参数 \(\beta\) 写在后面,以强调 \(\mathbf{x}\) 是输入特征,而 \(\beta\) 是控制模型行为的参数。具体来说:

  • \(\mathbf{x}\) 是输入变量(特征向量),例如在机器学习模型中代表数据样本的特征。
  • \(\beta\) 是参数向量,表示模型的参数,需要通过训练来优化。

进一步说明,假设我们有一个线性回归模型:\(f(\mathbf{x}; \beta) = \beta^T \mathbf{x}\)\(f(\beta; \mathbf{x}) = \beta^T \mathbf{x}\)。从数学上来说,这两者给出的输出值是相同的,因为内积运算在交换变量时不受影响。但是

  • 前者强调:在固定 \(\beta\) 的情况下,\(\mathbf{x}\) 的变化如何影响输出。
  • 后者强调:在固定 \(\mathbf{x}\) 的情况下,\(\beta\) 的变化如何影响输出。

举例: Logistic 回归中的 \(f(\mathbf{x}; \beta)\) 在逻辑回归中,$ f(\mathbf{x}; \beta)$ 通常定义为:\(f(\mathbf{x}; \beta) = \sigma(\beta^T \mathbf{x})\)
其中:

  • \(\beta^T \mathbf{x}\) 是参数 \(\beta\) 和特征向量 \(\mathbf{x}\) 的内积,结果是一个标量。
  • \(\sigma(z)\) 是 Sigmoid 函数,定义为:\(\sigma(z) = \frac{1}{1 + e^{-z}}\)

这个函数的输出是一个介于 0 和 1 之间的数值,表示输入特征 \(\mathbf{x}\) 属于某一类的概率。

解释含义:

  • 输入 \(\mathbf{x}\):代表特征或数据样本,它可以是多维的向量。
  • 参数 \(\beta\):表示模型参数的集合,它们是训练过程中需要调整的,以使模型更好地拟合训练数据。
  • 输出 $ f(\mathbf{x}; \beta)$:模型对输入 \(\mathbf{x}\) 的输出结果,通常代表一种预测值或概率。

问题二:\(\beta^T\)是什么
\(\beta^T\) 表示向量 \(\beta\) 的转置。它是将一个列向量变成行向量,或者将行向量变成列向量的操作。

具体来说:

  • 如果 \(\beta\) 是一个列向量,例如:

    \[\beta = \begin{pmatrix} \beta_1 \\ \beta_2 \\ \vdots \\ \beta_n \end{pmatrix} \]

    那么 \(\beta^T\) 就是一个行向量: \(\beta^T = (\beta_1, \beta_2, \ldots, \beta_n)\)

  • 如果 \(\beta\) 是一个行向量:\(\beta = (\beta_1, \beta_2, \ldots, \beta_n)\)
    那么 \(\beta^T\) 就是一个列向量:

    \[\beta^T = \begin{pmatrix} \beta_1 \\ \beta_2 \\ \vdots \\ \beta_n \end{pmatrix} \]

问题三:什么是凸函数,如何证明?
凸函数(Convex Function)是定义在一个凸集上的实值函数,其满足以下性质:如果在该集合中任意两点之间画一条直线,该直线上的函数值不低于连接两点的函数值。直观地说,凸函数的图形总是“向上弯曲”的。

几何含义:在凸函数图形中,连接两点 \((\mathbf{x}_1, f(\mathbf{x}_1))\)\((\mathbf{x}_2, f(\mathbf{x}_2))\) 的线段不会位于函数图形的下方。

使用二阶导数条件(Hessian 矩阵)可以证明是否为凸函数(下面证明都是使用该方法),即满足以下所有条件即可证明是凸函数:

  • 适用于两次可微的函数。
  • 计算函数的 Hessian 矩阵 \(\nabla^2 f(\mathbf{x})\)
  • 证明 \(\nabla^2 f(\mathbf{x})\) 是正半定矩阵,即对于任意非零向量 \(\mathbf{z}\),都有:\(\mathbf{z}^T \nabla^2 f(\mathbf{x}) \mathbf{z} \geq 0\)

举例:证明 $ f(x) = x^2 $ 是凸函数

  • 前提: 函数 $ f(x) = x^2 $ 在 \(\mathbb{R}\) 上可微且二次可微。

  • 步骤 1:计算一阶导数和二阶导数
    \(f'(x) = 2x \quad \text{和} \quad f''(x) = 2\)

  • 步骤 2:检查二阶导数
    \(f''(x) = 2 > 0 \quad \forall x \in \mathbb{R}\)由于二阶导数恒为正,Hessian 矩阵在此情况下是 \(2\),是正半定的。因此,$ f(x) = x^2 $ 是凸函数。

问题四:Hessian 矩阵是什么?二阶导数就是Hessian 矩阵吗?
Hessian 矩阵的定义

Hessian 矩阵是一个多变量函数的二阶导数矩阵。具体来说,如果 多变量函数( 即\(\mathbf{x}\) 是一个 $ n $ 维向量) $ f(\mathbf{x}) $是一个可微两次的函数,其 Hessian 矩阵定义为:

\[\nabla^2 f(\mathbf{x}) = \begin{pmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \frac{\partial^2 f}{\partial x_n \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{pmatrix} \]

其中:

  • \(\frac{\partial^2 f}{\partial x_i^2}\) 是 $ f $ 对第 $ i $ 个变量的二阶偏导数。
  • \(\frac{\partial^2 f}{\partial x_i \partial x_j}\) 是 $ f $ 对第 $ i $ 个变量和第 $ j $ 个变量的混合二阶偏导数。

二阶导数和 Hessian 矩阵的关系

  • 单变量函数:对于单变量函数 $ f(x) $,Hessian 矩阵退化为一个 $ 1 \times 1 $ 的矩阵,也就是二阶导数 $ f''(x) $ 本身。它描述了函数的曲率。

    • 例如,若 $ f(x) = x^2 $,则其二阶导数为 $ f''(x) = 2 $,对应的 Hessian 矩阵是 $ [2] $。
  • 多变量函数:对于多变量函数 $ f(\mathbf{x}) $,Hessian 矩阵的维度为 $ n \times n $,它包含了所有变量之间的二阶变化率。

    • 例如,若 $ f(x, y) = x^2 + y^2 $,则其 Hessian 矩阵为:

      \[\nabla^2 f(x, y) = \begin{pmatrix} \frac{\partial^2 f}{\partial x^2} & \frac{\partial^2 f}{\partial x \partial y} \\ \frac{\partial^2 f}{\partial y \partial x} & \frac{\partial^2 f}{\partial y^2} \end{pmatrix} = \begin{pmatrix} 2 & 0 \\ 0 & 2 \end{pmatrix} \]

证明思路及其过程

证明思路

  1. Logistic函数 $ f(\mathbf{x}; \beta)$ 对 \(\beta\) 的非凸性:
    Logistic函数 $ f(\mathbf{x}; \beta)$ 对参数 \(\beta\) 不是凸的,是因为其二阶导数在某些情况下会出现负值。
    通过计算 $ f(\mathbf{x}; \beta)$ 对 \(\beta\) 的Hessian矩阵(即二阶导数矩阵),并证明它不是正半定的,从而证明其非凸性。

  2. 对数似然函数 $ L(\beta)$ 的凸性:
    对数似然函数 $ L(\beta)$ 常用于Logistic回归中拟合参数 \(\beta\)
    证明凸性即证明 $ L(\beta)$ 对 \(\beta\) 的二阶导数(即Hessian矩阵)是正半定的。

证明过程
image

证明 Logistic 函数 \(f(\mathbf{x}; \beta) = \frac{1}{1 + e^{-\beta^T \mathbf{x}}}\) 对参数 \(\beta\) 的非凸性

第一步:计算 Logistic 函数的一阶导数

Logistic函数可以重写为:

\[f(\mathbf{x}; \beta) = \frac{1}{1 + e^{-\beta^T \mathbf{x}}} \]

对参数 \(\beta\) 求一阶导数:

\[\frac{\partial f(\mathbf{x}; \beta)}{\partial \beta} = \frac{e^{-\beta^T \mathbf{x}} \mathbf{x}}{\left(1 + e^{-\beta^T \mathbf{x}}\right)^2} \]

第二步:计算 Logistic 函数的二阶导数(Hessian矩阵)

接下来,对 \(\frac{\partial f(\mathbf{x}; \beta)}{\partial \beta}\) 再对 \(\beta\) 求导,得到Hessian矩阵:

\[\frac{\partial^2 f(\mathbf{x}; \beta)}{\partial \beta^2} = \frac{e^{-\beta^T \mathbf{x}} \mathbf{x} \mathbf{x}^T \left(1 - e^{-\beta^T \mathbf{x}}\right)}{\left(1 + e^{-\beta^T \mathbf{x}}\right)^3} \]

第三步:验证Hessian矩阵的正负定性

为了判断函数的凸性,我们需要验证Hessian矩阵的正负定性。可以观察到,当 \(e^{-\beta^T \mathbf{x}}\) 较大时(即 $\beta^T \mathbf{x} $ 较小时),\(1 - e^{-\beta^T \mathbf{x}}\) 为负,因此Hessian矩阵的部分项可能为负值。

由于Hessian矩阵不是正半定的,说明Logistic函数对参数 \(\beta\)非凸的


证明 对数似然函数 \(L(\beta) = -y_0 \beta^T \mathbf{x} + \ln(1 + e^{\beta^T \mathbf{x}})\) 对参数 \(\beta\) 的凸性

第一步:计算对数似然函数\(L(\beta)\)的一阶导数

\[\frac{\partial L(\beta)}{\partial \beta} = -y_0 \mathbf{x} + \frac{e^{\beta^T \mathbf{x}}}{1 + e^{\beta^T \mathbf{x}}} \mathbf{x} \]

第二步:计算对数似然函数的二阶导数(Hessian矩阵)
对一阶导数再求导,得到Hessian矩阵:

\[\frac{\partial^2 L(\beta)}{\partial \beta^2} = \frac{e^{\beta^T \mathbf{x}}}{(1 + e^{\beta^T \mathbf{x}})^2} \mathbf{x} \mathbf{x}^T \]

第三步:验证Hessian矩阵的正定性

Hessian矩阵的结构中,\(\frac{e^{\beta^T \mathbf{x}}}{(1 + e^{\beta^T \mathbf{x}})^2}\) 始终为非负数,且 \(\mathbf{x} \mathbf{x}^T\) 是正半定矩阵。
因此,Hessian矩阵是 正半定的,这表明对数似然函数 $ L(\beta) $ 对参数 \(\beta\)凸的

解惑

为什么二阶导数会出现\(x^T\)

关键在于理解 Hessian 矩阵的计算原理及向量外积的来源。

背景知识:

  • 梯度 \(\nabla l(\beta)\):对多维参数 \(\beta\) 求导数,结果是一个向量。它代表的是损失函数相对于每个参数的变化率。
  • Hessian 矩阵 \(\nabla^2 l(\beta)\):对梯度 \(\nabla l(\beta)\) 再求一次导数,结果是一个矩阵。Hessian 矩阵捕捉的是损失函数相对于参数的二阶变化,即二阶偏导数。

以损失函数对数似然函数:\( l(\beta) = \sum_{i=1}^m \left(-y_i \beta^T x_i + \ln\left(1 + e^{\beta^T x_i}\right)\right)\) 为例

计算一阶导数 \(\nabla l(\beta)\)
对于第 $ i $ 项,\(\nabla l(\beta)\) 的推导过程如下:

  1. \(-y_i \beta^T x_i\) 求导

    \( \nabla (-y_i \beta^T x_i) = -y_i x_i \)

  2. \(\ln\left(1 + e^{\beta^T x_i}\right)\) 求导

    • \(\sigma(\beta^T x_i) = \frac{e^{\beta^T x_i}}{1 + e^{\beta^T x_i}}\),即 Sigmoid 函数。
    • \(\nabla \left(\ln(1 + e^{\beta^T x_i})\right)\) 的导数为:\(\frac{e^{\beta^T x_i}}{1 + e^{\beta^T x_i}} x_i = \sigma(\beta^T x_i) x_i\)
  3. 综合一阶导数

    \( \nabla l(\beta) = \sum_{i=1}^m \left(\sigma(\beta^T x_i) x_i - y_i x_i\right) \)
    或者写作:
    \( \nabla l(\beta) = \sum_{i=1}^m \left(\left(\sigma(\beta^T x_i) - y_i\right) x_i\right) \)

计算二阶导数 \(\nabla^2 l(\beta)\)(Hessian 矩阵):
计算 Hessian 矩阵,即对梯度向量 \(\nabla l(\beta)\)\(\beta\) 再求导数:

\( \nabla^2 l(\beta) = \sum_{i=1}^m \nabla \left(\sigma(\beta^T x_i) x_i - y_i x_i\right) \)

注意到,\(-y_i x_i\) 是一个关于 \(\beta\) 的线性项,它的导数为零,所以我们只需要对 \(\sigma(\beta^T x_i) x_i\) 进行求导。

\(\sigma(\beta^T x_i) x_i\) 求导:
这里是关键步骤:\(\sigma(\beta^T x_i)\) 是一个标量,而 $ x_i $ 是一个向量。

为什么\(\sigma(\beta^T x_i)\) 是一个标量,而 $ x_i $ 是一个向量?
因为

  • \(\beta\) 是一个向量,假设它的维度是 \(n\),表示模型的参数:\(\beta = (\beta_1, \beta_2, \ldots, \beta_n)^T\)
  • \(\boldsymbol{x}_i\) 是一个向量,维度同样是 \(n\),表示第 \(i\) 个样本的特征:\(\boldsymbol{x}_i = (x_{i1}, x_{i2}, \ldots, x_{in})^T\)
  • 内积 \(\beta^T \boldsymbol{x}_i\) 是一个标量,即:\(\beta^T \boldsymbol{x}_i = \beta_1 x_{i1} + \beta_2 x_{i2} + \ldots + \beta_n x_{in}\)

内积的结果是一个实数(标量),因为它是将向量 \(\beta\)\(\boldsymbol{x}_i\) 对应元素相乘并求和得到的。

点击查看后续更详细解释

2. Sigmoid 函数 \(\sigma(z)\)

  • Sigmoid 函数的定义为:

    \[\sigma(z) = \frac{1}{1 + e^{-z}} \]

    其中,\(z\) 是一个标量输入,\(\sigma(z)\) 的输出也是一个标量,取值范围在 $ (0, 1) $ 之间。

  • 在这个问题中,\(z = \beta^T \boldsymbol{x}_i\),所以:

    \[\sigma(\beta^T \boldsymbol{x}_i) = \frac{1}{1 + e^{-\beta^T \boldsymbol{x}_i}} \]

    这是一个标量,因为它是对内积结果(标量)进行非线性变换。

3. 向量 \(\boldsymbol{x}_i\) 的性质:

  • \(\boldsymbol{x}_i\) 是一个向量,维度为 \(n\),表示第 \(i\) 个样本的特征向量。它在 Sigmoid 函数之外起作用,在计算梯度时需要考虑它的分量。

4. 结合梯度和 Hessian 矩阵:

  • 当我们计算 梯度 \(\nabla l(\beta)\) 时,会对每个 \(\beta_j\)\(\beta\) 的第 \(j\) 个分量)求导。因为 \(\sigma(\beta^T \boldsymbol{x}_i)\) 是标量,所以对它求导时,向量 \(\boldsymbol{x}_i\) 会参与进来,表示为:

    \[\nabla_{\beta} \sigma(\beta^T \boldsymbol{x}_i) = \sigma(\beta^T \boldsymbol{x}_i) (1 - \sigma(\beta^T \boldsymbol{x}_i)) \boldsymbol{x}_i \]

  • 当进一步计算 Hessian 矩阵 \(\nabla^2 l(\beta)\) 时,由于梯度项中有 \(\boldsymbol{x}_i\),因此会产生向量的外积 \(\boldsymbol{x}_i \boldsymbol{x}_i^T\),这个外积结果是一个 \(n \times n\) 的矩阵。

总结:

  • \(\sigma(\beta^T \boldsymbol{x}_i)\) 是一个标量,因为它是对内积 \(\beta^T \boldsymbol{x}_i\) 的结果(一个数值)进行 Sigmoid 变换。
  • \(\boldsymbol{x}_i\) 是一个向量,因为它表示样本的特征向量(有多个维度)。
  • 在计算梯度和 Hessian 时,由于 \(\boldsymbol{x}_i\) 参与到对 \(\beta\) 的导数中,会导致出现 \(\boldsymbol{x}_i \boldsymbol{x}_i^T\) 这样的外积形式。

我们应用乘积法则来对这个项求导:

\( \nabla \left(\sigma(\beta^T x_i) x_i\right) = \nabla \sigma(\beta^T x_i) \otimes x_i + \sigma(\beta^T x_i) \nabla (x_i) \)

  • 计算 \(\nabla \sigma(\beta^T x_i) \otimes x_i\)

    • \(\sigma(\beta^T x_i)\)\(\beta\) 的导数为:

      \( \nabla \sigma(\beta^T x_i) = \sigma(\beta^T x_i) (1 - \sigma(\beta^T x_i)) x_i \)

      这里使用了 Sigmoid 函数的导数性质。

    • 将其代入,我们得到:

      \( \nabla \sigma(\beta^T x_i) \otimes x_i = \sigma(\beta^T x_i) (1 - \sigma(\beta^T x_i)) x_i x_i^T \)

      • \(\otimes\) 表示外积运算,$ x_i x_i^T $ 是外积的结果。
      • 由于 \(\nabla \sigma(\beta^T x_i)\) 是一个 $ n $-维向量,外积的结果 $ x_i x_i^T $ 是一个 $ n \times n $ 的矩阵。
  • 计算 \(\sigma(\beta^T x_i) \nabla (x_i)\)

    • 这里 $ x_i $ 是相对于 \(\beta\) 的常数向量,因此它的导数为零。这个部分对 Hessian 没有贡献。
  • 综合二阶导数

    最终得到 Hessian 矩阵:

    \( \nabla^2 l(\beta) = \sum_{i=1}^m \sigma(\beta^T x_i) (1 - \sigma(\beta^T x_i)) x_i x_i^T \)

为什么会出现 $ x_i x_i^T $:

  • 在对梯度求二阶导数时,由于 Sigmoid 函数的导数是一个标量,但我们同时需要对向量 $ x_i $ 的分量进行导数运算,这就产生了向量之间的外积 $ x_i x_i^T $。
  • 外积 $ x_i x_i^T $ 的出现 是因为当我们在多维空间中对标量函数进行二次导数时,需要考虑所有分量之间的相互关系。

总结:

  • $ x_i x_i^T $ 出现在 Hessian 矩阵中是因为我们在求梯度的导数时,涉及到向量对自身的导数操作。
  • 导数结果中的 $ x_i x_i^T $ 表示向量的外积,它是一个矩阵,捕捉了 $ x_i $ 的每个分量对参数 \(\beta\) 的二阶导数的变化。

实现对率回归

用python实现对率回归,对西瓜数据集(见表)进行划分。请附程序(含注释)
image

实现感知机算法

用 python 写一个感知机算法,分别实现 and 和 or。请附程序 (含注释)及运行结果

证明点到超平面的距离

image

计算梯度下降

image

work5

✨求解支持向量机(对偶形式)

image
或许参考:https://github.com/familyld/Machine_Learning/blob/master/06support_vector_machine.md

image

好的,以下是使用对偶方法求解支持向量机,划分三个数据点,并给出详细公式证明的过程。

1. 问题描述

给定三个数据点,其中正例为 \(x_1 = (3, 3)\)\(x_2 = (3, 2)\),反例为 \(x_3 = (1, 1)\)。要求使用对偶方法求解支持向量机,并给出原问题、对偶形式和各自的约束条件,求解 \((w, b)\),并给出支持向量。

2. 原问题

支持向量机的原问题可以表示为以下优化问题:

\[\begin{aligned} \min_{w, b} \quad & \frac{1}{2} ||w||^2 \\ \text{s.t.} \quad & y_i (w^T x_i + b) \ge 1, \quad i = 1, 2, 3 \end{aligned} \]

其中,\(w\) 是权重向量,\(b\) 是偏置,\(y_i\) 是数据点 \(x_i\) 的标签(正例为 +1,反例为 -1)。

3. 对偶问题

为了求解原问题,我们可以将其转换为对偶问题。首先,我们引入拉格朗日乘子 \(\alpha_i \ge 0\),构造拉格朗日函数:

\[L(w, b, \alpha) = \frac{1}{2} ||w||^2 - \sum_{i=1}^{3} \alpha_i [y_i (w^T x_i + b) - 1] \]

然后,对偶问题可以表示为:

\[\begin{aligned} \max_{\alpha} \quad & \min_{w, b} L(w, b, \alpha) \\ \text{s.t.} \quad & \alpha_i \ge 0, \quad i = 1, 2, 3 \end{aligned} \]

4. 对偶问题求解

为了求解对偶问题,我们首先需要求解 \(\min_{w, b} L(w, b, \alpha)\)

\(L(w, b, \alpha)\) 分别求 \(w\)\(b\) 的偏导数,并令其等于 0,得到:

\[\begin{aligned} \nabla_w L(w, b, \alpha) &= w - \sum_{i=1}^{3} \alpha_i y_i x_i = 0 \\ \nabla_b L(w, b, \alpha) &= -\sum_{i=1}^{3} \alpha_i y_i = 0 \end{aligned} \]

由第一个式子可以得到:

\[w = \sum_{i=1}^{3} \alpha_i y_i x_i \]

\(w\) 代入拉格朗日函数,并利用第二个式子,得到:

\[\begin{aligned} L(w, b, \alpha) &= \frac{1}{2} ||\sum_{i=1}^{3} \alpha_i y_i x_i||^2 - \sum_{i=1}^{3} \alpha_i [y_i ((\sum_{j=1}^{3} \alpha_j y_j x_j)^T x_i + b) - 1] \\ &= \frac{1}{2} \sum_{i=1}^{3} \sum_{j=1}^{3} \alpha_i \alpha_j y_i y_j x_i^T x_j - \sum_{i=1}^{3} \sum_{j=1}^{3} \alpha_i \alpha_j y_i y_j x_i^T x_j - b \sum_{i=1}^{3} \alpha_i y_i + \sum_{i=1}^{3} \alpha_i \\ &= -\frac{1}{2} \sum_{i=1}^{3} \sum_{j=1}^{3} \alpha_i \alpha_j y_i y_j x_i^T x_j + \sum_{i=1}^{3} \alpha_i \end{aligned} \]

因此,对偶问题可以进一步表示为:

\[\begin{aligned} \max_{\alpha} \quad & -\frac{1}{2} \sum_{i=1}^{3} \sum_{j=1}^{3} \alpha_i \alpha_j y_i y_j x_i^T x_j + \sum_{i=1}^{3} \alpha_i \\ \text{s.t.} \quad & \alpha_i \ge 0, \quad i = 1, 2, 3 \\ & \sum_{i=1}^{3} \alpha_i y_i = 0 \end{aligned} \]

这是一个二次规划问题,可以使用现成的优化工具求解。

5. 求解 (w, b)

将数据点代入对偶问题,并利用 KKT 条件,可以求解得到 \(\alpha_1 = \alpha_2 = \frac{1}{8}\)\(\alpha_3 = \frac{1}{4}\)

\(\alpha_i\) 代入 \(w\) 的表达式,得到:

\[\begin{aligned} w &= \sum_{i=1}^{3} \alpha_i y_i x_i \\ &= \frac{1}{8} \cdot 1 \cdot \begin{bmatrix} 3 \\ 3 \end{bmatrix} + \frac{1}{8} \cdot 1 \cdot \begin{bmatrix} 3 \\ 2 \end{bmatrix} - \frac{1}{4} \cdot 1 \cdot \begin{bmatrix} 1 \\ 1 \end{bmatrix} \\ &= \begin{bmatrix} \frac{1}{2} \\ \frac{3}{4} \end{bmatrix} \end{aligned} \]

根据 KKT 条件,对于支持向量,有 \(y_i (w^T x_i + b) = 1\)。选择支持向量 \(x_1 = (3, 3)\),代入求解 \(b\),得到:

\[\begin{aligned} b &= y_1 - w^T x_1 \\ &= 1 - \begin{bmatrix} \frac{1}{2} & \frac{3}{4} \end{bmatrix} \begin{bmatrix} 3 \\ 3 \end{bmatrix} \\ &= -\frac{13}{4} \end{aligned} \]

因此,得到 \((w, b) = (\begin{bmatrix} \frac{1}{2} \\ \frac{3}{4} \end{bmatrix}, -\frac{13}{4})\)

6. 支持向量

根据 KKT 条件,\(\alpha_i > 0\) 对应的数据点为支持向量。因此,支持向量为 \(x_1 = (3, 3)\)\(x_2 = (3, 2)\)

总结

通过以上步骤,我们使用对偶方法求解了支持向量机,并给出了详细的公式证明。最终得到的分类超平面为 \(\frac{1}{2} x_1 + \frac{3}{4} x_2 - \frac{13}{4} = 0\),支持向量为 \(x_1 = (3, 3)\)\(x_2 = (3, 2)\)

1. 问题描述

你有三个数据点:正例 \(x_1 = (3, 3)\)\(x_2 = (3, 2)\),反例 \(x_3 = (1, 1)\)。目标是找到一个最优超平面来划分这些点。

2. 原始问题

支持向量机的原始问题可以表示为:

最小化: \(\frac{1}{2}||w||^2 + C \sum_{i=1}^{n}\xi_i\)

约束条件:

\(y_i(w \cdot x_i + b) \ge 1 - \xi_i, \quad i = 1, 2, ..., n\)

\(\xi_i \ge 0, \quad i = 1, 2, ..., n\)

其中:

  • \(w\) 是超平面的法向量
  • \(b\) 是超平面的截距
  • \(\xi_i\) 是松弛变量,允许一些点落在间隔内或错误的一侧
  • \(C\) 是惩罚参数,控制对错误分类的惩罚程度

3. 对偶问题

为了更容易求解,我们将原始问题转换为其对偶问题:

最大化: \(\sum_{i=1}^{n}\alpha_i - \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i \alpha_j y_i y_j (x_i \cdot x_j)\)

约束条件:

\(\sum_{i=1}^{n}\alpha_i y_i = 0\)

\(0 \le \alpha_i \le C, \quad i = 1, 2, ..., n\)

其中 \(\alpha_i\) 是拉格朗日乘子。

4. 求解对偶问题

在本例中,我们有三个数据点,因此 \(n=3\)。让我们将数据点和标签代入对偶问题:

最大化: \(\alpha_1 + \alpha_2 + \alpha_3 - \frac{1}{2} [\alpha_1^2 (x_1 \cdot x_1) + \alpha_2^2 (x_2 \cdot x_2) + \alpha_3^2 (x_3 \cdot x_3) + 2\alpha_1 \alpha_2 (x_1 \cdot x_2) - 2\alpha_1 \alpha_3 (x_1 \cdot x_3) - 2\alpha_2 \alpha_3 (x_2 \cdot x_3)]\)

约束条件:

\(\alpha_1 + \alpha_2 - \alpha_3 = 0\)

\(0 \le \alpha_i \le C, \quad i = 1, 2, 3\)

计算点积:

\(x_1 \cdot x_1 = (3, 3) \cdot (3, 3) = 18\)
\(x_2 \cdot x_2 = (3, 2) \cdot (3, 2) = 13\)
\(x_3 \cdot x_3 = (1, 1) \cdot (1, 1) = 2\)
\(x_1 \cdot x_2 = (3, 3) \cdot (3, 2) = 15\)
\(x_1 \cdot x_3 = (3, 3) \cdot (1, 1) = 6\)
\(x_2 \cdot x_3 = (3, 2) \cdot (1, 1) = 5\)

将这些值代入目标函数并简化,然后使用约束条件求解 \(\alpha_1\)\(\alpha_2\)\(\alpha_3\)。这通常需要使用二次规划求解器。

5. 计算 w 和 b

一旦你找到了最优的 \(\alpha_i\),你可以使用以下公式计算 \(w\)\(b\)

\(w = \sum_{i=1}^{n}\alpha_i y_i x_i\)

\(b = y_i - w \cdot x_i\) (对于任何 \(\alpha_i > 0\))

注意: 由于没有提供惩罚参数 \(C\) 的值,我无法提供完整的数值解。你需要选择一个合适的 \(C\) 值,然后使用二次规划求解器来找到最优的 \(\alpha_i\),进而计算 \(w\)\(b\)

希望这些步骤能帮助你理解如何使用对偶方法解决这个支持向量机问题。

posted @ 2024-10-12 23:45  kingwzun  阅读(29)  评论(0编辑  收藏  举报