当前位置: 首页 > news >正文

机器学习4

第3章 线性模型

3.1 线性模型的基本形式

3.1.1 线性模型的核心公式

线性模型通过属性的线性组合进行预测,其核心公式为:
[
f(x) = \omega_1 X_1 + \omega_2 X_2 + … + \omega_d X_d + b
]
其中:

  • ω 1 , ω 2 , . . . , ω d \omega_1, \omega_2, ..., \omega_d ω1,ω2,...,ωd:表示各个属性的权重,权重决定了每个属性在预测中的重要性。
  • X 1 , X 2 , . . . , X d X_1, X_2, ..., X_d X1,X2,...,Xd:表示输入的特征值。
  • b b b:偏置项,调整模型的整体偏移。
3.1.2 向量表示形式

上述公式可以简化为向量形式:
[
f(x) = \omega^T x + b
]

  • ω T \omega^T ωT 是权重向量的转置, x x x 是输入向量。这样可以更清晰地表示多个特征和权重之间的线性组合。
3.1.3 线性模型的优点
  1. 简单性:线性模型形式简单,易于理解和实现。
  2. 可解释性:由于每个权重 o m e g a i \\omega_i omegai 直观地表示了对应属性对预测的重要性,模型具有良好的可解释性。
示例:

假设我们要预测一个房屋的租金,房屋的面积和地段是两个重要因素。模型可以写为:
[
f(x) = 30 \cdot 面积 + 500 \cdot 地段 + 200
]
表示每增加一平方米面积,租金增加 30 元,而地段的评分每增加一分,租金增加 500 元。200 代表固定基础租金。


3.2 线性回归

3.2.1 线性回归的目标

线性回归模型的目标是通过最小化误差,拟合一个线性函数来预测连续输出变量。其核心公式为:
[
f(x) = \omega^T x + b
]
其中, ω \omega ω b b b 是模型需要学习的参数。

3.2.2 误差衡量标准——均方误差(MSE)

为了衡量模型预测值与真实值之间的误差,线性回归使用 均方误差(MSE)
[
E(\omega, b) = \frac{1}{2m} \sum_{i=1}^m (y_i - (\omega^T x_i + b))^2
]
其中:

  • y i y_i yi:第 i i i 个样本的真实输出值。
  • f ( x i ) = ω T x i + b f(x_i) = \omega^T x_i + b f(xi)=ωTxi+b:模型预测的输出值。
3.2.3 最小二乘法求解

通过最小化均方误差,线性回归利用 最小二乘法 来求解最优的 ω \omega ω b b b。其闭式解为:
[
\omega = (X^T X)^{-1} X^T y
]

  • X X X:输入数据矩阵。
  • y y y:输出结果向量。
3.2.4 线性回归的几何解释

线性回归可以通过几何角度理解为:它试图找到一条最佳的直线,使得所有样本点到直线的垂直距离平方和最小。

3.2.5 限制与扩展
  • 局限性:线性回归只能处理线性关系。对于复杂的非线性关系,需要使用多项式回归或其他非线性模型。
  • 扩展:通过添加非线性特征(如多项式),线性回归可以扩展为 多项式回归
示例:

假设我们有如下房屋数据:

  • 面积(平方米):50,70,90
  • 租金(元):2000,3000,4000

我们使用线性回归拟合数据,得到模型 f ( x ) = 50 ⋅ 面积 + 0 f(x) = 50 \cdot 面积 + 0 f(x)=50面积+0,表示每增加 1 平方米,租金增加 50 元。


3.3 对数几率回归

3.3.1 对数几率回归的用途

对数几率回归用于二分类问题。它基于线性模型的输出,并通过 Sigmoid 函数 将输出值转换为概率,适合分类任务。

3.3.2 Sigmoid 函数的公式

Sigmoid 函数的公式为:
[
y = \frac{1}{1 + e{-(\omegaT x + b)}}
]
该函数将线性回归的输出 z = ω T x + b z = \omega^T x + b z=ωTx+b 转换为 (0, 1) 之间的值,表示样本属于某一类别的概率。

3.3.3 目标函数——对数似然函数

为了学习模型参数 ω \omega ω b b b,对数几率回归使用 极大似然估计。其对数似然函数为:
[
L(\omega, b) = \sum_{i=1}^m \left( y_i \log(p_i) + (1 - y_i) \log(1 - p_i) \right)
]
其中, p i p_i pi 是第 i i i 个样本预测为正类的概率, y i y_i yi 是真实标记(0 或 1)。

3.3.4 对数几率回归的优势
  1. 概率输出:对数几率回归不仅可以输出类别预测,还可以输出样本属于某类的概率。
  2. 数学性质良好:Sigmoid 函数是凸函数,方便使用梯度下降法等数值优化方法求解。
3.3.5 对数几率回归的局限

