- 1.K-means算法逻辑?
- 2.K近邻算法逻辑?
- 3.什么是NeRF(Neural-Radiance-Fields)技术?
- 4.介绍一下自回归模型的概念
- 5.什么是K最近邻算法?
- 6.什么是朴素贝叶斯?
- 7.什么是决策树?
- 8.什么是支持向量机?
- 9.什么是逻辑回归?
- 10.介绍一下机器学习中的Nucleus采样原理
- 11.介绍一下机器学习中不同聚类算法的性能特点
- 12.介绍一下机器学习中的SVD(Singular Value Decomposition)技术
- 13.介绍一下机器学习中的聚类算法原理
- 14.介绍一下颜色量化算法的原理
- 15.介绍一下K-Means++算法的原理
- 16.优化聚类算法效果和性能的方法有哪些?
- 17.机器学习中如何计算颜色距离?
- 18.介绍一下机器学习中的朴素贝叶斯算法
- 19.介绍一下机器学习中不同模型融合方法的异同
K-means算法是一个实用的无监督聚类算法,其聚类逻辑依托欧式距离,当两个目标的距离越近,相似度越大。对于给定的样本集,按照样本之间的距离大小,将样本集划分为
K-means的主要算法步骤:
- 选择初始化的
$k$ 个样本作为初始聚类中心$D = { D_{1}, D_{2}, D_{3}, ..., D_{k} }$ 。 - 针对数据集中每个样本
$x_{i}$ ,计算它到$k$ 个聚类中心的距离并将其分到距离最小的聚类中心所对应的类中. - 针对每个类别
$D_{j}$ ,重新计算它的聚类中心$D_{j} = \frac{1}{|c_{j}|}\sum_{x\in c_{j}}x$ 。(即属于该类的所有样本的质心); - 重复上面2和3两步的操作,直到达到设定的中止条件(迭代次数、最小误差变化等)。
K-Means的主要优点:
- 原理简单,实现容易,收敛速度快。
- 聚类效果较优。
- 算法的可解释度比较强。
- 主要需要调参的参数仅仅是簇数k。
K-Means的主要缺点:
- K值需要人为设定,不好把握。
- 对初始的簇中心敏感,不同选取方式会得到不同结果。
- 对于不是凸的数据集比较难收敛。
- 如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。
- 迭代结果只是局部最优。
- 对噪音和异常点比较的敏感。
K近邻(K-NN)算法计算不同数据特征值之间的距离进行分类。存在一个样本数据集合,也称作训练数据集,并且数据集中每个数据都存在标签,即我们知道每一个数据与所属分类的映射关系。接着输入没有标签的新数据后,在训练数据集中找到与该新数据最邻近的K个数据,然后提取这K个数据中占多数的标签作为新数据的标签(少数服从多数逻辑)。
K近邻算法的主要步骤:
- 计算新数据与各个训练数据之间的距离。
- 按照距离的递增关系进行排序。
- 选取距离最小的K个点。
- 确定前K个点所在类别的出现频率。
- 返回前K个点中出现频率最高的类别作为新数据的预测分类。
K近邻算法的结果很大程度取决于K的选择。其距离计算一般使用欧氏距离或曼哈顿距离等经典距离度量。
K近邻算法的主要优点:
- 理论成熟,思想简单,既可以用来做分类又可以做回归。
- 可以用于非线性分类。
- 对数据没有假设,准确度高,对异常点不敏感。
- 比较适用于数据量比较大的场景,而那些数据量比较小的场景采用K近邻算法算法比较容易产生误分类情况。
K近邻算法的主要缺点:
- 计算复杂性高;空间复杂性高。
- 样本不平衡的时候,对稀有类别的预测准确率低。
- 是慵懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢。
- 可解释性不强。
NeRF(Neural Radiance Fields)技术主要用于生成高质量的三维场景渲染。NeRF技术通过使用神经网络来表示场景中的颜色和密度分布,从而能够生成从不同视角看到的高质量图像,在三维重建和新视图合成领域取得了显著的进展。以下是对 NeRF 技术的详细讲解:
-
辐射场(Radiance Field):
- NeRF 表示场景的辐射场,这是一种三维空间中每个点的颜色和密度的函数。具体来说,辐射场定义了从某个点在某个方向上发出的光的颜色和强度。
-
核心模型:
- NeRF 使用一个多层感知器(MLP)作为神经网络。这个网络接受三维空间中的位置(x, y, z)和视角方向(θ, φ)作为输入,并输出该位置的颜色(RGB)和密度(σ)。
-
体积渲染:
- 通过体积渲染算法,从神经网络中采样不同位置的颜色和密度,合成最终的图像。体积渲染过程模拟了光线在三维场景中的传输和散射。
NeRF 的工作原理可以分为以下几个步骤:
-
输入编码:
- NeRF 使用傅里叶特征编码(Fourier Feature Encoding)来对输入的三维坐标和视角方向进行高频特征变换,从而提高模型的表示能力。这种编码将低频的空间信息转换为高频特征,使得神经网络可以更好地学习到细节。
-
核心模型训练:
- 神经网络接受编码后的三维坐标和视角方向,输出该位置的颜色和密度。通过对比生成图像与实际图像之间的误差(如均方误差损失),调整神经网络的参数。
- 训练数据通常是从多个视角拍摄的二维图像,这些图像包含了场景的不同视角信息。
-
体积渲染:
- 对每条光线,从神经网络中采样多个点的颜色和密度,并通过体积渲染公式将这些值组合起来,生成光线上的像素颜色。
- 具体的体积渲染公式计算光线在经过场景中的每个点时的颜色贡献,并将这些贡献累加起来,形成最终的像素值。
-
新视图合成:
- NeRF 可以从给定的几张二维图像生成新的视图,非常适合用于虚拟现实(VR)和增强现实(AR)应用。
-
3D 重建:
- NeRF 可以用于从二维图像重建高质量的三维模型,应用于影视、游戏和数字文化遗产保护等领域。
-
计算机图形学:
- 由于其生成高质量图像的能力,NeRF 在计算机图形学中也具有重要的应用价值。
- 高质量渲染:NeRF 可以生成非常逼真的图像,捕捉到细节和复杂的光照效果。
- 少量数据需求:与传统的3D重建方法相比,NeRF只需要较少的输入图像即可生成高质量的三维场景。
- 计算成本高:训练NeRF模型需要大量的计算资源和时间,尤其是对于高分辨率的场景。
- 实时性问题:目前,NeRF的实时渲染仍然是一个挑战,需要更多的优化和硬件支持。
自回归模型思想很早就被提出,在AIGC时代因为应用于ChatGPT系列中而再次成为机器学习领域的“明星”。接下来我们就详细介绍一下自回归模型。
自回归模型(Autoregressive Model, AR)是时间序列分析中的一种经典模型,用于表示当前值是过去若干值的线性组合。自回归模型假设时间序列的数据点可以用其自身的历史数据来解释,即通过过去的观测值预测当前和未来的观测值。以下是详细讲解自回归模型的原理、公式、假设、应用以及示例。
自回归模型通过回归分析的方法,利用时间序列的过去值对当前值进行预测。其核心思想是,时间序列的当前值与其前几个时间点的值之间存在某种线性关系。
自回归模型的数学表达式为:
其中:
-
$y_t$ 是时间$t$ 的观测值。 -
$c$ 是常数项。 -
$\phi_1, \phi_2, \ldots, \phi_p$ 是模型的系数。 -
$p$ 是模型的阶数,表示回顾的时间步数。 -
$\epsilon_t$ 是误差项,假设其为白噪声(即期望为零、方差为$\sigma^2$ 的独立同分布随机变量)。
-
线性关系:时间序列的当前值与过去
$p$ 个时间点的值之间存在线性关系。 - 平稳性:时间序列应是平稳的,即其统计特性(如均值和方差)随时间不变。
-
白噪声误差:误差项
$\epsilon_t$ 是白噪声。
自回归模型广泛应用于经济学、金融学、气象学、工程学等领域,用于预测和分析时间序列数据。例如:
- 经济数据中的 GDP 增长率、失业率等的预测。
- 金融市场中的股票价格、利率等的预测。
- 气象学中的气温、降雨量等的预测。
选择自回归模型的阶数
- AIC(Akaike 信息准则):通过最小化 AIC 选择最佳阶数。
- BIC(贝叶斯信息准则):通过最小化 BIC 选择最佳阶数。
下面是一个使用 Python 及 statsmodels 库来拟合和预测自回归模型的示例:
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.ar_model import AutoReg
# 生成一个模拟的自回归时间序列数据
np.random.seed(42)
n = 100
phi = [0.5, -0.3, 0.2] # AR(3) 模型的系数
y = np.zeros(n)
y[0], y[1], y[2] = np.random.normal(size=3) # 初始化前3个值
for t in range(3, n):
y[t] = phi[0] * y[t-1] + phi[1] * y[t-2] + phi[2] * y[t-3] + np.random.normal()
# 拟合 AR 模型
model = AutoReg(y, lags=3)
model_fit = model.fit()
# 模型系数
print("模型系数:", model_fit.params)
# 预测未来10个时间点的值
y_forecast = model_fit.predict(start=n, end=n+9)
print("预测值:", y_forecast)
# 绘制原始数据与预测值
plt.figure(figsize=(10, 6))
plt.plot(y, label='原始数据')
plt.plot(range(n, n+10), y_forecast, label='预测值', color='red')
plt.legend()
plt.show()-
数据生成:
- 使用一个已知的 AR(3) 模型生成模拟数据,其中系数为
$[0.5, -0.3, 0.2]$ 。
- 使用一个已知的 AR(3) 模型生成模拟数据,其中系数为
-
拟合 AR 模型:
- 使用
AutoReg类拟合 AR 模型,并指定滞后阶数为 3。
- 使用
-
输出模型系数:
- 使用
model_fit.params获取拟合模型的系数。
- 使用
-
预测未来值:
- 使用
model_fit.predict方法预测未来 10 个时间点的值。
- 使用
-
绘制图形:
- 使用
matplotlib库绘制原始数据和预测值的图形,以可视化效果展示预测结果。
- 使用
KNN算法是一种用于分类任务的非参数统计方法。
- 核心思想:当预测一个新样本的标签时,根据它距离最近的
$k$ 个样本点是什么标签来判断该新样本属于哪个标签(多数投票)。 - 输入输出:输入为特征空间中的一个点,输出为该点所对应的类别标签。
假设一个样本数据集
- 计算
$x_j$ 到每一个$x_i$ 的距离; - 对距离进行排序;
- 选择最接近
$x_j$ 的$k$ 个样本(也可通过kd树搜索); - 根据多数投票原则,预测
$x_j$ 的标签。
两个向量
- 过小的
$k$ 值分类器:未知样本对邻近的样本十分敏感,易受到噪声干扰; - 过大的
$k$ 值分类器:未知样本易被预测为占比较大的标签类型。
常用的方法:
(1)从
(2)重复该过程,每次
(3)选取产生最小误差率的
-
KNN的分类决策规则:对未知样本的最邻近
$k$ 个样本进行标签统计,采用多数投票进行分类预测。
使用sklearn.neighbors.KNeighborsClassifier即可创建KNN分类器,参数包括:
- n_neighbors:设定k值,默认为5;
- weights:设定k个邻近样本对型统计的权重,默认为平均权重;
- algorithm:设定搜索邻近样本的方法,包括ball tree, kd tree和 brute。
- 优点:简单易用,无需训练;对异常值不敏感。
- 缺点:惰性算法,计算量大。
- 人脸识别,文字识别,医学图像处理等。 (毋雪雁,王水花,张煜东.K最近邻算法理论与应用综述[J].计算机工程与应用,2017,53(21):1-7.)
- 对于k个邻近样本的标签,采用平均值作为未知样本标签的预测值。
先验概率 - Prior probability
-
定义:在观测数据前,表达不确定量的不确定性的概率分布,记为
$P(A)$ 。 - 释义:根据已知的经验和分析得到的概率,即由因求果。
后验概率 - Posterior probability
-
定义: 考虑和给出相关证据或数据后所得到的条件概率,记为
$P(B|A)$ 。 - 释义:依据得到的结果所计算出的事件发生的概率,即由果溯因。
联合概率 - Joint probability
-
定义:两个事件共同发生的概率,记为
$P(AB)$ 。
条件概率 - Conditional probability
-
定义:事件
$A$ 在事件$B$ 发生的条件下发生的概率。 -
公式:
$$P(A|B)=\frac{P(AB)}{P(B)}$$
全概率公式 - Law of total probability
-
定义:将一复杂事件$A$的概率求解问题转化为不同独立条件(
$P({B_1}\bigcap{B_2}...)=0$ &$P({B_1}\bigcup{B_2}...)=1$ )下发生的事件概率的求和问题。 -
公式:
$$P(A)=\sum_{i=1}^n{{P(A|B_i)}\times{P(B_i)}} $$
贝叶斯定理 - Bayes' theorem
- 定义:描述条件概率和后验概率的乘法关系。
-
公式:
$$P(B_j|A)=\frac{{P(A|B_j)}\times{P(B_j)}}{P(A)} $$ $$P(B_j|A)=\frac{{P(A|B_j)}\times{P(B_j)}}{\sum_{i=1}^n{{P(A|B_i)}\times{P(B_i)}}} (独立事件)$$
后验概率与条件概率的联系
- 后验概率是一种条件概率,用于描述在给定观测结果的情况下,因变量取某个值的概率。
案例:有一个信号的发射端和接收端。发射端只发射A、B两种信号,其中发射信号A的概率为0.6,发射信号B的概率为0.4。当发射信号A时,接收端接收到信号A的概率是0.9,接收到信号B的概率是0.1。当发射信号B时,接收端接收到信号B的概率为0.8,接收到信号A的概率为0.2。求当接收到信号A时,发射信号为A的概率。
概率
- 先验概率:
-
$P(sendA)$ = 0.6,$P(sendB)$ = 0.4 - 条件概率:
-
$P(receiveA|sendA)$ = 0.9,$P(receiveB|sendB)$ = 0.8,$P(receiveA|sendB)$ = 0.2 -
后验概率:
$P(sendA|receiveA)$ = ?
基本假设
- 给定数据样本的每个特征相互独立。
简要推导
给定训练数据集,其中每个样本
- 后验概率最大的标签则为对新样本
$x$ 的预测标签。
由于朴素贝叶斯的基本假设,所以条件概率
高斯模型
- 连续型变量特征
-
条件概率
$$P(x_i|y_k) = \frac{1}{\sqrt{2\pi\sigma_{y_k,i}^2}}\times{e^{-\frac{(x_i-u_{y_k,i})^2}{2\sigma_{y_k,i}^2}}}$$
在文本分类场景下,样本
多项式模型
- 以单词的频次参与统计计算。
-
先验概率:
$$P(y_k)=\frac{y_k类文档的所有单词}{所有文档的所有单词}$$ -
条件概率
$$P(x_i|y_k)=\frac{单词x_i在y_k类文档中出现的次数之和+1}{y_k类文档的所有单词+所有文档的单词种类}$$
伯努利模型
- 以是否出现参与统计计算。
-
先验概率:
$$P(y_k)=\frac{y_k类文档的个数}{所有文档的个数}$$ -
条件概率
$$P(x_i|y_k)=\frac{y_k类文档中包含单词x_i的文档个数+1}{y_k类文档的个数+2}$$
由于
sklearn.naive_bayes.MultinomialNB()
优点
- 分类稳定,可以处理多分类任务;
- 对确实数据不敏感,且可以进行增量训练。
缺点
- 需要知道事件发生的先验概率。
决策树是一种树形结构模型,由一个根节点,若干个内部节点和叶节点组成。其中,根节点和内部结点表示一个特征或属性,叶结点表示一个类别。西瓜分类的一颗决策树如下所示:
决策树一个由根到叶的递归过程,通过根节点和内部节点划分属性,直到只剩单一类型/无可用属性后停止。其伪代码如下所示:
具体停止条件
- 当前节点包含的样本属于同一类别,视为叶节点,无需划分;
- 无可用属性进行后续划分,视为同一类别(叶节点),无需划分;
- 当点节点不包含样本,删除该节点,回退至父节点重新划分。
- ID3: 在决策树的内部节点和根节点上,使用信息增益方法作为划分属性的选择标准,信息增益越大越好。
- C4.5:使用信息增益率来选择节点属性,增益率越高越好。
- CART:使用基尼指数选择划分属性,基尼指数越小越好。
假定离散属性
-
$Ent(D)$ - 信息熵; -
$n$ - 类别数目; -
$p_k$ - 样本集中第$k$类样本所占的比例$$Gain(D,a) = Ent(D) - \sum_1^V\frac{|D^v|}{|D|}Ent(D^v)$$ -
$Gain(D, a)$ - 信息增益。
from sklearn import tree #导入需要的模块
clf = tree.DecisionTreeClassifier() #实例化模型对象
class sklearn.tree.DecisionTreeClassifier (criterion=’gini’/'entropy', splitter=’best’, max_depth=None,min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,class_weight=None, presort=False)
优点
- 易于理解和实现;
- 数据准备简单;
缺点
- 类别过多时,分类困难且时间较长。
支持向量机(Support Vector Machine, SVM)是一种有监督的机器学习算法,主要用于分类和回归分析。它的基本思想是在高维空间中构建一个超平面,将不同类别的数据点分开,使得两类数据点到超平面的距离最大化。
-
超平面
超平面是指$n$ 维线性空间中维度为$n-1$ 的子空间。该子空间可以把线性空间分割成不相交的两个部分,例如:二维空间的线和三维空间的面。其描述方程为$w^Tx+b=0$ ,记为超平面$(w,b)$ ;而由于方程的乘法性质,对于任意的$k$ 值,$(w,b)$ 和$(kw,kb)$ 为同一超平面,因此下述用$(w,b)$表示。其中,$w=(w_1,w_2,...,w_{n})$ 为超平面的法向量;$b$ 为位移项,决定超平面与原点的距离。 -
函数间隔与支持向量
函数间隔$y_i\times(wx_i+b)$ 表示样本点距离超平面的距离,其值越大,距离越远。而支持向量则表示满足函数$y_i\times(wx_i+b)=k$ 的样本点。 -
工作原理
线性可分情况(硬间隔SVM):对于线性可分的数据,SVM试图找到一个能将两类数据完全分开的超平面,并使两类数据点到超平面的距离最大化(即最大间隔)。这个最大间隔超平面由最靠近它的几个支持向量决定。 线性不可分情况(软间隔SVM):对于线性不可分的数据,SVM引入了软间隔,允许一些数据点位于间隔区域内或错分,从而使分类更加鲁棒。通过引入松弛变量和惩罚参数,SVM在最大化间隔和最小化误分类之间寻求平衡。 非线性情况:对于非线性数据,SVM使用核技巧将数据映射到高维特征空间,使得在高维空间中线性可分,从而实现非线性分类。常用的核函数包括线性核、多项式核、高斯核等。
-
线性可分
(a)函数间隔和支持向量
已知超平面$(w,b)$ ,对于任一样本$(x_i,y_i)$ $\in$ 样本集$D$ ,都满足函数间隔$y_i\times(wx_i+b)>0$ 。若定义最小函数间隔$\gamma$ 为$\underset {i} {min} {(y_i\times (wx_i+b))}$ ,则所有正样本一定满足${y_i\times (wx_i+b )} \geq \gamma >0$ 。为了保证分类的鲁棒性,一定存在合适的超平面$(w,b)$ ,使得任一正样本$(x_i,y_i)\in{D}$ 都满足函数间隔${y_i\times (wx_i+b )} \geq 1$ 。其中,函数间隔${y_i\times (wx_i+b )} = 1$ 对应的样本点,称为支持向量。若$y_i=+1$ ,则$x_i$ 落在超平面$H_1:wx+b=1$ 上;若$y_i=-1$ ,则$x_i$ 落在超平面$H_1:wx+b=-1$ 上。如图所示,超平面$H_1$ 和$H_2$ 均与超平面$H_0$ 平行,且等距分布在两侧。其中,支持向量(超平面$H_1$ )到超平面$H_0$ 的距离$\frac{1}{\Vert w \Vert_2}$ 为最短间隔,而超平面$H_1$ 到的超平面$H_2$ 的距离$\frac{2}{\Vert w \Vert_2}$ 为几何间隔。(b)硬间隔最大化
支持向量机通过最大化最短间隔和集合间隔,完成对训练样本的最佳线性分类,即硬间隔最大化。公式表达为$\underset {(w,b)} {max}{\frac {1}{{\Vert w \Vert_2}}},s.t. {{y_i\times (wx_i+b )} \geq 1}$ 。而最大化$\frac{1}{\Vert w \Vert_2}$ 和最小化$\frac{1}{2}{\Vert w \Vert_2}$ 等价,因此硬间隔最大化可以重写成一个凸二次规划函数,即$\underset {(w,b)} {min}{\frac {1}{2}{{\Vert w \Vert_2}}},s.t. {{y_i\times (wx_i+b )} \geq 1}$ 。若样本集线性可分,则该凸二次规划函数的解一定存在且唯一。(c)对偶求解
引入拉格朗日算子,即可写出凸二次规划函数的拉格朗日函数,如下:
$$L(w,b,\alpha) = \frac {1}{2}{\Vert w \Vert_2}- \sum_{i=1}^{n}{\alpha_i y_i(wx_i+b)+\sum_{i=1}^{n}\alpha_i}$$ 其中,$\alpha=(\alpha_1,\alpha_2,...\alpha_n)$ 是拉格朗日乘子。 根据朗格朗日的对偶性,将求解问题转化为一个极大极小问题$\underset {\alpha} {max} \underset {(w,b)} {min} L(w,b,\alpha)$ 。解法如下: Step 1: 将拉格朗日函数其$L(w,b,\alpha)$ 分别对$w,b$ 求偏导可得:$$\frac {\partial L}{\partial w} = w - \sum_{i=1}^{n}\alpha_iy_ix_i=0$$ $$\frac {\partial L}{\partial b} = - \sum_{i=1}^{n}\alpha_ix_i=0$$ Step 2: 将拉格朗日函数化简为:
$$L(w,b,\alpha) = -\frac{1}{2} \sum_{i=1}^{n}\sum_{j=1}^{n}{\alpha_i\alpha_jy_iy_j(x_ix_j)}+\sum_{i=1}^{n}\alpha_i$$ Step 3: 将极大极小问题化简为:
$$\underset {\alpha} {min} \frac {1}{2} \sum_{i=1}^{n}\sum_{j=1}^{n}{\alpha_i\alpha_jy_iy_j(x_ix_j)} -\sum_{i=1}^{n}\alpha_i,$$ $$s.t. \sum_{i=1}^{n}\alpha_iy_i=0$$ Step 4:求解出最佳的超平面$(w,b)$ :
$$w=\sum_{i=1}^{n}\alpha_iy_ix_i$$ $$b=y_i-x_j\sum_{i=1}^{n}\alpha_iy_ix_i$$ $$s.t. y_j(wx_j+b)=1$$ -
线性不可分
线性可分问题的支持向量机对线性不可分是不适用的,因此本节采用软间隔将支持向量机推广到线性不可分的情况。
(a)软间隔最大化
假设条件:样本集$D$ 不是线性可分的,但剔除特异点之后,剩下的大部分样本$(x_i,y_i)$ 是线性可分的。
线性不可分意味着某些样本点$(x_i,y_i)$ 不能满足函数间隔${y_i\times (wx_i+b )} \geq 1$ 的约束条件。因此,引入一个松弛变量$\xi_i \geq0$ ,使得函数间隔更加宽松${y_i\times (wx_i+b )} \geq 1-\xi_i$ 。同时,对每个松弛变量$\xi_i$ ,引入一个代价变量$\xi_i$ 和惩罚参数$C$ 。软间隔最大化的凸二次规划函数则可以转化为:
$${\frac {1}{2}{{\Vert w \Vert_2}}} + C \sum_{i=1}^{n}{\xi_i}$$ $$s.t. {y_i(wx_i+b) \geq 1-\xi_i},({ \xi_i\geq 0})$$ (2)对偶求解
引入拉格朗日乘子$\alpha,\beta$ ,写出凸二次规划函数的对偶问题,如下:
$$\underset {\alpha, \beta}{max}{- \frac{1}{2} \sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i \alpha_j y_i y_j (x_ix_j)}+\sum_{i=1}^{n}\alpha_i$$ $$s.t. \sum_{i=1}^{n}\alpha_iy_i=0$$ $$C-\alpha_i-\beta_i=0$$ $$\alpha_i \geq 0, \beta_i \geq 0$$ 如果$0 < \alpha_i < C$ ,则$C − \alpha_i = \beta_i > 0$ ,可以求得对应的$\xi_i=0$ 。因此,该条件下最终求解的最优超平面$(w,b)$ 同线性可分类似,为$$w=\sum_{i=1}^{n}\alpha_iy_ix_i$$ $$b=y_j-x_j\sum_{i=1}^{n}\alpha_iy_ix_i$$ $$s.t. y_j(wx_j+b)=1$$ 在线性不可分的情况下,最优超平面$(w,b)$ 的法向量$w$ 是唯一的,但是偏置$b$ 不一定是唯一的。因此,采用多次求解后的均值作为偏置$b$ 。 对于$\alpha_i =C$ 来说,满足$\xi_i >0$ 都是特异点。特异点到所属边界超平面的距离为$\frac {\xi_i}{\Vert w \Vert_2}$ 。如果$0<\xi_i<1$ ,则位于超平面$H_1,H_2$ 和$H_0$ 之间,仍被分类成功:如果$\xi_i=1$ ,在超平面$H_0$ 上,无法分类;$\xi_i>1$ ,则被分类错误。 -
非线性 在非线性情况下,SVM通过某种事先选择的非线性映射(核函数)将输入变量映到一个高维特征空间,将其变成在高维空间线性可分,在这个高维空间中构造最优分类超平面。 参考:支持向量机原理之线性SVM与非线性SVM
from sklearn.svm import SVC
参考:【ML】支持向量机SVM及Python实现(详细)_支持向量机代码(鸢尾花为案例)
- 优点:线性/非线性分类,小样本,高维数据。
- 缺点: 对核函数和惩罚参数的选择十分敏感。
对样本集$X$中的样本
-
Sigmoid函数
由于线性回归的结果范围为正负无穷,因此通过对数几率将线性回归的预测结果非线性映射到固定区间(0~1)之间,数学表达式为:
$$S(x)=\frac{1}{1+e^{-x}}$$
-
数学表达
$$P(y=1|x,\theta)=\frac{1}{1+e^{-\theta^Tx}}$$ $P(y=1|x,\theta)$ 表示给定样本$x$ ,其预测标签为正分类的概率。$\theta$ 表示样本特征$x_i$ 的权重参数。这个表达式的核心思想可以通过2步来分解和理解:第一步:回归假设:$z = h_\theta(x)=\theta^Tx$ ;第二步:Sigmoid函数:$y =g(z)=\frac{1}{1+e^{-z}}$ 。当$\theta^Tx≥0, h_\theta(x)≥0,g(z)≥0.5$ 为正分类,反之$g(z)<0.5$ 为负分类,因此逻辑回归算法的核心就在于求解权重$\theta$ 和回归假设的函数,即确定决策边界。 -
决策边界的定义 逻辑回归算法通常不拟合样本分布,而且通过权重
$\theta$ 和回归函数确定决策边界,将样本划分为2类。其中,决策边界包括线性决策边界和非线性决策边界。 线性决策边界:即第一步线性回归:$h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2...+\theta_ix_i$ 。非线性决策边界:即将线性回归拓展成多项式回归:
$h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2^2...+\theta_ix_i^i$ 。 -
决策边界的确定 决策边界通过梯度下降法最小化损失函数得到。 损失函数: 损失函数通过衡量训练样本标签与预测标签之间的差异,确定最优的决策边界。其中,损失函数越小,决策边界越好。损失函数包括:均方误差损失(MSE)和对数损失函数。 均方差误差:
$$MSE=\frac{1}{m}\sum_{x\in{X}}({f(x)-y_{1/2})}$$ 对数损失函数:$$J(\theta)=-\frac{1}{m}[\sum_{x\in{X}}(y_{1/2}\log{h_\theta(x)+(1-y_{1/2})\log(1-h_\theta(x))}]$$ 梯度下降:梯度下降法通过向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索,找到一个函数的局部极小值。该局部极小值对应的参数$\theta$ 即为最佳的参数$\theta$ 。其公式为:$$J(\theta_1)=\theta_1-\alpha\frac{dJ(\theta_1)}{d\theta_1}$$
在训练数据不够多,或者模型复杂又过度训练时,模型会陷入过拟合(Overfitting)状态。通过对损失函数添加正则化项,可以约束参数的搜索空间,从而缓解过拟合现象,以下是对对数损失函数添加L2正则化项的公式。其中,
参见厦门大学数据实验室 Python实现逻辑回归(Logistic Regression in Python)_厦大数据库实验室博客 (xmu.edu.cn)
Nucleus 采样(Nucleus Sampling),也称为 Top-p 采样,是一种用于文本生成模型(如 GPT 系列模型)的采样策略,特别用于生成质量更高、更具多样性的文本。它通过动态调整生成候选集的大小,控制输出的质量和随机性。
在生成式任务中,如文本生成或对话系统,模型通常会在每个生成步骤从概率分布中选择一个单词。常见的策略有:
- 贪婪搜索:每一步选择概率最高的单词,容易导致重复和缺乏多样性。
- 随机采样:完全根据模型输出的概率分布随机选取,可能会导致生成无意义或语法不通的内容。
- Top-k 采样:仅从概率分布前 k 个最有可能的词中选择,而忽略剩下的候选词。这增加了一定的随机性,但 k 的值固定,可能忽略了一些罕见但有意义的词。
为了在 质量 和 多样性 之间取得更好的平衡,Nucleus 采样 应运而生。
Nucleus 采样并不是简单地选择前 k 个最可能的词,而是根据一个动态的概率阈值
-
计算概率分布:给定模型在当前时间步的输出概率分布。
-
排序并累加概率:将词按照模型给出的概率从高到低排序,然后从最高概率开始累积这些概率值,直到累积的概率达到设定的阈值
$p$ 。 -
采样候选集:生成的候选集是累积概率超过
$p$ 的那一部分词。接下来,从这个候选集中根据概率分布随机采样。
因此,Nucleus 采样是基于累积概率的动态调整策略,它确保候选词集合足够灵活,包含那些对生成质量至关重要的高概率词,同时也保留了低概率但可能有创意的词。
-
Top-k 采样:Top-k 采样是从前 k 个最有可能的词中采样,忽略了剩下的词。而无论总概率分布如何,k 是一个固定的整数。它的局限性在于,k 的选择可能过小,限制了生成的多样性,或者过大,导致生成质量下降。
-
Nucleus 采样(Top-p 采样):Nucleus 采样动态选择候选词的数量,通过一个累积概率阈值 p。随着 p 的变化,候选词集合可以根据上下文自动扩展或收缩,因此比 Top-k 更灵活、更适应不同的生成情境。
-
较小的 p:如果设定的
$p$ 很小(接近 0.1 或 0.2),模型将只会从极少数的高概率词中选择,输出将趋于确定,类似贪婪搜索的效果。这会提高文本的连贯性和语法正确性,但可能缺乏多样性和创意。 -
较大的 p:如果设定的
$p$ 较大(如 0.9),候选词集合会更大,包含更多低概率词,增加生成的随机性和多样性。这可能使文本生成更具创意和新颖性,但也可能会增加生成不连贯或无意义内容的风险。
-
灵活性:Nucleus 采样能够根据不同上下文动态调整候选集的大小,在保证生成质量的同时,增加文本的多样性。
-
避免冗余或无意义的选择:与 Top-k 不同,Nucleus 采样不会固定从 k 个词中采样,它会在保证语义连贯的前提下,选择最有意义的词进行采样。
-
平衡性:它提供了灵活的平衡机制,既能控制生成的连贯性和语法正确性,又能通过随机性保持生成内容的丰富性。
Nucleus 采样常用于生成式语言模型中,如 GPT-3、GPT-4 等,它可以生成对话、文本扩展等任务。通过调整 p 值,开发者可以控制模型输出的创造性和连贯性。比如:
- 在写作辅助场景中,可以设置较大的 p 值,鼓励模型生成具有创意的内容。
- 在对话系统中,较小的 p 值可能更适合,让模型的回答更加精确和连贯。
以下是一个使用 PyTorch 的简单示例,展示如何实现 Nucleus 采样。
import torch
def nucleus_sampling(logits, p):
sorted_logits, sorted_indices = torch.sort(logits, descending=True)
cumulative_probs = torch.cumsum(torch.softmax(sorted_logits, dim=-1), dim=-1)
# 选出累积概率大于 p 的部分
cutoff_index = torch.where(cumulative_probs > p)[0][0]
filtered_logits = sorted_logits[:cutoff_index + 1]
filtered_indices = sorted_indices[:cutoff_index + 1]
# 在这些候选集中进行采样
sampled_index = torch.multinomial(torch.softmax(filtered_logits, dim=-1), 1)
return filtered_indices[sampled_index]
# 假设 logits 是一个表示词的概率的张量,下面的代码会从中进行 Nucleus 采样
logits = torch.tensor([0.1, 0.2, 0.05, 0.4, 0.15, 0.1])
p = 0.85 # 累积概率阈值
selected_word_index = nucleus_sampling(logits, p)
print(selected_word_index)| 算法名称 | 可伸缩性 | 适合的数据类型 | 高维性 | 异常数据抗干扰性 | 聚类形状 | 算法效率 |
|---|---|---|---|---|---|---|
| WAVECLUSTER | 很高 | 数值型 | 很高 | 较高 | 任意形状 | 很高 |
| ROCK | 很高 | 混合型 | 很高 | 很高 | 任意形状 | 一般 |
| BIRCH | 较高 | 数值型 | 较低 | 较低 | 球形 | 很高 |
| CURE | 较高 | 数值型 | 一般 | 很高 | 任意形状 | 较高 |
| K-PROTOTYPES | 一般 | 混合型 | 较低 | 较低 | 任意形状 | 一般 |
| DENCLUE | 较低 | 数值型 | 较高 | 一般 | 任意形状 | 较高 |
| OPTIGRID | 一般 | 数值型 | 较高 | 一般 | 任意形状 | 一般 |
| CLIQUE | 较高 | 数值型 | 较高 | 较高 | 任意形状 | 较低 |
| DBSCAN | 一般 | 数值型 | 较低 | 较高 | 任意形状 | 一般 |
| CLARANS | 较低 | 数值型 | 较低 | 较高 | 球形 | 较低 |
SVD(Singular Value Decomposition,奇异值分解) 是一种常用的矩阵分解技术,在AIGC、传统深度学习以及自动驾驶中都有广泛的应用。SVD 提供了一种将一个矩阵分解成多个分量的方法,有助于数据降维、特征提取、数据去噪、AI模型轻量化等任务。
对于一个任意矩阵
其中:
-
$U$ (大小$m \times m$ ):左奇异向量矩阵,列向量是$A A^T$ 的特征向量。 -
$\Sigma$ (大小$m \times n$ ):对角矩阵,包含$A$ 的奇异值,按降序排列。奇异值是$A$ 的特征值的平方根。 -
$V^T$ (大小$n \times n$ ):右奇异向量矩阵,行向量是$A^T A$ 的特征向量的转置。
几何解释:
- SVD 将一个矩阵
$A$ 分解成三个部分:先通过$V$ 进行旋转,再通过$\Sigma$ 进行缩放,最后通过$U$ 进行另一个旋转。 -
$\Sigma$ 中的奇异值反映了矩阵$A$ 在不同方向上的重要性。
- PCA(主成分分析):PCA 可以通过 SVD 实现,它将高维数据映射到一个低维空间,同时保留尽可能多的数据方差。
-
方法:
- 对数据矩阵
$A$ 进行中心化处理(减去均值)。 - 对中心化矩阵执行 SVD 分解
$A = U \Sigma V^T$ 。 - 选取
$\Sigma$ 中最大的$k$ 个奇异值及对应的$U$ 和$V$ 向量,得到降维后的数据。
- 对数据矩阵
- 在推荐系统中,用户-物品评分矩阵通常是稀疏的。SVD 可以分解评分矩阵,提取出用户和物品的隐含特征表示。
-
步骤:
- 对评分矩阵
$R$ 进行 SVD 分解。 - 使用分解后的矩阵
$U$ ,$\Sigma$ ,$V^T$ 预测缺失的评分。
- 对评分矩阵
优势:SVD 可以有效提取用户和物品的特征,解决稀疏矩阵的问题。
- 图像去噪:SVD 可用于图像的压缩和去噪,通过保留主要的奇异值,丢弃次要的奇异值,实现信息的压缩和噪声的滤除。
-
原理:
- 图像通常被表示为矩阵形式,通过 SVD 分解后,保留前
$k$ 个奇异值及对应向量,重构近似图像。 - 较小的奇异值通常对应噪声。
- 图像通常被表示为矩阵形式,通过 SVD 分解后,保留前
- SVD 可以用于求解奇异或非方矩阵的线性系统。
-
矩阵伪逆:
- 对矩阵
$A$ 的伪逆可以通过 SVD 求解: $$ A^+ = V \Sigma^+ U^T $$ 其中 $\Sigma^+ $ 是$\Sigma$ 的伪逆。
- 对矩阵
- 适用性广:适用于任意形状的矩阵(非方矩阵也适用)。
- 数值稳定性:SVD 是一种数值稳定的分解方法。
- 特征提取:可用于数据降维、压缩、去噪等任务。
- 适用于稀疏矩阵:在推荐系统等任务中表现优秀。
-
计算复杂度高:SVD 的时间复杂度为
$O(n^3)$ (对于$n \times n$ 的矩阵),在大规模数据上计算成本较高。 - 不易解释:分解后的奇异值和奇异向量可能缺乏直观的物理意义。
| 分解方法 | 适用矩阵类型 | 主要应用 | 是否适用于降维 |
|---|---|---|---|
| SVD | 任意矩阵 | 降维、去噪、推荐系统 | 是 |
| PCA | 数据协方差矩阵 | 主成分分析、特征提取 | 是(基于 SVD) |
| LU 分解 | 方阵 | 线性方程求解 | 否 |
| QR 分解 | 方阵 | 正交化与回归分析 | 否 |
| Eigen 分解 | 方阵,且对称正定 | 计算特征值、特征向量 | 否 |
- 聚类是一种无监督学习技术,它的目标是将数据集划分为若干个组(簇,clusters),使得:
- 同一簇中的数据点彼此之间的相似度尽可能高。
- 不同簇之间的数据点相似度尽可能低。
- 聚类广泛应用于AIGC、传统深度学习以及自动驾驶等AI核心领域。
根据聚类方法的不同,可以将聚类算法分为以下几类:
- 划分式聚类(Partitioning Clustering)
- 层次聚类(Hierarchical Clustering)
- 基于密度的聚类(Density-Based Clustering)
- 基于网格的聚类(Grid-Based Clustering)
- 基于模型的聚类(Model-Based Clustering)
下面Rocky详细介绍每种类别的代表算法。
- 将数据集划分为
$K$ 个簇,直接对簇进行优化。 - 每个簇由一个中心点(质心)表示,数据点根据距离最近的质心分配到对应的簇。
-
K-Means 是最常用的划分式聚类算法。
-
工作原理:
- 随机选择
$K$ 个点作为初始质心。 - 将每个数据点分配到最近的质心。
- 重新计算每个簇的质心。
- 重复步骤 2 和 3,直到质心不再变化或达到最大迭代次数。
- 随机选择
-
优点:
- 简单易实现。
- 计算效率高,适合大规模数据。
-
缺点:
- 需要预先指定
$K$ 。 - 对初始值敏感,容易陷入局部最优。
- 不能处理非球形数据和不同大小的簇。
- 需要预先指定
-
改进算法:
- K-Means++:改进初始化步骤,使质心的选择更加合理。
- MiniBatch K-Means:用于大规模数据集,采用小批量数据优化。
- 通过构建层次树状结构(dendrogram)实现聚类。
- 可以分为两种方法:
- 凝聚层次聚类(Agglomerative Clustering):
- 自底向上,每个数据点开始是一个单独的簇,逐步合并簇。
- 分裂层次聚类(Divisive Clustering):
- 自顶向下,所有数据点开始是一个大簇,逐步分裂成多个簇。
- 凝聚层次聚类(Agglomerative Clustering):
-
步骤:
- 计算所有数据点之间的距离矩阵。
- 找到最近的两个簇,合并它们。
- 更新距离矩阵。
- 重复步骤 2 和 3,直到所有数据点合并为一个簇或达到停止条件。
-
链接方法(距离度量方式):
- 单链(Single Linkage):两簇中最近的数据点之间的距离。
- 全链(Complete Linkage):两簇中最远的数据点之间的距离。
- 平均链(Average Linkage):两簇之间所有点的平均距离。
-
优点:
- 不需要预定义簇的数量。
- 适合小数据集,能够生成数据的层次结构。
-
缺点:
- 计算复杂度较高,无法处理大规模数据。
- 对噪声和异常值敏感。
- 通过数据点的密度来定义簇,高密度区域的点归为一个簇,低密度区域被认为是噪声或边界点。
-
工作原理:
- 选择一个点,确定其
$\epsilon$ -邻域内的点。 - 如果邻域内的点数大于某个阈值(MinPts),则将这些点归为一个簇。
- 对邻域内的点重复步骤 2,直到没有新的点可以加入。
- 标记低密度区域的点为噪声点。
- 选择一个点,确定其
-
优点:
- 能够自动确定簇的数量。
- 能处理任意形状的簇。
- 对噪声点具有鲁棒性。
-
缺点:
- 对
$\epsilon$ 和 MinPts 参数敏感。 - 在高维数据中效果较差。
- 对
- HDBSCAN:
- 在 DBSCAN 基础上,自动选择合适的密度阈值,适合更多场景。
- 将数据空间划分为固定大小的网格单元,每个单元根据数据密度分配到簇。
-
工作原理:
- 将数据划分为固定网格。
- 识别高密度网格单元。
- 将相邻的高密度单元合并为一个簇。
-
优点:
- 高效,适合大规模数据。
- 对高维数据有效。
-
缺点:
- 依赖网格划分的大小。
- 可能丢失簇的边界细节。
- 通过假设数据点服从某种分布(例如高斯分布),用概率模型来拟合数据。
-
工作原理:
- 假设数据点服从多个高斯分布。
- 使用期望最大化算法(EM)优化每个高斯分布的参数(均值、协方差)。
- 根据每个数据点属于各高斯分布的概率分配簇。
-
优点:
- 能够生成概率输出,适合软聚类。
- 能处理不同形状和大小的簇。
-
缺点:
- 对初始值敏感。
- 计算复杂度较高。
| 算法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| K-Means | 球形数据、规模较大的数据集 | 简单高效,易实现 | 对初始值敏感,无法处理非球形簇 |
| 层次聚类 | 小规模数据、生成层次结构 | 不需要预定义簇数量,结果直观 | 计算复杂度高,敏感于噪声 |
| DBSCAN | 任意形状的簇,含噪声的数据 | 自动确定簇数,对噪声鲁棒 | 参数敏感,高维数据效果差 |
| GMM | 不同形状和大小的簇 | 能处理软聚类,适合概率建模 | 对初始值敏感,计算复杂度高 |
| CLIQUE | 大规模高维数据 | 高效,适合网格划分的场景 | 依赖网格划分,可能丢失细节 |
-
数据规模:
- 小数据集:层次聚类。
- 大规模数据集:K-Means 或 DBSCAN。
-
数据分布:
- 球形数据:K-Means。
- 非球形数据:DBSCAN 或 GMM。
-
是否包含噪声:
- 包含噪声:DBSCAN。
- 不包含噪声:K-Means 或层次聚类。
-
结果要求:
- 精确分组:GMM。
- 快速近似:K-Means。
颜色量化(Color Quantization) 是一种减少图像中颜色数量的技术,通常用于图像压缩、减少存储空间或简化图像处理。颜色量化的目标是将图像中的颜色从数百万种减少到较少的几种(通常是2到256种),同时尽量保持图像的视觉质量。
其核心思想是通过聚类算法将颜色空间划分为若干个区域,并用每个区域的代表性颜色替换该区域中的所有颜色。常用的算法包括K-Means、K-Means++、中值切割和八叉树量化等。
颜色量化的核心思想是将图像中的颜色空间划分为若干个区域(称为“聚类”或“颜色桶”),然后用每个区域中的代表性颜色(通常是该区域的平均颜色)替换该区域中的所有颜色。这样,图像中的颜色数量就被减少到与聚类数量相同的数量。
-
选择颜色空间:
- 颜色量化通常在RGB颜色空间中进行,因为RGB是图像处理中最常用的颜色表示方式。每个像素的颜色由三个分量(R、G、B)表示,每个分量的取值范围是0到255。
-
确定聚类数量(k):
- 用户指定要减少到的颜色数量(k)。例如,如果k=16,图像将被量化为16种颜色。
-
初始化聚类中心:
- 选择k个初始聚类中心。这些中心可以是随机选择的像素颜色,也可以通过其他方法(如K-Means++)选择。
-
分配像素到聚类:
- 对于图像中的每个像素,计算它与每个聚类中心的距离(通常是欧几里得距离),并将其分配到距离最近的聚类中心。
-
更新聚类中心:
- 对于每个聚类,计算该聚类中所有像素的平均颜色,并将该平均颜色作为新的聚类中心。
-
迭代:
- 重复步骤4和步骤5,直到聚类中心不再显著变化(即误差小于某个阈值),或者达到最大迭代次数。
-
生成量化图像:
- 将每个像素的颜色替换为其所属聚类的中心颜色,生成量化后的图像。
颜色量化可以看作是一个聚类问题,其中每个像素的颜色是一个三维向量(R, G, B),聚类的目标是将这些向量划分为k个组,使得组内的颜色尽可能相似,组间的颜色尽可能不同。
- 通常使用欧几里得距离来度量两个颜色之间的相似性。对于两个颜色向量
$C_1 = (R_1, G_1, B_1)$ 和$C_2 = (R_2, G_2, B_2)$ ,它们之间的距离为:
- 对于每个聚类,新的聚类中心是该聚类中所有像素颜色的平均值。假设聚类
$C_j$ 包含$n_j$ 个像素,其颜色向量为$C_{j1}, C_{j2}, \dots, C_{jn_j}$ ,则新的聚类中心$\mu_j$ 为:
- 误差通常定义为所有像素与其所属聚类中心的距离之和。误差越小,表示聚类效果越好。误差的计算公式为:
- 当误差不再显著减少时,算法停止。
-
K-Means++:
- K-Means++是一种改进的K-Means算法,它在选择初始聚类中心时,倾向于选择距离较远的点,从而避免陷入局部最优解。
-
中值切割(Median Cut):
- 中值切割算法通过递归地将颜色空间划分为更小的区域,直到达到所需的颜色数量。每个区域的颜色取该区域的中值或平均值。
-
八叉树量化(Octree Quantization):
- 八叉树量化通过构建一个八叉树数据结构来表示颜色空间,并在树中进行颜色合并,从而实现颜色量化。
-
图像压缩:
- 颜色量化可以显著减少图像的文件大小,特别是在GIF和PNG等格式中,这些格式支持有限的颜色数量。
-
图像处理:
- 在图像处理中,颜色量化可以简化图像,使其更容易处理和分析。
-
艺术效果:
- 颜色量化可以用于生成具有艺术效果的图像,例如将照片转换为类似海报或卡通的效果。
K-Means++ 是 K-Means 聚类算法的一种改进版本,主要用于解决 K-Means 算法对初始聚类中心敏感的问题。K-Means++ 通过一种更智能的方式选择初始聚类中心,从而减少算法陷入局部最优解的可能性,并提高聚类效果。
其核心思想是选择距离较远的点作为初始聚类中心,从而使得初始聚类中心更加分散。
K-Means++ 的核心思想是:初始聚类中心的选择应该尽可能分散,即选择的初始中心点之间的距离应该尽可能大。这样可以避免初始中心点过于集中,导致聚类结果不理想。
K-Means++ 的初始化过程分为以下几个步骤:
-
随机选择第一个聚类中心:
- 从数据集中随机选择一个点作为第一个聚类中心。
-
计算每个点到最近聚类中心的距离:
- 对于数据集中的每个点,计算它与当前已选聚类中心的最短距离
$D(x)$ 。
- 对于数据集中的每个点,计算它与当前已选聚类中心的最短距离
-
根据距离选择下一个聚类中心:
- 按照与已选聚类中心的距离的平方成比例的概率,选择下一个聚类中心。具体来说,每个点被选中的概率为:
- 这意味着距离已选聚类中心越远的点,被选中的概率越大。
-
重复步骤2和步骤3:
- 重复上述过程,直到选择出 k 个初始聚类中心。
-
运行标准的 K-Means 算法:
- 使用 K-Means++ 选择的初始聚类中心,运行标准的 K-Means 算法进行聚类。
K-Means++ 的数学原理主要基于概率选择和距离度量。
- 对于数据集中的每个点
$x$ ,计算它与当前已选聚类中心的最短距离$D(x)$ :
- 其中,
$C$ 是当前已选的聚类中心集合,$d(x, c)$ 是点$x$ 与聚类中心$c$ 之间的距离(通常是欧几里得距离)。
- 根据每个点的
$D(x)^2$ 计算其被选为下一个聚类中心的概率:
- 这意味着距离已选聚类中心越远的点,被选中的概率越大。
- 根据计算出的概率分布,随机选择一个点作为下一个聚类中心。
-
更好的初始聚类中心:
- K-Means++ 通过选择距离较远的点作为初始聚类中心,避免了初始中心点过于集中的问题,从而提高了聚类效果。
-
减少陷入局部最优解的可能性:
- 由于初始聚类中心的选择更加分散,K-Means++ 减少了算法陷入局部最优解的可能性,通常能够得到更好的聚类结果。
-
计算效率:
- 虽然 K-Means++ 的初始化过程比随机选择初始中心点更复杂,但其计算复杂度仍然是可接受的,并且在大多数情况下,K-Means++ 能够显著减少 K-Means 算法的迭代次数。
K-Means++ 广泛应用于各种需要聚类的场景,特别是在以下领域:
-
图像处理:
- 用于图像分割、颜色量化等任务。
-
数据挖掘:
- 用于客户细分、市场分析等。
-
机器学习:
- 用于特征提取、降维等。
- 标准化与归一化:消除特征量纲差异,避免某些特征因数值范围大而主导距离计算(如使用Z-Score或Min-Max标准化)。
- 降维处理:通过PCA(主成分分析)、t-SNE或UMAP降低数据维度,去除冗余特征,提升计算效率。例如,在图像聚类中,PCA可提取关键像素特征。
- 离群值检测:使用LOF(局部离群因子)或Isolation Forest识别并剔除噪声点,避免干扰聚类中心计算。
- 领域知识嵌入:根据业务需求构造新特征。例如,在电商用户分群中,结合“购买频率”和“客单价”构造“用户价值指数”。
- 非线性特征提取:使用核方法(如核PCA)或深度学习(如Autoencoder)捕捉复杂关系。
- 距离度量优化:
- 数值数据:欧氏距离、曼哈顿距离。
- 文本数据:余弦相似度、Jaccard系数。
- 时序数据:动态时间规整(DTW)。
- 参数调优:
- K-means:通过肘部法(Elbow Method)或轮廓系数(Silhouette Score)选择最佳簇数K。
- DBSCAN:调整邻域半径(eps)和最小样本数(min_samples)以平衡噪声容忍度与簇密度。
- 共识聚类(Consensus Clustering,串行):多次运行不同算法(如K-means、层次聚类)并聚合结果,提升鲁棒性。
- 聚类融合(Cluster Ensemble,并行):对多个基聚类结果进行投票或加权,减少单一模型偏差。
- 深度聚类(Deep Clustering):使用自编码器(Autoencoder)或变分自编码器(VAE)提取低维特征后再聚类。例如,在图像数据中,VAE可生成潜在空间特征,再通过K-means分群。
- 预处理策略:针对实际长期现金流业务,设计针对性的预处理策略,持续提升完整算法解决方案的效果。
- 后处理策略:针对实际长期现金流业务,设计针对性的后处理策略,持续提升完整算法解决方案的效果。
- 聚类算法架构升级:针对工业界实际长期现金流业务、学术界研究课题、竞赛界顶级竞赛场景,研究升级聚类算法架构,从而从本质上提升聚类算法效果。
- 并行化处理:使用多线程或分布式计算框架(如Spark MLlib)加速距离计算。
- 近似算法:如MiniBatch K-means通过随机小批量数据更新质心,牺牲少量精度换取计算效率。
- 使用GPU:通过启用GPU来进行加速。
- 空间索引结构:对高维数据构建KD-Tree或Ball-Tree,加速近邻搜索(如DBSCAN的核心点查找)。
- 在线聚类:对数据流实时更新簇中心(如Streaming K-means),适用于物联网实时数据。
某电商平台需将用户分为“高价值”“潜在流失”“价格敏感”等群体,原始数据包含用户ID、购买次数、最近购买时间、平均消费金额。
-
数据预处理:
- 标准化:将“购买次数”和“平均消费金额”进行Min-Max归一化。
- 构造特征:计算“最近购买时间”与当前时间的差值作为“活跃度衰减指数”。
-
降维与可视化:
- 使用PCA将特征从4维降至2维,生成散点图观察分布。
-
算法选择:
- 尝试K-means(K=3)和DBSCAN(eps=0.5,min_samples=10),对比轮廓系数。
-
结果优化:
- K-means轮廓系数为0.62,DBSCAN为0.68,后者分离出噪声点(潜在流失用户)。
- 通过调整DBSCAN的eps=0.6,将“价格敏感用户”进一步细分。
- 聚类准确率提升15%,服务器计算时间从12秒缩短至3秒(使用MiniBatch K-means)。
- 应用场景:生成图像/文本的多样性控制。
- 技术方案:
- 对Stable Diffusion生成的图像提取CLIP特征向量,通过K-means聚类筛选多样性不足的样本,反向调整生成提示词。
- 例如,生成100张“森林风景”图片后,聚类发现80%集中于“针叶林”,可添加“热带雨林”“沙漠绿洲”等提示词优化多样性。
- 应用场景:无监督预训练的特征学习。
- 技术方案:
- 在自监督学习中,使用SimCLR框架对图像增广(裁剪、旋转)后,通过对比损失拉近同类样本特征,再对特征进行聚类(如DeepCluster),替代人工标注。
- 案例:在医学影像中,对未标注的X光片聚类,自动识别“正常”“肺炎”“结核”等类别。
- 应用场景:激光雷达点云物体检测。
- 技术方案:
- 对点云数据使用DBSCAN聚类,分割出车辆、行人、障碍物。优化方法包括:
- 体素降采样:将点云划分为3D网格,减少计算量。
- 距离自适应eps:近处物体使用较小eps以捕捉细节,远处使用较大eps避免过分割。
- 案例:Waymo通过改进的欧氏聚类算法,实时检测百米内的行人,误检率降低20%。
- 对点云数据使用DBSCAN聚类,分割出车辆、行人、障碍物。优化方法包括:
优化聚类算法需从数据、特征、算法、算力四方面入手,结合实际应用场景的领域知识调整算法解决方案的整体策略。在AIGC中,聚类帮助控制生成质量;在深度学习中,它是无监督学习的核心工具;在自动驾驶中,它是实时感知的基石。随着边缘计算与硬件加速的发展,聚类算法将在更多场景中实现低延迟、高精度的落地应用。
颜色距离是衡量两种颜色在视觉感知上的差异程度的指标,其核心在于选择合适的颜色空间和距离度量方法。
颜色距离的计算高度依赖于颜色空间的选择,常见颜色空间及对应距离计算方法如下:
-
RGB空间(物理驱动)
-
特点:直接对应显示设备的红、绿、蓝三通道,但不符合人类视觉感知的非线性特性。
-
距离公式:
-
欧氏距离:
$$d = \sqrt{(R_1 - R_2)^2 + (G_1 - G_2)^2 + (B_1 - B_2)^2}$$ -
曼哈顿距离:
$$d = |R_1 - R_2| + |G_1 - G_2| + |B_1 - B_2|$$
-
-
适用场景:快速计算但对感知差异不敏感,常用于硬件渲染或实时处理。
-
-
HSV/HSL空间(感知优化)
-
特点:将颜色分解为色相(Hue)、饱和度(Saturation)、明度(Value/Lightness),更贴近人类对颜色的描述。
-
距离公式:
由于色相是环形数值(0-360°),需特殊处理:$$d_H = \min(|H_1 - H_2|, 360 - |H_1 - H_2|)$$ 综合距离可加权计算:
$$d = \sqrt{w_H \cdot d_H^2 + w_S \cdot (S_1 - S_2)^2 + w_V \cdot (V_1 - V_2)^2}$$ (权重
$w_H, w_S, w_V$ 需根据场景调整,通常$w_H > w_S > w_V$ )
-
-
Lab空间(人眼感知一致性)
- 特点:由国际照明委员会(CIE)设计,L表示亮度,a、b表示色度,与人眼非线性响应匹配。
-
距离公式:
-
CIEDE2000:当前最精确的色差公式,考虑亮度、色相、饱和度权重及椭圆容差:
$$\Delta E_{00} = \sqrt{\left(\frac{\Delta L'}{k_L S_L}\right)^2 + \left(\frac{\Delta C'}{k_C S_C}\right)^2 + \left(\frac{\Delta H'}{k_H S_H}\right)^2 + R_T \frac{\Delta C'}{k_C S_C} \frac{\Delta H'}{k_H S_H}}$$ 其中
$S_L, S_C, S_H$ 为补偿函数,$k_L, k_C, k_H$ 为行业参数(通常取1)。
-
场景:某电商平台需检测商品主图是否因拍摄光线导致色差,要求自动筛选出与原图色差超过阈值(ΔE > 5)的图片。
步骤:
- 颜色空间选择:使用Lab空间,因其符合人类视觉感知。
- 色差计算:对图片进行网格采样(如每10像素取一点),计算每个采样点与原图对应位置的CIEDE2000色差。
- 阈值判定:若超过30%的采样点ΔE > 5,则判定为不合格。
代码片段(Python示例):
import numpy as np
from skimage import io, color
def calculate_color_difference(img1_path, img2_path):
img1 = io.imread(img1_path)
img2 = io.imread(img2_path)
img1_lab = color.rgb2lab(img1)
img2_lab = color.rgb2lab(img2)
delta_e = color.deltaE_ciede2000(img1_lab, img2_lab)
return np.mean(delta_e)
# 示例:计算两图平均色差
diff = calculate_color_difference("product_original.jpg", "product_photo.jpg")
print(f"平均色差 ΔE00: {diff:.2f}")-
AIGC(生成式AI)
- 应用场景:图像生成的颜色一致性控制。
- 技术细节:
- 在Diffusion模型训练中,通过Lab空间的ΔE损失约束生成图像与目标颜色的差异。
- 例如,生成虚拟服装时,需确保不同光照条件下的颜色一致性(ΔE < 3)。
- 案例:Stable Diffusion插件“ColorLock”通过实时计算色差,调整生成结果以匹配用户指定的Pantone色卡。
-
传统深度学习(图像分类/分割)
- 应用场景:医学图像中病灶区域检测。
- 技术细节:
- 使用HSV空间的色相距离区分正常组织(H=120°绿色)与病变区域(H=30°红色)。
- 分割网络(如U-Net)的损失函数中引入颜色距离权重,提升小目标检测精度。
- 案例:皮肤癌检测模型通过计算病变区域与健康皮肤的ΔE值,辅助判断恶性程度。
-
自动驾驶(环境感知)
- 应用场景:交通信号灯识别。
- 技术细节:
- 在YOLO检测框架中,对候选区域提取RGB颜色直方图,计算与红/绿/黄模板的巴氏距离(Bhattacharyya Distance)。
- 融合颜色距离与形状特征,提升雨天/逆光等复杂场景下的识别鲁棒性。
- 案例:特斯拉FSD系统通过动态调整颜色距离阈值(如夜间降低红色敏感度),减少误识别率。
朴素贝叶斯是一种基于贝叶斯定理的分类算法,其核心思想是假设特征之间相互独立(“朴素”假设),从而简化概率计算。以下是公式推导与关键步骤:
贝叶斯定理描述了如何通过已知条件概率计算后验概率:
-
$P(C_i)$ :类别$C_i$ 的先验概率。 -
$P(X | C_i)$ :在类别$C_i$ 下,特征$X$ 的条件概率。 -
$P(C_i | X)$ :后验概率,即在特征$X$ 下样本属于$C_i$ 的概率。 -
$P(X)$ :证据因子,对所有类别相同,可忽略比较。
假设特征
选择使后验概率最大的类别:
-
离散特征:通过频率统计。
$$P(X_j = x_j | C_i) = \frac{\text{类别 } C_i \text{ 中特征 } X_j = x_j \text{ 的样本数}}{\text{类别 } C_i \text{ 的总样本数}}$$ -
连续特征:假设服从高斯分布,用均值和方差估计概率密度。
$$P(X_j = x_j | C_i) = \frac{1}{\sqrt{2\pi\sigma_{i,j}^2}} \exp\left(-\frac{(x_j - \mu_{i,j})^2}{2\sigma_{i,j}^2}\right)$$
使用拉普拉斯平滑(Laplace Smoothing)避免未出现特征导致概率为零:
-
$\alpha$ :平滑参数(通常取1)。 -
$N$ :特征$X_j$ 的可能取值数。
将连乘转换为求和,避免小数相乘导致下溢:
假设训练数据包含以下邮件,判断新邮件是否为垃圾邮件。
| 邮件内容 | 类别 |
|---|---|
| “免费领取奖品” | 垃圾邮件 |
| “赢取现金大奖” | 垃圾邮件 |
| “明天开会讨论项目” | 正常邮件 |
| “查看项目文档” | 正常邮件 |
选择关键词:“免费”和“赢取”作为特征。
| 邮件内容 | 包含“免费” | 包含“赢取” | 类别 |
|---|---|---|---|
| “免费领取奖品” | 是(1) | 否(0) | 垃圾邮件 |
| “赢取现金大奖” | 否(0) | 是(1) | 垃圾邮件 |
| “明天开会讨论项目” | 否(0) | 否(0) | 正常邮件 |
| “查看项目文档” | 否(0) | 否(0) | 正常邮件 |
-
先验概率:
$$P(\text{垃圾邮件}) = \frac{2}{4} = 0.5, \quad P(\text{正常邮件}) = \frac{2}{4} = 0.5$$ -
条件概率(使用拉普拉斯平滑,
$\alpha = 1$ ):-
垃圾邮件:
$$P(\text{免费}=1 | \text{垃圾}) = \frac{1 + 1}{2 + 2} = 0.5$$ $$P(\text{赢取}=1 | \text{垃圾}) = \frac{1 + 1}{2 + 2} = 0.5$$ -
正常邮件:
$$P(\text{免费}=1 | \text{正常}) = \frac{0 + 1}{2 + 2} = 0.25$$ $$P(\text{赢取}=1 | \text{正常}) = \frac{0 + 1}{2 + 2} = 0.25$$
-
新邮件内容:“免费赢取现金”,包含“免费”和“赢取”。
-
计算后验概率:
-
垃圾邮件:
$$\log P(\text{垃圾} | X) = \log 0.5 + \log 0.5 + \log 0.5 = -1.732$$ -
正常邮件:
$$\log P(\text{正常} | X) = \log 0.5 + \log 0.25 + \log 0.25 = -2.773$$
-
-
结果:选择后验概率更大的类别,即垃圾邮件。
- 应用:自动生成文本的类别标注(如新闻分类、情感分析)。
- 实现:将文本分词后统计词频,通过朴素贝叶斯判断所属类别。
- 应用:作为基线模型验证特征有效性。
- 实现:与TF-IDF结合,用于垃圾邮件过滤或用户评论分类。
- 应用:传感器数据分类(如障碍物识别)。
- 实现:将激光雷达点云或摄像头图像提取特征后,分类为“车辆”“行人”等。
本质:通过组合多个基模型(Base Model)的预测结果,提升整体泛化能力、稳定性和准确率。其核心思想是“三个臭皮匠,顶个诸葛亮”——利用模型间的差异性(Diversity)和互补性减少过拟合风险,增强鲁棒性。
关键目标:降低方差(Bagging)、减小偏差(Boosting)、融合异构信息(Stacking/Blending)。
以下为六大主流融合方法的核心异同对比表,后附详细说明:
| 方法 | 代表算法 | 核心思想 | 训练方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|---|
| Bagging | 随机森林 | 并行训练,降低方差 | 有放回采样并行训练 | 抗噪强、不易过拟合 | 偏差可能较高 | 高方差模型(如决策树) |
| Boosting | AdaBoost, GBDT, XGBoost | 串行训练,降低偏差 | 迭代加权、关注错例 | 精度高、处理复杂模式 | 易受噪声影响、训练慢 | 结构化数据、弱模型提升 |
| 投票/平均法 | 硬投票、软投票、加权平均 | 统计多数或平均概率 | 独立训练后融合输出 | 简单高效、显存占用低 | 要求模型独立且多样 | 分类/回归任务、快速部署 |
| Stacking | 多层元学习器(如LR→GBDT) | 用基模型输出训练次级模型 | K折交叉验证防泄漏 | 捕捉非线性关系、精度提升显著 | 计算开销大、实现复杂 | Kaggle竞赛、异构模型融合 |
| Blending | 类似Stacking但用Holdout集 | 基模型训练后预测留出集训练元模型 | Holdout验证 | 防信息泄漏、实现简单 | 数据利用率低、元模型易过拟合 | 数据量大、团队协作场景 |
| 深度模型融合 | 最优传输(OT)、Logits蒸馏 | 参数/语义对齐+融合 | 对齐+加权平均 | 解决异构模型冲突、保留多模型知识 | 计算复杂、需设计对齐策略 | 大模型融合(如LLM+专家模型) |
- 核心:通过自助采样(Bootstrap)训练多个独立模型,聚合结果(分类投票,回归平均)。
- 代表算法:随机森林(额外加入特征采样)。
- 案例:预测房价时,10棵决策树分别训练不同样本子集,最终取预测均价,降低异常波动影响。
- 特点:降低方差,适合高方差模型(如深度决策树)。
- 核心:串行训练模型,后续模型聚焦前序模型的错误样本,加权聚合结果。
- 代表算法:AdaBoost(调整样本权重)、GBDT/XGBoost(梯度优化损失)。
- 案例:人脸识别中,首个模型识别简单正脸,后续模型逐步学习侧脸、遮挡等难例,集成后精度提升。
- 特点:降低偏差,但对噪声敏感。
- 硬投票:直接统计多数类别(适合分类)。
- 软投票:平均各类别概率(需模型输出概率)。
- 加权平均:按模型性能赋权(如AUC高的模型权重更大)。
- 案例:银行客户流失预测中,LR、SVM、RF三个模型的预测概率加权平均,提升稳定性。
- 核心:基模型输出作为次级模型的输入特征,训练元学习器(如LR、GBDT)。
- 关键:使用K折交叉验证防止信息泄露——基模型在折外预测生成训练集。
- 案例:Kaggle贷款违约预测中,用XGBoost、LightGBM、CatBoost的预测结果训练随机森林作为元模型,AUC提升3%。
- 类似Stacking,但用Holdout集(非交叉验证)训练元模型,简化流程但数据利用率低。
- 案例:团队协作中,成员各自训练模型并输出Holdout集预测结果,由协调者训练元模型。
- 最优传输(OT):对齐异构模型的神经元(如基于权重或激活相似性),再平均参数。
- Logits蒸馏:如InfiFusion框架对齐大模型输出分布,实现跨模型知识迁移。
- 应用:融合Qwen-Coder、Mistral等模型至Phi-4,提升数学和代码能力。
💡 关键差异总结
- 目标差异:Bagging减方差,Boosting降偏差,Stacking/Blending融合异构信息。
- 数据依赖:Boosting需串行迭代,Bagging/投票可并行。
- 复杂度:投票法<Blending<Stacking<深度融合。
任务:基于交易数据预测客户流失概率。
基模型选择:逻辑回归(捕捉线性特征)、随机森林(处理非线性)、梯度提升树(拟合复杂模式)。
融合策略对比:
- 硬投票:三模型直接投票,准确率85%
- 加权平均:按验证集AUC赋权(RF:0.4, GBDT:0.4, LR:0.2),准确率87%
- Stacking:以三模型输出为特征,训练GBDT元模型,准确率91%
结论:Stacking精度最高但耗资源;加权平均在实时系统中更常用。
- 应用需求:融合多专家模型生成高质量内容(文本、图像、视频)。
- 典型方法:
- Logits蒸馏(如InfiFusion):对齐LLM输出分布,融合Qwen-Coder和Mistral至Phi-4,数学能力提升4.8分。
- Stacking:扩散模型中,U-Net输出作为条件生成模型的输入,提升图像细节一致性。
- 案例:Stable Diffusion融合文本编码器和图像解码器,实现文生图多模态对齐。
- 应用需求:提升分类/检测精度,解决过拟合。
- 典型方法:
- Bagging:随机森林用于图像分类(如Kaggle花卉识别)。
- Boosting:XGBoost在表格数据竞赛中广泛使用。
- Stacking:目标检测竞赛中融合YOLO和Faster R-CNN,mAP提升5%。
- 案例:乳腺癌超声诊断中,融合双视角图像(RAD/ARAD)和放射报告文本,AUC达0.85,较单模态提升6-8%。
- 应用需求:融合多传感器数据,实现鲁棒感知与决策。
- 典型方法:
- 投票/平均法:融合摄像头、激光雷达的目标检测结果,减少漏检(如Tesla HydraNet)。
- Stacking:激光雷达点云投影图像 + 摄像头图像 → 次级模型输出3D检测框。
- 深度时序融合:如Hume框架(双系统架构)——系统2慢思考生成候选轨迹,系统1实时去噪执行,任务成功率91%。
- 案例:跨环境作物表型预测中,GPS框架融合基因组与表型数据,预测误差比单模型低53.4%。
- 核心差异:明确方法目标(方差/偏差/信息融合)和实现逻辑(并行/串行/分层)。
- 选型建议:
- 追求效率 → 投票/平均法
- 精度优先 → Stacking/Boosting
- 异构模型 → 最优传输/Logits蒸馏
- 领域适配:
- AIGC:关注分布对齐与知识蒸馏
- 传统任务:Bagging/Boosting应对表格数据,Stacking处理复杂模式
- 自动驾驶:多传感器时序融合是关键
- 趋势:自适应融合(AutoML)、多模态对齐(如InfiGFusion)、轻量化部署(手机端融合模型)。
⚡ 一句话总结:模型融合的核心是“扬长避短”——差异性是燃料,策略是引擎,领域需求是导航图。





