【文献阅读】Collective Decision for Open Set Recognition

基本信息

文献名称:Collective Decision for Open Set Recognition
出版期刊:IEEE TRANSACTIONS ON KNOWLEDGE AND DATA ENGINEERING
发表日期:04 March 2020
作者:Chuanxing Geng and Songcan Chen

摘要

在开集识别(OSR)中,几乎所有现有的方法都是专门为识别单个实例而设计的,即使这些实例是集体地成批出现的。识别者在决策中要么拒绝它们,要么使用经验设定的阈值将它们归类到某个已知的类。因此,决策阈值起着关键作用。然而,其选择往往依赖于已知类的知识,不可避免地会因缺乏未知类的可用信息而带来风险。另一方面,一个更现实的OSR系统不应该仅仅依赖于拒绝决策,而应该更进一步,特别是在发现拒绝实例中隐藏的未知类方面,而现有的OSR方法没有特别注意。提出了一种新的集体/批量决策策略,扩展了已有的OSR算法,并考虑了测试实例之间的相关性,实现了新类的发现.通过对层次狄利克雷过程(HDP)的改进,提出了一种基于集体决策的OSR框架(CD-OSR)。由于HDP的存在,我们的CD-OSR不需要定义判决阈值,可以同时实现开集识别和新类发现。最后,在基准数据集上的实验验证了CDOSR算法的有效性。

现在主要的方法

1.1-vs-Set Machine

核心思想:
基于支持向量机(SVM),通过引入“开放空间风险”(Open Space Risk)概念,限制已知类在特征空间的覆盖范围。
实现方式:
1.对每个已知类训练一个二元SVM,生成两个平行超平面(“A”和“B”),形成一个有限的“板层”(slab)区域。
2.测试实例若位于板层内,则分类为已知类;若位于板层外,则被拒绝为未知类。

在训练1-vs-Set机器之后,出现在两个超平面之间的测试实例将被标记为适当的类。否则,它将被视为非目标类或被拒绝,具体取决于它位于板的哪一侧。如第1节所述,1-vs-Set机器在一定程度上降低了开放空间风险。然而,它仍然占据着无限的空间,这意味着开放空间的风险仍然存在。

传统OSR方法的共同局限

阈值依赖:
分类边界依赖经验设定的阈值,缺乏对未知类分布的适应能力。
孤立决策:
逐个处理测试实例,忽略批次数据中的相关性信息。
无法发现新类:
仅能拒绝未知类,需额外步骤(如人工标注或后处理)才能发现新类。
静态模型:
训练后模型固定,无法动态适应新出现的类别。

COLLECTIVE DECISION FOR OPEN SET RECOGNITION(CD-OSR)

大概介绍

如前所述,当前现有的OSR方法是专门为识别单个实例而设计的,即使这些实例都是成批到达的。因此,决策中的识别器要么拒绝它们,要么使用预先设置的阈值将它们分类到某个已知的类实例中,其中这样的决策阈值起着关键作用。然而,它的选择通常是基于已知类的知识,不可避免地会产生风险,因为没有可用的信息从未知类。另一方面,一个更现实的OSR系统不应该仅仅停留在拒绝决策上,而应该更进一步,特别是在发现拒绝实例中隐藏的未知类方面。遗憾的是,现有的OSR方法没有给予太多关注。

为了克服这些局限性,我们引入了一种新的集体决策策略OSR问题的目的是扩展现有的开集识别新的类发现。具体地说,一个集体决策为基础的OSR框架(CD-OSR)提出了略有修改HDP。由于HDP的特性,我们的CD-OSR不需要定义决策阈值,可以自动为测试中的未知类预留空间,自然导致新的类发现功能。有趣的是,这也使得它能够同时处理OSR和新类发现。此外,对测试实例进行批量处理,使得CD-OSR考虑了现有方法明显忽略的实例之间的相关性。请注意,CD-OSR实际上可以处理批实例和单个实例。