对数几率回归假设样本线性可分,对于非线性分类问题,效果可能不好。可以通过引入核方法或者非线性特征变换来处理更复杂的分类问题。

示例:

我们预测一个人是否购买产品,收入和年龄作为输入特征,模型输出的概率是:
[
y = \frac{1}{1 + e^{-(2 \cdot 收入 + 3 \cdot 年龄 + 1)}}
]
对于收入 1000,年龄 30 的人,计算得到购买概率接近 1,表示该人很可能会购买该产品。


3.4 线性判别分析(LDA)的基本思想

LDA是一种常用于分类任务的降维方法,目的是找到一个线性投影,使得投影后不同类别的样本可以被最大限度地区分开。LDA通过最大化类间差异(类别的均值差异)和最小化类内差异(同类样本之间的散布)来完成这一目标。

LDA的核心步骤是:

  1. 计算类内散布矩阵 ( S_W )。
  2. 计算类间散布矩阵 ( S_B )。
  3. 找到一个投影向量 ( \mathbf{w} ),使得不同类别在投影后的类间差异最大,类内差异最小。
3.4.1 LDA的数学公式
3.4.1.1 类内散布矩阵 ( S_W )

类内散布矩阵 ( S_W ) 衡量同类样本的离散程度。它的定义为:

[
S_W = \sum_{i=1}^{C} \sum_{\mathbf{x}_j \in \mathbf{X}_i} (\mathbf{x}_j - \mathbf{\mu}_i)(\mathbf{x}_j - \mathbf{\mu}_i)^T
]

  • ( C ) 是类别的总数。
  • ( \mathbf{X}_i ) 是第 ( i ) 类的数据集,包含属于第 ( i ) 类的所有样本。
  • ( \mathbf{x}_j ) 是第 ( i ) 类中的第 ( j ) 个样本。
  • ( \mathbf{\mu}_i ) 是第 ( i ) 类的均值向量,表示该类样本的平均值。
  • ( (\mathbf{x}_j - \mathbf{\mu}_i) ) 表示每个样本 ( \mathbf{x}_j ) 与其类别均值之间的差异。
  • 矩阵 ( (\mathbf{x}_j - \mathbf{\mu}_i)(\mathbf{x}_j - \mathbf{\mu}_i)^T ) 是该差异向量的外积,衡量样本在不同维度上的离散性。
3.4.1.2 类间散布矩阵 ( S_B )

类间散布矩阵 ( S_B ) 衡量不同类别之间的离散程度。它的定义为:

[
S_B = \sum_{i=1}^{C} N_i (\mathbf{\mu}_i - \mathbf{\mu})(\mathbf{\mu}_i - \mathbf{\mu})^T
]

  • ( N_i ) 是第 ( i ) 类的样本数。
  • ( \mathbf{\mu}_i ) 是第 ( i ) 类的均值向量。
  • ( \mathbf{\mu} ) 是全局均值向量,即所有类别样本的总体均值。
  • ( (\mathbf{\mu}_i - \mathbf{\mu}) ) 表示每个类别的均值向量与全局均值的差异。

类间散布矩阵度量的是不同类别的均值向量之间的差异。

3.4.1.3 优化目标

LDA的目标是找到一个投影向量 ( \mathbf{w} ),使得投影后类间散布尽可能大,类内散布尽可能小。优化目标可以定义为:

[
J(\mathbf{w}) = \frac{\mathbf{w}^T S_B \mathbf{w}}{\mathbf{w}^T S_W \mathbf{w}}
]

  • ( J(\mathbf{w}) ) 是我们要最大化的目标函数,它表示投影后的类间散布和类内散布的比值。
  • ( \mathbf{w} ) 是投影向量,LDA要找的就是这个向量,使得投影效果最好。
  • ( \mathbf{w}^T S_B \mathbf{w} ) 是投影后类间散布的值。
  • ( \mathbf{w}^T S_W \mathbf{w} ) 是投影后类内散布的值。

通过最大化这个比值,我们可以找到最佳的投影方向。

3.4.2 数学计算示例

我们将通过一个简单的两类数据集来展示如何一步步计算LDA的主要公式。

3.4.2.1 示例数据集

假设我们有两个类别的数据集,类别1和类别2,每类有两个样本,数据如下:

  • 类别1的样本:( \mathbf{X}_1 = {[1, 2], [2, 3]} )
  • 类别2的样本:( \mathbf{X}_2 = {[4, 5], [5, 6]} )
3.4.2.2 计算类别均值

首先,计算每个类别的均值向量 ( \mathbf{\mu}_1 ) 和 ( \mathbf{\mu}_2 ):
[
\mathbf{\mu}_1 = \frac{1}{2}([1, 2] + [2, 3]) = [1.5, 2.5]
]
[
\mathbf{\mu}_2 = \frac{1}{2}([4, 5] + [5, 6]) = [4.5, 5.5]
]

全局均值向量 ( \mathbf{\mu} ) 是两个类别均值的平均:
[
\mathbf{\mu} = \frac{1}{4}([1, 2] + [2, 3] + [4, 5] + [5, 6]) = [3, 4]
]

3.4.2.3 计算类内散布矩阵 ( S_W )

我们接下来计算类内散布矩阵 ( S_W ),对于每一类,计算样本与均值的差异:

对于类别1:
[
S_{W1} = ([1, 2] - [1.5, 2.5])([1, 2] - [1.5, 2.5])^T + ([2, 3] - [1.5, 2.5])([2, 3] - [1.5, 2.5])^T
]
分别计算:
[
[1, 2] - [1.5, 2.5] = [-0.5, -0.5], \quad [2, 3] - [1.5, 2.5] = [0.5, 0.5]
]
外积:
[
[-0.5, -0.5]^T [-0.5, -0.5] = \begin{bmatrix} 0.25 & 0.25 \ 0.25 & 0.25 \end{bmatrix}, \quad [0.5, 0.5]^T [0.5, 0.5] = \begin{bmatrix} 0.25 & 0.25 \ 0.25 & 0.25 \end{bmatrix}
]
因此:
[
S_{W1} = \begin{bmatrix} 0.5 & 0.5 \ 0.5 & 0.5 \end{bmatrix}
]

对于类别2:
[
S_{W2} = ([4, 5] - [4.5, 5.5])([4, 5] - [4.5, 5.5])^T + ([5, 6] - [4.5, 5.5])([5, 6] - [4.5, 5.5])^T
]
计算得:
[
[4, 5] - [4.5, 5.5] = [-0.5, -0.5], \quad [5, 6] - [4.5, 5.5] = [0.5, 0.5]
]
外积:
[
[-0.5, -0.5]^T [-0.5, -0.5] = \begin{bmatrix} 0.25 & 0.25 \ 0.25 & 0.25 \end{bmatrix}, \quad [0.5, 0.5]^T [0.5, 0.5] = \begin{bmatrix} 0.25 & 0.25 \ 0.25 & 0.25 \end{bmatrix}
]
因此:
[
S_{W2} = \begin{bmatrix} 0.5 & 0.5 \ 0.5 & 0.5 \end{bmatrix}
]

总的类内散布矩阵 ( S_W ) 是每个类别类内散布矩阵的总和,即:
[
S_W = S_{W1} + S_{W2} = \begin{bmatrix} 0.5 & 0.5 \ 0.5 & 0.5 \end{bmatrix} + \begin{bmatrix} 0.5 & 0.5 \ 0.5 & 0.5 \end{bmatrix} = \begin{bmatrix} 1 & 1 \ 1 & 1 \end{bmatrix}
]

3.4.2.4 计算类间散布矩阵 ( S_B )

接下来我们计算类间散布矩阵 ( S_B )。类间散布矩阵是每个类别的均值向量与全局均值向量之间的差异的加权和。根据公式:

[
S_B = \sum_{i=1}^{C} N_i (\mathbf{\mu}_i - \mathbf{\mu})(\mathbf{\mu}_i - \mathbf{\mu})^T
]

我们先计算每个类别的均值与全局均值的差异:

对于类别1:
[
\mathbf{\mu}_1 - \mathbf{\mu} = [1.5, 2.5] - [3, 4] = [-1.5, -1.5]
]
外积:
[
[-1.5, -1.5]^T [-1.5, -1.5] = \begin{bmatrix} 2.25 & 2.25 \ 2.25 & 2.25 \end{bmatrix}
]

对于类别2:
[
\mathbf{\mu}_2 - \mathbf{\mu} = [4.5, 5.5] - [3, 4] = [1.5, 1.5]
]
外积:
[
[1.5, 1.5]^T [1.5, 1.5] = \begin{bmatrix} 2.25 & 2.25 \ 2.25 & 2.25 \end{bmatrix}
]

现在加权这些外积矩阵:
[
S_B = N_1 \begin{bmatrix} 2.25 & 2.25 \ 2.25 & 2.25 \end{bmatrix} + N_2 \begin{bmatrix} 2.25 & 2.25 \ 2.25 & 2.25 \end{bmatrix}
]

假设每个类别的样本数量 ( N_1 = N_2 = 2 ),则:

[
S_B = 2 \begin{bmatrix} 2.25 & 2.25 \ 2.25 & 2.25 \end{bmatrix} + 2 \begin{bmatrix} 2.25 & 2.25 \ 2.25 & 2.25 \end{bmatrix} = \begin{bmatrix} 9 & 9 \ 9 & 9 \end{bmatrix}
]

3.4.2.5 优化目标

现在我们已经有了类内散布矩阵 ( S_W ) 和类间散布矩阵 ( S_B )。接下来,我们需要找到一个投影向量 ( \mathbf{w} ),使得投影后的类间散布和类内散布的比值 ( J(\mathbf{w}) ) 最大。