接下来,我们首先简要回顾HDP,它广泛用于通过在组之间共享混合成分来对多组数据进行联合聚类。在HDP中,常用的术语是“组”或“组件”。然而,我们在这里适应HDP与轻微的修改OSR问题。在OSR场景下,“class”实际上对应于“group”,而“subclass”对应于“component”。

分层狄利克雷过程(HDP)的原理与公式推导

1.HDP的生成模型

HDP是一种层次化的贝叶斯非参数模型,用于建模多个组(groups)之间的共享结构。其核心思想是通过两个层次的Dirichlet过程(DP)实现组间子类的共享:
x j i x_{ji} xji的含义是观测数据,从参数 θ j i \theta _{ji} θji对应的分布 F ( θ j i ) F(\theta_{ji}) F(θji)中采样,然后,HDP框架完成如下:
G 0 G_0 G0是全局基分布(Global Base Distribution),由Dirichlet过程(DP)生成,参数为浓度参数 γ \gamma γ和基分布 H H H
G 0 ∣ γ , H ∼ D P ( γ , H ) G_0\mid \gamma ,H\sim \mathrm{DP(}\gamma ,H) G0γ,HDP(γ,H)
其作用是所有组(如不同类别)共享的全局子类分布。 G 0 G_0 G0是所有组中子类的“母版菜单”。

G j G_j Gj是组内分布,每个组 j j j的分布 G j G_j Gj由另一个Dirichlet过程生成,参数为浓度参数 α 0 \alpha_0 α0和基分布 G 0 G_0 G0
G j ∣ α 0 , G 0 ∼ D P ( α 0 , G 0 ) G_j\mid \alpha _0,G_0\sim \mathrm{DP(}\alpha _0,G_0) Gjα0,G0DP(α0,G0)
G j G_j Gj决定了组 j j j中子类的分布。 G j G_j Gj可以看做是从 G 0 G_0 G0中“继承”子类,但允许组内子类的个性化调整。

实例生成:
j j j中的实例 x j i x_{ji} xji的参数 θ j i \theta_{ji} θji G j G_j Gj中采样,数据 x j i x_{ji} xji由分布 F ( θ j i ) F(\theta_{ji}) F(θji)生成
θ j i ∣ G j ∼ G j , x j i ∣ θ j i ∼ F ( θ j i ) \theta _{ji}\mid G_j\sim G_j,\quad x_{ji}\mid \theta _{ji}\sim F(\theta _{ji}) θjiGjGj,xjiθjiF(θji)
下图是其图示结构
在这里插入图片描述

在这里插入图片描述

2. 中国餐馆特许经营Chinese Restaurant Franchise(CRF)

CRF实际上是在中国餐馆流程(CRP)的基础上扩展的,允许多个餐馆共享一套菜肴。
HDP的生成过程可以通过CRF直观解释:

  • 餐馆(组):每个组对应一个餐馆 j j j
  • 桌子(子类):每个餐馆中的桌子对应组内的子类 t j i t_{ji} tji
  • 菜品(全局子类参数):所有餐馆共享一个全局菜单,菜品对应全局子类的参数 ϕ k ∼ H \phi _k\sim H ϕkH
    顾客(实例 x j i x_{ji} xji)进入餐馆 j j j,选择一个桌子 t j i t_{ji} tji,桌子上提供菜品 ϕ k j t \phi _{kjt} ϕkjt。若桌子是新创建的,则从全局菜单中选择新菜品。

3.条件分布的推导

组内子类分布:
通过积分掉 G j G_j Gj G 0 G_0 G0,可以得到实例分配的条件分布:
θ j i ∣ θ j 1 , . . . , θ j , i − 1 , α 0 , G 0 ∼ ∑ t = 1 m j . n j t i − 1 + α 0 δ ψ j t + α 0 i − 1 + α 0 G 0 \theta _{ji}\mid \theta _{j1},...,\theta _{j,i-1},\alpha _0,G_0\sim \sum_{t=1}^{m_j.}{\frac{n_{jt}}{i-1+\alpha _0}\delta _{\psi _{jt}}}+\frac{\alpha _0}{i-1+\alpha _0}G_0 θjiθj1,...,θj,i1,α0,G0t=1mj.i1+α0njtδψjt+i1+α0α0G0
其中 n j t n_{jt} njt是组 j j j中桌子 t t t的顾客数, ψ j t \psi _{jt} ψjt是桌子的参数。
公式含义:实例 x j t x_{jt} xjt以概率 n j t i − 1 + α 0 \frac{njt}{i-1+\alpha _0} i1+α0njt分配到已有桌子,或以概率 α 0 i − 1 + α 0 \frac{\alpha _0}{i-1+\alpha _0} i1+α0α0创建新桌子。
全局子类分布:
ψ j t ∣ ψ 11 , . . . , ψ j − 1 , γ , H ∼ ∑ k = 1 K m . k m . . + γ δ ϕ k + γ m . . + γ H \psi _{jt}\mid \psi _{11},...,\psi _{j-1},\gamma ,H\sim \sum_{k=1}^K{\frac{m_{.k}}{m_{..}+\gamma}\delta _{\phi _k}}+\frac{\gamma}{m_{..}+\gamma}H ψjtψ11,...,ψj1,γ,Hk=1Km..+γm.kδϕk+m..+γγH

其中 m . k m_{.k} m.k是所有组中分配到菜品 ϕ k \phi _k ϕk的桌子数, m . . = ∑ k m . k m..=\sum_k{m._k} m..=km.k δ ϕ k \delta_{\phi _k} δϕk表示 ϕ k \phi _k ϕk处的狄拉克测度。
其表达的含义是,新桌子以概率 m ⋅ k m . . + γ \frac{m\cdot k}{m..+\gamma} m..+γmk选择已有菜品,或以概率 γ m . . . + γ \frac{\gamma}{m...+\gamma} m...+γγ生成新菜品 ϕ K + 1 ∼ H \phi _{K+1}\sim H ϕK+1H

Gibbs Sampling

在CD-OSR框架中,公式(10)和(11)是Gibbs采样过程的核心
在这里插入图片描述

论文中公式(10)的物理意义
在这里插入图片描述
物理意义:
分配到已有桌子:
概率与当前桌子的“人气”(顾客数 n j t n_{jt} njt)和生成该实例的似然成正比。
举例:若桌子 t t t上已有许多相似实例(高 n j t n_{jt} njt和高似然),新实例更可能加入该桌子。

(10)的第2行的公式表达的是,等号右边第一项是新的餐桌,点已有顾客点过的菜的概率之和。第二项是该新的餐桌点一道新的菜的概率。

公式(11)的物理意义
在这里插入图片描述

在这里插入图片描述
物理意义:
选择已有菜品:
概率与全局中该菜品的“流行度”(被选次数 m . k m_{.k} m.k)和生成数据的似然成正比。
举例:若菜品 k k k已被多个组使用(高 m . k m_{.k} m.k),新桌子更可能选择它。
在实际应用中:
在这里插入图片描述
由于上述分层狄利克雷过程(HDP)的性质适合我们的问题,我们在这里调整HDP略有修改,以解决OSR问题。因此,一个集体决策为基础的OSR框架(CD-OSR)的建议作为一个初步的解决方案,对集体决策的开集识别。具体地,CD-OSR如下工作。

中国餐馆特许经营(CRF)模型与HDP符号的对应关系

(1) 餐馆(Restaurant) ↔ 组(Group)

  • 每个餐馆对应HDP中的一个组(Group),例如一个已知类(如“猫”)或测试集。
  • j j j的分布 G j ∼ D P ( α 0 , G 0 ) G_j\sim \mathrm{DP(}\alpha _0,G_0) GjDP(α0,G0)

(2) 顾客(Customer) ↔ 实例 x j i x_{ji} xji

  • 顾客是进入餐馆的个体,对应数据实例 x j i x_{ji} xji(组 j j j中的第 i i i个实例)。
  • x j i ∼ F ( θ j i ) x_{ji}\sim F(\theta _{ji}) xjiF(θji),其中 θ j i \theta_{ji} θji是子参数。