[
J(\mathbf{w}) = \frac{\mathbf{w}^T S_B \mathbf{w}}{\mathbf{w}^T S_W \mathbf{w}}
]

我们需要最大化这个比值。通过求解广义特征值问题 ( S_W^{-1} S_B \mathbf{w} = \lambda \mathbf{w} ),可以找到最优的投影向量 ( \mathbf{w} )。

具体而言,我们通过求解 ( S_W^{-1} S_B ) 的特征向量来获得最优的投影方向。


3.5 不平衡数据集

3.5.1 过采样(Oversampling)

过采样是指在数据集不平衡的情况下,增加少数类别的样本数量,以平衡各类别的样本数量。这样可以防止模型偏向于预测多数类别。

举例:

假设我们有一个二分类问题,分类结果是“猫”和“狗”。假设原始数据集中的“猫”样本有100个,而“狗”样本只有10个。这是一个不平衡数据集,模型可能会更偏向预测“猫”,因为“猫”的样本多。

为了平衡数据集,过采样的方法是通过复制或生成新的“狗”样本,将“狗”的样本数量增加到与“猫”相等(比如也变为100个)。

一种常见的过采样方法是SMOTE(Synthetic Minority Over-sampling Technique),它通过生成新样本而不是简单复制样本来扩充少数类别。

3.5.2 欠采样(Undersampling)

欠采样则是通过减少多数类别的样本数量来平衡数据集。这样可以防止多数类别主导模型,但也可能导致信息丢失。

举例:

假设还是上面的“猫”和“狗”的数据集,猫的样本有100个,狗的样本有10个。欠采样的方法是减少猫的样本数量,比如将猫的样本减少到10个,以匹配狗的样本数。这样可以让模型在训练时平等地看到每个类别的样本,但也意味着丢失了很多猫的样本信息。

3.5.3 阈值移动(Threshold Moving)

阈值移动是针对分类模型输出的概率进行调整的一种方法。分类模型(如逻辑回归、SVM)通常会输出一个概率值,默认情况下,我们根据这个概率是否大于0.5来决定分类结果。但在不平衡数据集中,少数类别的概率较低,直接使用0.5作为阈值可能导致少数类别的样本不易被分类为正确类别。因此,通过移动分类阈值来提高少数类别的检测率。

举例:

假设我们有一个模型来预测一个样本是否是“狗”。这个模型输出的概率是指这个样本被预测为“狗”的可能性。如果我们默认使用0.5作为阈值,那么模型会预测概率大于0.5的样本为“狗”,而其他样本为“猫”。但是,由于“狗”的样本数量较少,它们的预测概率通常较低。

为了增加“狗”的分类准确率,我们可以将阈值降低,比如从0.5调整为0.3。这样,即使模型的输出概率在0.3到0.5之间的样本,也会被预测为“狗”。这种方法有助于在不平衡数据中提高少数类别的预测效果。

3.5.4 示例总结

假设我们有一个不平衡的数据集,包含100只“猫”和10只“狗”。现在我们使用三种不同的方法来应对不平衡:

  • 过采样:我们生成90个新的“狗”样本,使得“狗”和“猫”样本的数量一样多,各有100个。
  • 欠采样:我们减少“猫”的样本数量,删掉90个“猫”,只保留10个“猫”样本,使得“猫”和“狗”样本数量一样多,各有10个。
  • 阈值移动:在训练完模型后,我们调整模型的阈值,将默认的0.5调整为0.3,以便在模型预测“狗”的概率时能更容易将样本归类为“狗”。
3.5.5 三种方法的优缺点
  • 过采样

    • 优点:保留了所有多数类别的样本,增加了少数类别的样本数量。
    • 缺点:可能导致模型过拟合,因为生成的少数类别样本并不真实。
  • 欠采样

    • 优点:减少了数据集大小,降低了训练时间。
    • 缺点:可能丢失多数类别的有用信息,导致模型无法充分学习。
  • 阈值移动

    • 优点:不改变原始数据集,仅通过调整分类决策来提高少数类别的预测性能。
    • 缺点:阈值的选择需要进行调整和验证,可能并不适用于所有问题。

附录

1. 最小二乘法简介

最小二乘法(Least Squares Method)是一种常用的回归方法,用于在线性模型中估计未知参数。其基本思想是通过最小化残差平方和来找到模型的最优参数。对于一组观测数据,最小二乘法的目标是让模型的预测值尽量接近真实值,即最小化以下残差平方和:

[
E(\hat{y}) = \sum_{i=1}^{m} (y_i - \hat{y}_i)^2
]
其中 ( y_i ) 是真实值,( \hat{y}_i ) 是预测值,( m ) 是样本数量。

为了使误差最小,最小二乘法通过对误差函数进行求导,并令导数为 0 来求解参数。