(3) 桌子(Table) ↔ 子类分配 t j i t_{ji} tji

  • 桌子是组内的子类(Component),实例 x j i x_{ji} xji​被分配到某个桌子 t j i t_{ji} tji,对应子类归属。
  • θ j i = ψ j t j i \theta _{ji}=\psi _{jt_{ji}} θji=ψjtji(桌子参数)。

(4) 菜品(Dish) ↔ 全局子类参数 ϕ k \phi_k ϕk

  • 菜品是全局共享的子类参数 ϕ k \phi_k ϕk ,所有餐馆的桌子从同一份菜单选择菜品。
  • ψ j t = ϕ k j t \psi _{jt}=\phi _{kjt} ψjt=ϕkjt(桌子 t t t的菜品参数)。

(5) 菜单(Menu) ↔ 全局基分布 G 0 G_0 G0

  • 菜单是所有餐馆共享的全局子类分布 G 0 G_0 G0 ,由基分布 H H H生成。
  • G 0 ∼ D P ( γ , H ) G_0\sim \mathrm{DP(}\gamma ,H) G0DP(γ,H),菜单中的菜品是 ϕ 1 , ϕ 2 , . . . . \phi_1,\phi_2,.... ϕ1ϕ2,....

(6) 厨师长(Chef) ↔ 基分布 H H H

  • 厨师长决定菜品的生成规则,对应基分布 H H H ,由基分布 H H H(如高斯-威沙特分布)。
  • ϕ k ∼ H \phi _k\sim H ϕkH,每个菜品参数从 H H H中采样。

在这里插入图片描述

CD-OSR的实现与公式推导

CD-OSR原理

CD-OSR通过改进的HDP框架,将开放集识别转化为动态聚类问题,具体原理如下:

层次化子类共享

全局基分布 G 0 G_0 G0
所有组(已知类和测试集)共享一个全局子类分布 G 0 G_0 G0,由Dirichlet过程生成:
G 0 ∣ γ , H ∼ D P ( γ , H ) G_0\mid \gamma ,H\sim \mathrm{DP(}\gamma ,H) G0γ,HDP(γ,H)
其中 H H H是基分布(如高斯-威沙特分布), γ \gamma γ控制全局子类数量。
全局子类数量 G j G_j Gj
每个组 j j j已知类或测试集)的子类分布由 G 0 G_0 G0继承
G j ∣ α 0 , G 0 ∼ D P ( α 0 , G 0 ) G_j\mid \alpha _0,G_0\sim \mathrm{DP(}\alpha _0,G_0) Gjα0,G0DP(α0,G0)
α 0 \alpha_0 α0控制组内子类的生成频率,值越大,组内子类越多。

动态子类分配

通过Gibbs采样迭代更新以下变量:
1.测试实例的桌子分配 t j i t_{ji} tji:
决定实例属于已有子类还是新子类(公式10)。
2.桌子的菜品分配 k j t k_{jt} kjt
决定子类继承全局参数还是生成新参数(公式11)。

无需阈值的开放集识别

已知类判定:若测试实例分配到已知类的子类(对应某个 ϕ k \phi _k ϕk),则分类为已知类。
新类发现:若分配到新子类(从 H H H生成 ϕ K + 1 \phi _{K+1} ϕK+1),则标记为未知类,并扩展全局子类集合。

1.CD-OSR的核心

CD-OSR将HDP适配到开放集识别场景,主要修改如下:
组定义:每个已知类是一个组,测试集整体作为另一个组。
子类过滤:剔除占比过低的子类,防止过拟合。
分类规则:测试实例分配到已知类的子类则分类为已知类,否则标记为未知类。

2. 训练阶段