2. 多元线性回归模型

多元线性回归是线性回归的一种扩展形式,适用于具有多个自变量的情况。模型的目标是找到多个特征与目标变量之间的线性关系。其数学形式为:

[
y = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b
]
其中,( x_1, x_2, \dots, x_n ) 是输入特征,( w_1, w_2, \dots, w_n ) 是对应的权重参数,( b ) 是偏置项。

多元线性回归的核心是利用最小二乘法来最小化预测值与真实值之间的误差平方和,从而确定权重参数。

3. 最小二乘法的推导过程

在多元线性回归中,最小二乘法通过矩阵运算求解。假设我们有 ( m ) 个样本,每个样本有 ( n ) 个特征,可以将输入数据表示为矩阵 ( \mathbf{X} ):

[
\mathbf{X} =
\begin{pmatrix}
x_{11} & x_{12} & \dots & x_{1d} & 1 \
x_{21} & x_{22} & \dots & x_{2d} & 1 \
\vdots & \vdots & \ddots & \vdots & \vdots \
x_{m1} & x_{m2} & \dots & x_{md} & 1
\end{pmatrix}
]

矩阵 ( \mathbf{X} ) 的每一行对应一个样本的输入特征,其中最后一列为常数 1,用于表示偏置项。

目标是通过最小化以下误差平方和来求解权重向量 ( \hat{\mathbf{w}} ):

[
E(\hat{\mathbf{w}}) = (y - \mathbf{X} \hat{\mathbf{w}})^T (y - \mathbf{X} \hat{\mathbf{w}})
]

其中,( y ) 是目标变量向量,( \mathbf{X} \hat{\mathbf{w}} ) 是预测值向量。

对误差函数 ( E(\hat{\mathbf{w}}) ) 关于 ( \hat{\mathbf{w}} ) 求导,并令导数为 0,可以得到以下方程:

[
\frac{\partial E(\hat{\mathbf{w}})}{\partial \hat{\mathbf{w}}} = 2 \mathbf{X}^T (\mathbf{X} \hat{\mathbf{w}} - y) = 0
]

解这个方程,我们可以得到最优的权重向量:

[
\mathbf{X}^T \mathbf{X} \hat{\mathbf{w}} = \mathbf{X}^T y
]

假设 ( \mathbf{X}^T \mathbf{X} ) 是一个可逆矩阵,则可以求解出解析解:

[
\hat{\mathbf{w}} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T y
]

该公式是最小二乘法的核心,通过矩阵运算求得模型的最优参数。

4. 对数几率函数及广义线性模型

当我们面对非线性问题时,线性回归的假设可能无法成立。此时,我们可以引入映射函数,将非线性问题转化为线性问题。广义线性模型(GLM)正是利用这一思想,将线性回归扩展到非线性问题。

广义线性模型包括以下部分:

  1. 线性预测器:即 ( \eta = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b ),这部分仍然是特征的线性组合。
  2. 链接函数:通过映射函数将预测值从线性空间映射到目标空间。例如,逻辑回归中的**对数几率函数(Logit Function)**是典型的链接函数:
    [
    \log \left( \frac{\mu}{1 - \mu} \right) = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b
    ]
    其中,( \mu ) 是事件发生的概率,( \eta ) 是线性预测器。对数几率函数可以将线性预测值映射到 ( (0, 1) ) 的概率空间。

对数几率函数的反函数就是Sigmoid 函数,其形式为:

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

Sigmoid 函数是广义线性模型中的标准工具之一,用于将线性预测器的结果转化为概率值,特别适合二分类问题。

5. 对数似然与数值稳定性

在处理逻辑回归等问题时,模型的目标是最大化数据的似然函数,即观测数据在给定模型参数下的可能性。似然函数通常表示为多个概率的乘积

[
L(\theta) = P(x_1|\theta) \cdot P(x_2|\theta) \cdot \dots \cdot P(x_n|\theta)
]

然而,当样本量较大时,这种累乘很容易导致数值溢出问题。为了避免这种情况,我们通常取似然函数的对数,得到对数似然函数

[
\log L(\theta) = \log P(x_1|\theta) + \log P(x_2|\theta) + \dots + \log P(x_n|\theta)
]

通过对数变换,累乘操作被转换为累加操作,这有效防止了数值溢出,同时简化了计算。

6. 距离度量方法

在分类任务中,距离度量是衡量样本相似性的重要工具,尤其在k-NN(k最近邻)等基于距离的算法中起着至关重要的作用。以下是几种常见的距离度量方法。

6.1 欧式距离(Euclidean Distance)

欧式距离是最常见的距离度量方法,适用于连续数值数据。它表示两点之间的直线距离。在二维平面上,给定两个点 ( \mathbf{x}_1 = (x_1, y_1) ) 和 ( \mathbf{x}2 = (x_2, y_2) ),它们的欧式距离计算公式为:
[
d
{\text{Euclidean}}(\mathbf{x}_1, \mathbf{x}_2) = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}
]