1.数据划分:
训练集分为拟合集 F \mathcal{F} F和验证集 V \mathcal{V} V,用于参数调优。
训练集:
已知类别的实例集合,每个类别单独分组。 X t r = { X 1 , X 2 , . . . , X J } X_{\mathrm{tr}}=\{X_1,X_2,...,X_J\} Xtr={X1,X2,...,XJ},其中 X j X_j Xj表示第 j j j个已知类的实例集。
测试集:
待分类的实例集合,可能包含已知类和未知类。
X t s = { x 1 , x 2 , . . . , x N } X_{\mathrm{ts}}=\{x_1,x_2,...,x_N\} Xts={x1,x2,...,xN}
超参数:
HDP的浓度参数: α 0 \alpha_0 α0(控制组内子类数量), γ \gamma γ(控制全局子类共享程度)。
基分布 H H H的参数(如高斯-威沙特分布的 μ 0 , Σ 0 , β , ν ) \mu _0,\Sigma _0,\beta ,\nu) μ0,Σ0,β,ν)
子类过滤阈值 ϵ \epsilon ϵ(如 ϵ = 0.01 \epsilon=0.01 ϵ=0.01,过滤占比过低的子类)

2.参数初始化:
基分布 H H H设为高斯-威沙特分布:
H = N ( μ ∣ μ 0 , ( β Σ ) − 1 ) ⋅ W ( Σ ∣ Σ 0 , ν ) H=\mathcal{N} (\mu \mid \mu _0,(\beta \Sigma )^{-1})\cdot \mathcal{W} (\Sigma \mid \Sigma _0,\nu ) H=N(μμ0,(βΣ)1)W(ΣΣ0,ν)

3.测试阶段

1.测试集作为新组输入
输入形式:
测试集整体被视为一个新的组(称为“Testing-set组”),与训练集的已知类组(如Class 1-4)共同参与共聚类。
作用:
将测试实例的分布与已知类分布对齐,利用全局子类共享机制实现分类。
2.共聚类(Co-clustering)
过程:
使用Gibbs采样对测试集和已知类组进行联合建模,动态分配实例到子类。具体操作包括:
更新桌子分配(公式10):测试实例可能分配到已知类的子类(已有桌子)或创建新子类(新桌子)。
更新菜品分配(公式11):新子类继承全局参数或生成新参数。
输出:
测试实例的子类归属,以及全局子类参数的更新。
3.分类决策
规则:
若测试实例分配到已知类组的子类,则分类为该已知类。
若分配到测试集组的新子类(从基分布 H H H生成),则标记为未知类
4.新类发现
统计新子类数目:
测试集中新子类的数量反映潜在未知类的存在。例如,若测试集组有5个新子类,可能对应1个未知类(假设每个类有多个子类)。
估计公式:
Δ = ⌈ ∣ S u n k n o w n ∣ ∣ S k n o w n ∣ / ( J − 1 ) ⌉ \left. \Delta =\left. \lceil \frac{|S_{\mathrm{unknown}}|}{|S_{\mathrm{known}}|/(J-1)} \right. \right. \rceil Δ=Sknown∣/(J1)Sunknown
其中 ∣ S u n k n o w n ∣ |S_{\mathrm{unknown}}| Sunknown是测试集的新子类数, ∣ S k n o w n ∣ |S_{\mathrm{known}}| Sknown是已知类的子类总数, J − 1 J-1 J1是已知类数量。
在这里插入图片描述
图2直观展示了CD-OSR框架在测试阶段的共聚类过程,具体元素如下:

组(Groups):
已知类组:如Class 1-4,每个类作为独立组,内部包含若干子类(如Class 1有子类A、B)。
测试集组(Testing-set):作为新组参与聚类,其子类可能部分与已知类共享,部分为新生成。
子类(Subclasses):
已知子类(Known subclasses):用实心圆表示,颜色与已知类对应(如Class 1为蓝色)。
新子类(New subclasses):用不同颜色的圆表示,属于测试集组独有的子类。
共享关系:
无连线的新子类:表示测试集中的未知类(如子类D仅属于Testing-set)。
分类结果示例:
测试实例分配到子类A(属于Class 1)→ 分类为已知类。
测试实例分配到子类D(新子类)→ 标记为未知类。

CD-OSR的伪代码

在这里插入图片描述
1.首先对参数进行初始化

1. 输入训练集 X_tr 和测试集 X_ts,按实验协议划分(如Section 4.1.1)。
2. 按类别标签将训练集 X_tr 划分为组:X_tr = [X_tr1, X_tr2, ...](每个组对应一个已知类)。
3. 初始化参数:
   - 基分布 H 的参数:μ0(训练集均值),Σ0(缩放后的协方差矩阵,公式13),β=1,ν通过网格搜索选择。
   - 浓度参数:α0 ~ Gamma(10,1),γ ~ Gamma(100,1)- 迭代次数 T = 30,初始子类数 InS = 30- 子类过滤阈值 ε = 0.01

2.然后进行共聚类

 - 将训练集和测试集合并为输入数据:Data = [X_tr; X_ts]
 - 调用HDP软件包(如Teh的代码)进行共聚类:
   Results = HDP(Data, α0, γ, H, InS, T)
   其中:
 - HDP框架对每个组(已知类和测试集)建模。
 - 迭代T次Gibbs采样,更新子类分配。

Gibbs采样迭代:

  • 对每个实例 x j i x_{ji} xji,按公式(10)更新桌子分配 t j i t_{ji} tji
  • 对每个新桌子 t n e w t^{new} tnew,按公式(11)更新菜品分配。
  • 更新全局子类参数 ϕ k \phi _{k} ϕk (如高斯分布的均值和协方差)。

作用:
训练集和测试集共同参与聚类,动态分配子类。

测试集的新子类反映潜在未知类。
3.确定子类(Determining the Subclasses)

6. 后处理共聚类结果:
   for 每个组 j 的每个子类 s:
      计算子类 s 在组 j 中的占比 ρ = (子类s的实例数) / (组j的总实例数)
      if ρ < ε:
          移除该子类 s

作用:
过滤掉占比过低的子类(如噪声或离群点),提升模型鲁棒性。

例如,若某子类仅占0.5%的实例(ε=0.01),则被剔除。
4.预测

7. 对新实例 x_new 进行分类:
   a. 将 x_new 加入测试集组,重新运行共聚类(仅更新局部分配)。
   b. 根据分配结果:
      if x_new 的子类属于某个已知类 j 的子类 s:
          标记为类 j
      else:
          标记为未知类,并记录新子类参数
8. 估计未知类数目 Δ(公式14):
   Δ = ceil(|S_unknown| / (|S_known| / (J-1)))

作用:

新实例的分类基于其子类归属,无需人工设定阈值。

新子类的数量通过全局子类比例估计未知类数目。
在这里插入图片描述

结论

本文的主要贡献是提出了一种集体/分批决策的开集识别策略,旨在将现有的开集识别扩展到新的类发现中,同时考虑测试实例之间的相关性。为了实现这一目标,我们将HDP稍作修改以解决OSR问题,从而为OSR中的集体决策提供了初步解决方案。需要强调的是,我们的CD-OSR并不过分依赖于训练数据,并且能够随着数据的变化而实现自适应变化。更准确地说,CD-OSR可以为测试中出现的未知类提供显式建模。这自然会导致新的类发现功能,即使它只是在子类级别。此外,与现有方法从判别模型的角度处理OSR问题不同,CD-OSR实际上是从生成模型的角度来解决这一问题的,这是由于使用了HDP。最后,在一组标准数据集上的实验结果表明了该学习框架的有效性.

此外,应该注意的是,建模未知类只在我们的CD-OSR的测试阶段进行,而在训练阶段没有利用未知类的可用知识。这在某种程度上似乎带有懒惰的味道。因此,克服这一局限性将是未来一个很有前途的研究方向。此外,由于CDOSR目前没有充分利用来自已知类别标签的判别信息,因此更有效地嵌入此类信息也值得进一步探索。此外,用可扩展的确定性推理技术取代Gibbs采样器也是未来工作的一个很有前途的方向。总之,CDOSR只是目前对开集识别向集体决策发展的一个概念性证明。因此,更有效的OSR集体决策方法值得在未来的工作中进一步探索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop之02:MR-图解