在高维空间中,欧式距离的计算公式为:
[
d_{\text{Euclidean}}(\mathbf{x}1, \mathbf{x}2) = \sqrt{\sum{i=1}^{n} (x{1i} - x_{2i})^2}
]
其中 ( n ) 是维度数,( x_{1i} ) 和 ( x_{2i} ) 分别是两个向量在第 ( i ) 维的值。

欧式距离常用于度量样本之间的几何距离,适合连续值变量的距离度量。

6.2 曼哈顿距离(Manhattan Distance)

曼哈顿距离(也称为城市街区距离)是另一种常见的距离度量,它表示两个点之间的绝对坐标差的总和。给定两个点 ( \mathbf{x}_1 = (x_1, y_1) ) 和 ( \mathbf{x}2 = (x_2, y_2) ),其曼哈顿距离计算公式为:
[
d
{\text{Manhattan}}(\mathbf{x}_1, \mathbf{x}_2) = |x_1 - x_2| + |y_1 - y_2|
]

在高维空间中,曼哈顿距离的公式为:
[
d_{\text{Manhattan}}(\mathbf{x}1, \mathbf{x}2) = \sum{i=1}^{n} |x{1i} - x_{2i}|
]

曼哈顿距离在某些情况下比欧式距离更合适,特别是当数据是稀疏的,或当不同维度上的尺度不相同时。

6.3 海明距离(Hamming Distance)

海明距离用于度量两个二进制向量或字符串之间不同字符的位置个数。换句话说,它衡量两个向量在对应位置上不同的个数。

给定两个向量 ( \mathbf{x}1 ) 和 ( \mathbf{x}2 ),它们的海明距离计算公式为:
[
d
{\text{Hamming}}(\mathbf{x}1, \mathbf{x}2) = \sum{i=1}^{n} I(x{1i} \neq x
{2i})
]
其中,( I(x_{1i} \neq x_{2i}) ) 是一个指示函数,当 ( x_{1i} \neq x_{2i} ) 时,它的值为1;否则为0。

海明距离特别适合处理二值数据,比如用于比较两个二进制向量或字符串的相似度。在文本分析、基因序列分析等领域,海明距离常被用来度量不同类别之间的差异。

6.4 切比雪夫距离(Chebyshev Distance)

切比雪夫距离也称为“最大距离”,它是两个向量对应维度的最大差值。给定两个向量 ( \mathbf{x}1 ) 和 ( \mathbf{x}2 ),切比雪夫距离定义为:
[
d
{\text{Chebyshev}}(\mathbf{x}1, \mathbf{x}2) = \max{i} |x{1i} - x
{2i}|
]

切比雪夫距离衡量的是坐标差的最大值,适合在需要考察最大差异的场景下使用。

相关文章:

机器学习4

第3章 线性模型 3.1 线性模型的基本形式 3.1.1 线性模型的核心公式 线性模型通过属性的线性组合进行预测,其核心公式为: [ f(x) \omega_1 X_1 \omega_2 X_2 … \omega_d X_d b ] 其中: ω 1 , ω 2 , . . . , ω d \omega_1, \omega_…...

Python数值计算(33)——simpson 3/8积分公式

1. 背景知识 既然前的Simpson可以通过使用三个点构造二次曲线近似积分,那么,如果点数增加到了4个,然后不就可以构造三次多项式的曲线,实现对目标值的积分吗? 如果采用和上一节介绍的同样的方法,我们可以推…...

<项目代码>YOLOv8路面垃圾识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…...

Java中的注解(白金版)

Spring中常用注解 Springboot中@Validated注解的使用 Swagger中常用注解 @Validate...

actor模型

Actor模型(Actor Model)是一种用于并发计算的数学模型和编程概念,它最早由计算机科学家 Carl Hewitt 等人提出,用于简化对多线程或并发系统的设计和实现。Actor模型在并发编程、分布式系统、消息传递系统等领域具有广泛应用。 核…...

合约门合同全生命周期管理系统:企业智能合同管理的新时代

合约门合同全生命周期管理系统:企业智能合同管理的新时代 1. 引言 随着现代企业的快速发展,合同管理的复杂性日益增加。无论是采购合同、销售合同还是合作协议,合同管理已成为企业运营中至关重要的一环。传统的手工合同管理方式往往效率低下…...

vscode如何debug环境配置?torchrun与deepspeed库又该如何配置?

文章目录 前言一、vscode命令参数传递1、验证参数py文件2、第一种vscode调用方法(launch.json配置)3、第二种vscode调用方法(launch.json配置)二、deepspeed运行py文件代码(deepspeed_test.py)三、deepspeed命令调用(无法debug)四、deepspeed使用vscode进行调试(能debug)五、vs…...