1、不是所有的MR都适合combine 1.1、map端统计出了不同班级的每个学生的年龄 如&#xff1a;(class1, 14)表示class1班的一个学生的年龄是14岁。 第一个map任务&#xff1a; class1 14 class1 15 class1 16 class2 10第二个map任务&#xff1a; class1 16 class2 10 class…

代码随想录Day23 | 39.组合总和、40.组合总和II、131.分割回文串

39.组合总和 自己写的代码&#xff1a; class Solution { public:vector<int> path;vector<vector<int>> res;int sum0;void backtracking(vector<int>& candidates,int target,int startIndex){if(sum>target) return;if(sumtarget){res.pus…

【MySQL】索引(页目录、B+树)

文章目录 1. 引入索引2. MySQL与磁盘交互的基本单位3. 索引的理解3.1 页目录3.2 B树 4. 聚簇索引、非聚簇索引5. 索引的操作5.1 索引的创建5.1.1 创建主键索引5.1.2 创建唯一索引5.1.3 普通索引的创建5.1.4 全文索引的创建 5.2 索引的查询5.3 删除索引 1. 引入索引 索引&#…

132. 分割回文串 II

简单分析 输入的参数是字符串s&#xff0c;返回值是最小的切割次数。那这个问题的典型解法应该是动态规划&#xff0c;因为我们需要找最优解&#xff0c;而每一步的选择可能会影响后面的结果&#xff0c;但可以通过子问题的最优解来构建整体最优解。 那么动态规划的状态如何定…

CSS定位详解

1. 相对定位 1.1 如何设置相对定位&#xff1f; 给元素设置 position:relative 即可实现相对定位。 可以使用 left 、 right 、 top 、 bottom 四个属性调整位置。 1.2 相对定位的参考点在哪里&#xff1f; 相对自己原来的位置 1.3 相对定位的特点&#xff1…

NLP11-命名实体识别(NER)概述

目录 一、序列标注任务 常见子任务 二、 命名实体识别&#xff08;NER&#xff09; &#xff08;一&#xff09;简介 &#xff08;二&#xff09;目标 &#xff08;三&#xff09;应用场景 &#xff08;四&#xff09;基本方法 &#xff08;五&#xff09;工具与资源 一…

基于SQL数据库的酒店管理系统

一、数据库设计 1&#xff0e;需求分析 客房的预定&#xff1a;可以通过网络进行预定&#xff0c;预定修改&#xff0c;取消预订。 客房管理&#xff1a;预定管理、客房查询、设置房态、开房、换房、续住、退房等管理。 员工管理: 员工修改信息、人员调配。 账务管理&…

2024年中国城市统计年鉴(PDF+excel)

2024年中国城市统计年鉴&#xff08;PDFexcel&#xff09; 说明&#xff1a;包括地级县级市 格式&#xff1a;PDFEXCEL 《中国城市统计年鉴》是一部全面反映中国城市发展状况的官方统计出版物&#xff0c;包括各级城市的详细统计数据。这部年鉴自1985年开始出版&#xff0c;…

1.C语言初识

C语言初识 C语言初识基础知识hello world数据类型变量、常量变量命名变量分类变量的使用变量的作用域 常量字符字符串转义字符 选择语句循环语句 函数&#xff1b;数组函数数组数组下标 操作符操作符算术操作符移位操作符、位操作符赋值操作符单目操作符关系操作符逻辑操作符条…

LINUX基础 - 网络基础 [一]

前言 在当今的数字化世界中&#xff0c;网络已成为计算机系统和应用的核心组成部分。Linux&#xff0c;作为一个开放源代码的操作系统&#xff0c;在服务器、嵌入式设备、以及开发环境中被广泛使用&#xff0c;而其强大的网络能力使其在网络管理和网络编程领域占据了重要地位。…