Qt元对象系统 —— 信号与槽

信号与槽讨论的是Qt对象之间的连接与交互。我们就是使用这种方式实现了一个简单的异步调用。换而言之,信号与槽让我们可以不必考虑复杂的调用。只需要当我们需要在程序中表达:“希望在程序中通知一个事件而且按照我们设定的方式给出回应”的时候&#xf…...

单细胞配色效果模拟器 | 简陋版(已有颜色数组)

目的:假设你有一组颜色了,怎么模拟查看它们在单细胞DimPlot中的美学效果呢?要足够快,还要尽可能有模拟效果。 1. 尝试1: 随机矩阵,真的UMAP降维后绘图(失败) 造一个随机矩阵,使用S…...

面向对象编程中类与类之间的关系(一)

目录 1.引言 2."有一个"关系 3."是一个"关系(继承) 4.“有一个”与“是一个”的区别 5.not-a关系 6.层次结构 7.多重继承 8.混入类 1.引言 作为程序员,必然会遇到这样的情况:不同的类具有共同的特征,至少看起来彼…...

streamlit 实现 flink SQL运行界面

实现效果 streamlit flink-playground.py 文件如下: import streamlit as st import io import contextlib import sys import os import uuid import subprocess from jinja2 import Templatest.set_page_config(layout"wide")# 设置页面标题 st.title…...

鲸鱼优化算法(Whale Optimization Algorithm, WOA)原理与MATLAB例程

鲸鱼优化算法(Whale Optimization Algorithm, WOA)是一种基于鲸鱼捕食行为的智能优化算法。它模拟了座头鲸在狩猎时的“气泡网”捕食策略。 文章目录 1.适应度函数2. 更新公式2.1 突袭行为2.2 螺旋更新3.线性递减参数4. 边界处理 MATLAB 实现示例代码说明…...

MFC七段码显示实例

在MFC中添加iSenvenSegmentAnalogX控件,添加编辑框和按钮实现在编辑框中输入数字点击按钮后数字用七段码显示 1、在对话框中点击右键如下图添加控件和变量 2、在sevenDlg.h中添加代码 public: void ShowInd(int,double);3、在sevenDlg.cpp中添加代码 void CSe…...

【日常知识点】到底推不推荐用JWT?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 中级 🙉八股文专题:剑指大厂,手撕 J…...

网络编程项目之FTP服务器

项目介绍 模拟FTP核心原理:客户端连接服务器后,向服务器发送一个文件。文件名可以通过参数指定,服务器端接收客户端传来的文件(文件名随意),如果文件不存在自动创建文件,如果文件存在&#xff0…...

SpringBoot02:第一个springboot程序

3、第一个springboot程序 3.1、准备工作 我们将学习如何快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。 我的环境准备: java version "…...

快速入门HTML

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 目录 第一个html文件 标签 h1~h6 p >段落标签 br > 换行标签 img >图片标签 a >超链接标签 表格标签 表单标签 表单控件 form表单 ⽆语义标签:div&span 综…...

RabbitMQ是一个开源的消息代理和队列服务器

RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol,高级消息队列协议)协议实现,同时也支持其他消息协议如STOMP、MQTT等。作为一个可靠的消息传递服务,RabbitMQ在分…...

经典算法思想--并查集

前言 (最近在学习Java,所有函数都是用Java语言来书写的)前言部分是一些前提储备知识 在并查集(Union-Find)数据结构中,rank(中文称为“秩”)是用来表示树的高度或深度的一种辅助信息…...

挑战Java面试题复习第2天,百折不挠

挑战第 2 天 ArrayList和linkedList的区别HashMap和HashTable的区别Collection 与 Collections 的区别Java的四种引用泛型常用特点 ArrayList和linkedList的区别 底层数据结构: ArrayList:基于动态数组实现,支持快速随机访问。LinkedList&a…...

【vue之道】

vue之道 1. 一生二,二生万物思想2. 变化之律3. 变化之实在哪?4.而后学于形乃已!4.1 展示之形变4.2 动之气谓之指令4.3 血之养分的载体,于vue之绑定载具4.4 vue之道(万法规一篇) 1. 一生二,二生万…...

基于麻雀优化算法SSA的CEEMDAN-BiLSTM-Attention的预测模型

往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享! EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现(一)EMD-CSDN博客 EMD、EEM…...

Linux:指令再认识

文章目录 前言一、知识点1. Linux下一切皆文件,也就是说显示器也是一种文件2. 指令是什么?3. ll 与 ls -l4. 日志5. 管道6. 时间戳 二、基本指令1. man指令2. cp指令3. mv指令4. 查看文件1)cat/tac指令——看小文件2)more/less指令…...

PHP如何抛出和接收错误

在PHP中,抛出和接收错误通常涉及异常处理机制,以及错误和异常的处理函数。以下是如何在PHP中抛出和接收错误的详细指南: 抛出错误(异常) 在PHP中,你可以使用throw关键字来抛出一个异常。这通常在你检测到…...

计算机网络:网络层 —— IPv4 地址的应用规划

文章目录 IPv4地址的应用规划定长的子网掩码变长的子网掩码 IPv4地址的应用规划 IPv4地址的应用规划是指将给定的 IPv4地址块 (或分类网络)划分成若干个更小的地址块(或子网),并将这些地址块(或子网)分配给互联网中的不同网络,进而可以给各网络中的主机…...

Mongodb命令大全

Mongodb命令大全 一、数据库相关命令二、集合相关命令三、文档(数据)相关命令1、_id 字段说明2、查询2.1、 查询操作符2.2、内嵌文档查询2.3、数组文档查询2.4、去重查询2.5、查询排序 sort2.6、分页查询2.7、指定列投影查询返回2.8、查询统计个数 count 3、聚合查询3.1、查询用…...

宇视设备视频平台EasyCVR视频融合平台果园/鱼塘/养殖场/菜园有电没网视频监控方案

在那些有电无网的偏远地区,如果园、鱼塘、养殖场或菜园,视频监控的实现面临着独特的挑战。宇视设备视频平台EasyCVR提供了一种创新的解决方案,通过结合太阳能供电和4G摄像头技术,有效地解决了这些场景下的监控需求。 在有电没网的…...

面试题:ABCD四个线程,A线程最后执行

我觉得是一个很高频的面试题,ABCD四个线程,A线程要等到BCD线程执行完再执行,怎么做 因为我刚复习完AQS,所以立马想到了CountDownLatch,但是看面试官反应他最想听到的应该是join方法,所以面试后就总结了几种…...

代码随想录算法训练营第46期Day43

leetcode.322零钱兑换 class Solution { public: //无限个硬币->完全背包int coinChange(vector<int>& coins, int amount) {vector<int> dp(10010,INT_MAX);//dp代表的在某个数值下最小的硬币数&#xff0c;要求是最小的硬币数&#xff0c;所以初始值要尽可…...

前端处理API接口故障:多接口自动切换的实现方案

因为在开发APP&#xff0c;一个接口如果不通&#xff08;被挂了&#xff09;又不能改了重新打包让用户再下载软件更新&#xff0c;所以避免这种情况&#xff0c;跟后端讨论多备用接口地址自动切换的方案&#xff0c;自动切换到备用的接口地址&#xff0c;并保证后续所有的请求都…...

行业资讯平台网站建设/新公司怎么做网络推广

前言这个分类中&#xff0c;将会写写Java中的集合。集合是Java中非常重要而且基础的内容&#xff0c;因为任何数据必不可少的就是该数据是如何存储的&#xff0c;集合的作用就是以一定的方式组织、存储数据。这里写的集合&#xff0c;一部分是比较常见的、一部分是不常用但是我…...

不用js做网站/广州网站优化服务商

基本数据类型的包装类java.lang.Integer是我们频繁使用的一个系统类&#xff0c;那么通过一个示例反应出的几个问题来深入理解一下此类的源码。需求&#xff1a;实现Integer类型的两个数值交换。1 packagecn.integer;23 public classDemo {4 public static voidmain(String[] a…...

成品网站安装/最近新闻大事

SPI是一种总线协议。 总线&#xff0c;一个主设配&#xff08;FPGA&#xff09;只用三四个引脚和n个从设备进行通信。 例如FPGA通过SPI配置SI4133频综模块。 spi是一种通信协议。但是有时候我们看到对spi进行配置&#xff0c;配置什么时钟极性&#xff08;cpol&#xff09;时钟…...

wordpress 安装 php/网络销售推广是做什么的具体

[阿里聚安全出品]史上最全Android 开发和安全系列工具 作者 菜刀文 关注 2017.02.20 00:08 字数 4554 阅读 725评论 1喜欢 29作者:阿里聚安全 地址:https://zhuanlan.zhihu.com/p/25261296 动态分析工具 Android Hooker - 此项目提供了各种工具和应用程序&#xff0c;可用于自动…...

重庆网站制作武汉/权重查询

数据库操作现在我们创建了模型&#xff0c;生成了数据库和表&#xff0c;下面来学习常用的数据库操作&#xff0c;数据库操作主要是CRUD&#xff0c;即Create(创建)、Read(读取/查询)、Update(更新)和Delete(删除)。SQLAlchemy使用数据库会话来管理数据库操作&#xff0c;这里的…...

大连做网站的网络公司/seo哪个软件好

一、安装Java SE JKD A、下载 http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteIdocomen 选择最新版本&#xff0c;当前最新版本 1.8.0 。下载 jdk-8u45-linux-x64.tar.gz 。 B、解压下载包&#xff0c;添加环境变量。 $ sudo vim ~/.bash…...