苹果廉价机型 iPhone 16e 影像系统深度解析

【人像拍摄差异】 尽管iPhone 16e支持后期焦点调整功能&#xff0c;但用户无法像iPhone 16系列那样通过点击屏幕实时切换拍摄主体。前置摄像头同样缺失人像深度控制功能&#xff0c;不过TrueTone原彩闪光灯系统在前后摄均有保留。 很多人都高估了 iPhone 的安全性&#xff0c;查…

游戏引擎学习第128天

开始 然而&#xff0c;我们仍然有一些工作要做&#xff0c;渲染部分并没有完全完成。虽然现在已经能够运行游戏&#xff0c;而且帧率已经可以接受&#xff0c;但仍然有一些东西需要进一步完善。正在使用调试构建编译版本&#xff0c;虽然调试版本的性能不如优化版本&#xff0…

几个api

几个api 原型链 可以阅读此文 Function instanceof Object // true Object instanceof Function // true Object.prototype.isPrototypeOf(Function) // true Function.prototype.isPrototypeOf(Object) // true Object.__proto__ Function.prototype // true Function.pro…

用DeepSeeker + AI app工具自动生成 APP代码

作为上海嘉冰信息技术有限公司创始人&#xff0c;我想做一个AI美食点评类APP&#xff0c;用户可以上传自己的美食图片并生成相应的AI美食点评&#xff0c;可以帮我详细描述一下这个APP&#xff0c;用于方便我的企业B端客户开拓本地生活的内容市场。 AI美食点评APP&#xff1a;开…

布署elfk-准备工作

建议申请5台机器部署elfk&#xff1a; filebeat(每台app)--> logstash(2台keepalived)--> elasticsearch(3台)--> kibana(部署es上)采集输出 处理转发 分布式存储 展示 ELK中文社区: 搜索客&#xff0c;搜索人自己的社区 官方…

利用PyQt简单的实现一个机器人的关节JOG界面

在上一篇文章中如何在Python用Plot画出一个简单的机器人模型&#xff0c;我们介绍了如何在Python中画出一个简单的机器人3D模型&#xff0c;但是有的时候我们需要通过界面去控制机器人每一个轴的转动&#xff0c;并实时的显示出当前机器人的关节位置和末端笛卡尔位姿。 那么要实…

制造业中的“大数据”:如何实现精准决策?

在当今全球经济竞争日趋激烈、技术变革周期不断缩短的环境下&#xff0c;制造业面临着全新的挑战和机遇。随着信息技术的飞速发展&#xff0c;“大数据”正以前所未有的速度渗透到制造业的各个环节&#xff0c;帮助企业实现更精准的决策、更灵活的生产组织以及更敏捷的市场响应…

【沙漠之心:揭秘尘封奇迹的终极之旅】

在地球的边缘,横亘着一片浩瀚无垠的沙漠,它既是生命的绝域,亦是奇迹孕育的秘境。这片广袤的沙漠,以其神秘莫测的面貌,自古以来便吸引着无数探险家、旅行者和梦想家的目光。它既是生命的禁区,让无数生命在这片不毛之地中消逝;同时,它也是奇迹的摇篮,孕育着无数未被发现…

线程控制(创建、终止、等待、分离)

目录 1.前言 2.创建线程 pthread_create函数 3.线程终止 pthread_exit函数 pthread_cancel函数 4.线程等待 5.线程分离 1.前言 在Linux系统中&#xff0c;并不存在真正的线程&#xff0c;只有轻量级进程。所以&#xff0c;Linux系统只提供了操作轻量级进程的系统调用…

有关Java中的集合(1):List<T>和Set<T>

学习目标 核心掌握List集合了解Set集合 1.List<T> ● java.util.List。有序列表。 ● List集合元素的特点&#xff1a;有序表示存取有序&#xff08;因为有索引&#xff09;而且可以重复 ● List常用实现类&#xff1a; ArrayList、LinkedList、Vector等 1.1 常用方法…