基于正样本和无标签样本比例的弱监督学习研究

立即解锁
发布时间: 2025-09-07 01:05:38 阅读量: 3 订阅数: 22 AIGC
### 基于正样本和无标签样本比例的弱监督学习研究 #### 1. 正样本和无标签样本比例学习问题介绍 正样本和无标签样本比例学习(PUP)问题与标签比例学习和正样本 - 无标签学习范式有相似之处。该问题由一组 $n$ 个预测变量 $(X_1, \ldots, X_n)$ 和一个类别变量 $C$ 描述。实例空间 $X$ 是所有预测变量可能取值的集合,由于问题是二分类的,标签空间 $C = \{-, +\}$。一个问题示例 $(x, c)$ 是一个 $(n + 1)$ 元组,它为每个变量赋值,并且假设是从某个潜在概率分布中独立同分布采样得到的。 在这个弱监督范式中,可用的训练数据集 $D$ 中的示例被分组到 $b$ 个包中,即 $D = B_1 \cup B_2 \cup \cdots \cup B_b$,且 $B_i \cap B_j = \varnothing$,$\forall i \neq j$。每个包 $B_i = \{x_1, x_2, \ldots, x_{m_i}\}$ 包含 $m_i$ 个示例,关联的 $m_i^+$ 值($m_i^+ \leq m_i$)表示包 $B_i$ 中正样本的最小数量。包 $B_i$ 中其余的 $(m_i - m_i^+)$ 个示例是无标签的,其类别标签未知。这里部分可观测性问题仅限于类别变量,假设预测变量是完全可观测的。目标是学习一个分类器,用于推断新的未见过示例的标签。 当 $m_i^+ = m_i$ 时,包 $B_i$ 中示例的标签是确定的,即所有示例都是正样本。文中使用“一致完成”来指代为包 $B_i$ 中的示例分配标签,且满足正样本数量至少为 $m_i^+$ 的 $m_i$ 元组。 #### 2. 基于结构期望最大化(SEM)的贝叶斯网络分类器学习方法 提出了一种基于结构期望最大化(SEM)策略的学习算法,该算法迭代地交替估计每个包中示例的最可能标签(根据 $m_i^+$)和改进学习到的模型。使用了三种贝叶斯网络模型作为概率分类器:朴素贝叶斯(NB)、树增强朴素贝叶斯(TAN)和 K - 依赖贝叶斯网络(KDB)。 贝叶斯网络由 $(G, \theta)$ 表示,是一个概率图模型,使用有向无环图(DAG)对一组随机变量 $V$ 之间的条件依赖关系进行编码。图结构 $G = (V, R)$ 编码了节点 $V = (X_1, \ldots, X_n, C)$(随机变量)之间的弧 $R$(条件依赖关系),$\theta$ 是图中每个变量给定其父节点的条件概率函数的参数集。选择这些模型是因为贝叶斯网络模型具有显著的可解释性,可以从显式的概率关系中推断变量之间的影响和依赖关系。 考虑的贝叶斯网络分类器的一般分类规则为: $\hat{c} = h(x) = \arg\max_{c} p(C = c) \prod_{v = 1}^{n} p(X_v = x_v | PA(X_v) = pa(x_v), C = c)$ 其中 $pa(x_v)$ 是示例 $x$ 中分配给网络结构中 $X_v$ 的父节点预测变量的值向量。 基于预测变量在给定类别变量条件下的独立性假设,朴素贝叶斯在考虑的贝叶斯网络分类器中具有最简单的网络结构。TAN 和 KDB 在网络结构复杂度上更进一步,允许模型捕捉预测变量之间的一些条件依赖关系。 SEM 策略为从弱标签数据中推断贝叶斯网络分类器的图结构和模型参数提供了一个合适的框架。EM 策略用于从这种弱监督数据中获得最大似然参数。迭代地,该方法根据当前模型的拟合情况计算每个示例不同标签分配的概率,并重新估计模型参数。在相当一般的条件下,似然的迭代增量已被证明会收敛到一个平稳值(大多数情况下是局部最大值)。此外,SEM 策略在经典 EM 的参数收敛循环中加入了一个外循环,迭代地改进初始提出的结构。 以下是 SEM 方法的伪代码: ```plaintext 1: procedure StructuralEM(D, maxIt, ϵ) ▷ D: PUP 数据集 ▷ maxIt: 最大迭代次数 ▷ ϵ: 阈值(停止条件) 2: ˆD0 ← initialLabeling(D) 3: M ≡ (G0, θ0) ← standardLearning(ˆD0) 4: repeat 5: repeat 6: ˆDj ← completionEstimating(D, M ≡ (Gi, θj−1)) 7: θj ← parametricLearning(ˆDj, Gi) 8: until (diff(θj, θj−1) < ϵ) Or (j = maxIt) 9: Gi ← findMaxNeighborStructure(ˆDj, Gi−1) 10: until (Gi = Gi−1) Or (i = maxIt) 11: return M ≡ (Gi, θj) 12: end procedure ``` #### 3. 训练示例的概率完成 算法 1 中第 6 行的过程为每个包 $B_i$ 计算一个可靠的联合标签,使用当前模型的概率预测并满足正样本的最小数量 $m_i^+$。当 $m_i^+$ 趋近于 $m_i$ 时,PUP 类别信息可以排除更多包 $B_i$ 中示例的标签分配。在没有任何类别信息的情况下,一组 $m_i$ 个示例的可能标签分配数量为 $|C|^{m_i}$(在二分类问题中,$|C| = 2$)。如果这组 $m_i$ 个示例构成一个具有特定 $m_i^+$ 的包 $B_i$,则可能的标签分配数量减少为: $2^{m_i} - \sum_{h = 0}^{m_i^+ - 1} \binom{m_i}{h}$ 这种减少意味着要考虑包中所有示例的联合标签分配。考虑的联合分配集合由包 $B_i$ 的所有一致完成组成。一个一致完成由一个标签元组 $e = (e_1, e_2, \ldots, e_{m_i})$ 表示,其中每个 $e_j$ 是分配给包 $B_i$ 中第 $j$ 个实例的类别值,并且满足正标签的最小数量(至少 $m_i^+$ 个标签 $e_j \in e$ 为正)。因此,为包 $B_i$ 中的示例 $x_j$ 分配标签 $c$ 的概率必须与包中其余示例一起联合计算。根据独立同分布采样假设,包 $B_i$ 中示例的类别分配 $e$ 的联合概率可以计算为每个类别标签 $e_j$ 给定其相应示例 $x_j \in B_i$ 的条件概率的乘积: $p(e|B_i) = \prod_{j = 1}^{m_i} p(C = e_j | X_1 = x_{j1}, \ldots, X_n = x_{jn})$ 方法为每个包构建一个概率一致完成 $E$。概率一致完成 $E$ 以概率 $E_{jc}$ 将示例 $x_j$ 分配到类别标签 $c$,其中 $\sum_{c \in \{-, +\}} E_{jc} = 1$ 且 $E_{jc} \geq 0$,$\forall x_j \in B_i$ 和 $\forall c \in \{-, +\}$,使得 $\sum_{j = 1}^{m_i} E_{j+} \geq m_i^+$。对于每个包 $B_i$,方法根据上述公式获得每个非概率一致完成 $e$ 的联合概率。然后,概率 $E_{jc}$ 计算为所有将标签 $c$ 分配给示例 $x_j$ 的一致完成的联合概率的归一化总和: $E_{jc} = \frac{\sum_{e|e_j = c} p(e|B_i)}{\sum_{e} p(e|B_i)}$ 得到的概率一致完成用于为包 $B_i$ 中的示例分配标签。 由于一致完成的数量呈指数增长,当 $m_i$ 增大且 $m_i^+$ 减小时,这种方法变得不可行。对于不可行的包,提出了一种时间复杂度几乎不变的近似解决方案,使用马尔可夫链蒙特卡罗(MCMC)近似。MCMC 通过马尔可夫链近似感兴趣的概率分布,并使用从马尔可夫链中抽取的样本估计期望值。 在计算期望值(概率一致完成 $E$)时,不考虑前 $b_i$ 个样本,这个阶段称为“预热”,假设是达到模拟感兴趣概率分布的平稳分布所需的间隔。采样其他 $s$ 个完成来估计概率一致完成。在每一步,从 $e_t$ 的邻域中随机选择一个新样本 $e_{t + 1}$,邻域由通过以下两种方式获得的一致完成组成:(1)改变一个标签 $e_{tj}$ 的符号(如果仍满足 $m_i^+$);(2)交换两个不同符号的标签 $e_{tj}$ 和 $e_{tj'}$。实现了一个拒绝 MCMC 过程,新样本 $e_{t + 1}$ 以概率 $\max(0, p(e_t|B_i) - p(e_{t + 1}|B_i))$ 被拒绝。如果被拒绝,则复制前一个样本 $e_t$。可以证明这个方法满足保证序列收敛的条件。 最终的完成 $E$ 估计为将每个 $x_j \in B_i$ 分配到每个 $c \in \{-, +\}$ 的样本比例: $E_{jc} = \frac{1}{s} \sum_{t = b_i + 1}^{b_i + s} \mathbb{1}[e_{tj} = c]$ 在最终方法中,对于一致完成数量大于 $b_i + s$ 的包,使用基于 MCMC 的近似方法;对于其余包,使用精确方法。 #### 4. 实验 实验的主要目的是评估方法在不同类别不确定性实验条件下的性能。由于缺乏公开可用的真实 PUP 数据集,使用人工生成的数据进行评估。具体步骤如下: 1. **生成合成数据集**:随机生成 9 个生成模型,每种贝叶斯网络分类器类型(NB、TAN 和 2DB)各 3 个。所有模型都包含 10 个二进制预测变量和 1 个二进制类别变量。TAN 和 2DB 结构随机生成,其模型参数通过采样所有超参数都为 1 的狄利克雷分布随机获得。考虑三种样本大小(100、250 和 500),从每个生成模型和每个样本大小中采样 10 个数据集,共采样 90 个完全标记的数据集(9 个生成模型 × 10 次重复)× 3 种样本大小。 2. **聚合不同类别不确定性场景**:涉及三个参数,分别为包大小 $m_i = \{3, 6, 9, 15, 21\}$、移除正样本标签的全局比例 $r^+ = \{0.0, 0.25, 0.5, 0.75\}$ 和正样本在包中的分布 $h = \{0.0, 0.25, 0.5, 0.75\}$。为每个完全标记的数据集和这三个参数的配置随机生成 10 种不同的聚合。 3. **学习分类器并评估**:从每个聚合场景的结果数据集中学习三种贝叶斯网络分类器(NB、TAN 和 2DB)。所有实验在 10×5 折交叉验证过程中进行评估,先聚合包,然后构建交叉验证折,以保证 PUP 数据集的包划分得到尊重。 SEM 方法使用两个参数:参数收敛阈值设置为 0.1%,结构和参数收敛的最大迭代次数固定为 200 次。MCMC 过程的参数设置为预热样本数 $b_i = 100$,用于估计完成的样本数 $s = 1000$。 实验结果如下: - **$r^+$ 参数的影响**:固定 $m_i = 9$ 和 $h = 0.5$,评估方法在 $r^+$ 值不断增加的场景中的性能。结果用准确率和 F1 指标表示。 - **$h$ 参数的影响**:固定 $m_i = 9$ 和 $r^+ = 0.5$,评估方法在不同 $h$ 值生成的场景中的性能,结果同样用准确率和 F1 指标表示。 - **$m_i$ 参数的影响**:固定 $r^+ = 0.5$ 和 $h = 0.5$,改变 $m_i$ 参数的值来聚合一系列 PUP 场景,评估方法性能。 实验结果讨论: - **$r^+$ 和 $h$ 参数的影响**:$r^+$ 和 $h$ 参数都会影响聚合包的平均一致完成数量(即整个数据集的类别不确定性),可能也会影响推断的 PUP 场景的复杂度。实际上,$r^+$ 直接减少了标记(正)示例的数量。但在实践中,$r^+$ 和 $h$ 对学习到的分类器性能的影响似乎相似且有限。只有在样本量较小($m = 100$)且为任何一个参数分配较大值时(识别示例真实标签的难度增加),才会观察到分类器性能下降。这表明当提供足够的示例时,方法具有稳定性。 - **MCMC 近似方法的可靠性**:近似 MCMC 方法能够成功处理大的包大小 $m_i = \{15, 21\}$。除了随着 $m_i$ 增加结果预期的下降趋势外,使用这种近似方法不会导致方法性能出现异常下降。而且,随着数据集大小的增加,学习到的分类器性能得到提升,与用于估计概率一致完成的方法(精确或近似)无关。这表明 MCMC 过程的可靠性。 - **不同类型贝叶斯网络分类器的性能**:在训练示例较少时,NB 分类器在准确率和 F1 指标上表现最佳。随着样本量的增加,具有更复杂网络结构的 TAN 和 2DB 分类器似乎更能拟合生成概率分布。所有类型的贝叶斯网络分类器的性能都随着数据集的增大而提升,但 TAN 和 2DB 分类器的提升更为明显。对于其他参数值的变化,所有分类器表现出相似的响应。总之,在这些实验中,NB 是最稳健的贝叶斯网络类型,而在高样本量的情况下,TAN 和 2DB 分类器优于 NB。 #### 5. 总结 介绍了一种新颖的弱监督分类问题,即从正样本和无标签样本比例中学习。提出了一种基于 EM 的方法来学习贝叶斯网络分类器,通过实验验证了该方法在不同类别不确定性场景下的有效性和稳定性,同时分析了不同参数和不同类型分类器对性能的影响。 以下是实验参数设置的表格总结: | 参数 | 取值范围 | | ---- | ---- | | $m_i$ | $\{3, 6, 9, 15, 21\}$ | | $r^+$ | $\{0.0, 0.25, 0.5, 0.75\}$ | | $h$ | $\{0.0, 0.25, 0.5, 0.75\}$ | | 样本大小 | $\{100, 250, 500\}$ | | SEM 收敛阈值 | $0.1\%$ | | SEM 最大迭代次数 | $200$ | | MCMC 预热样本数 $b_i$ | $100$ | | MCMC 估计样本数 $s$ | $1000$ | 下面是 SEM 算法的 mermaid 流程图: ```mermaid graph TD; A[开始] --> B[初始化数据集标签 ˆD0]; B --> C[使用 ˆD0 估计初始模型 M = (G0, θ0)]; C --> D{是否满足停止条件}; D -- 否 --> E{是否满足参数收敛条件}; E -- 否 --> F[估计训练示例完成 ˆDj]; F --> G[从 ˆDj 估计模型参数 θj]; G --> E; E -- 是 --> H[寻找最大邻域结构 Gi]; H --> D; D -- 是 --> I[返回最终模型 M = (Gi, θj)]; I --> J[结束]; ``` ### 基于正样本和无标签样本比例的弱监督学习研究 #### 6. 关键技术点分析 在整个研究中,有几个关键的技术点对结果起到了重要作用,下面进行详细分析。 ##### 6.1 贝叶斯网络模型选择 在实验中使用了三种贝叶斯网络模型:朴素贝叶斯(NB)、树增强朴素贝叶斯(TAN)和 K - 依赖贝叶斯网络(KDB)。它们各有特点: - **朴素贝叶斯(NB)**:基于预测变量在给定类别变量条件下的独立性假设,具有最简单的网络结构。在训练示例较少时,它表现出很好的稳健性,能够在数据有限的情况下提供相对稳定的分类结果。 - **树增强朴素贝叶斯(TAN)**:在网络结构复杂度上比朴素贝叶斯更进一步,允许模型捕捉预测变量之间的一些条件依赖关系。随着样本量的增加,它能够更好地拟合数据的分布,性能逐渐提升。 - **K - 依赖贝叶斯网络(KDB)**:同样能够处理预测变量之间的条件依赖关系,并且在复杂度上可能比 TAN 更高。在高样本量的情况下,它也能展现出较好的性能。 不同模型的选择取决于数据的特点和样本量的大小。在实际应用中,可以根据具体情况进行尝试和比较,选择最适合的模型。 ##### 6.2 结构期望最大化(SEM)策略 SEM 策略为从弱标签数据中推断贝叶斯网络分类器的图结构和模型参数提供了一个有效的框架。它的核心思想是迭代地交替估计每个包中示例的最可能标签和改进学习到的模型。具体步骤如下: 1. **初始化**:对数据集进行初始标签分配,然后使用经典技术估计初始模型。 2. **参数收敛循环**:在每次迭代中,根据当前模型估计训练示例的完成情况,然后重新估计模型参数,直到满足参数收敛条件。 3. **结构改进循环**:在参数收敛后,寻找当前结构的最大邻域结构,更新图结构,继续进行迭代,直到满足停止条件。 SEM 策略通过不断地优化模型结构和参数,使得分类器能够更好地适应弱监督数据。 ##### 6.3 马尔可夫链蒙特卡罗(MCMC)近似 当包的大小 $m_i$ 增大且 $m_i^+$ 减小时,直接计算概率一致完成变得不可行。此时,MCMC 近似方法发挥了重要作用。它的主要步骤如下: 1. **预热阶段**:前 $b_i$ 个样本不用于计算期望值,这个阶段用于让马尔可夫链达到平稳分布。 2. **采样阶段**:采样 $s$ 个完成来估计概率一致完成。在每一步,从当前样本的邻域中随机选择一个新样本,如果满足一定条件则接受,否则拒绝。 3. **估计完成**:最终的概率一致完成估计为将每个示例分配到每个类别的样本比例。 MCMC 近似方法通过模拟概率分布,在保证一定准确性的前提下,大大降低了计算复杂度。 #### 7. 应用建议 基于上述研究结果,以下是一些在实际应用中的建议: ##### 7.1 数据准备 - **样本量**:尽量收集足够多的样本,以提高分类器的性能。从实验结果可以看出,随着样本量的增加,所有类型的分类器性能都有所提升。 - **标签比例和分布**:合理控制正样本的标签比例 $r^+$ 和分布 $h$。虽然这两个参数对分类器性能的影响有限,但在样本量较小时,过大的值可能会导致性能下降。 ##### 7.2 模型选择 - **小样本情况**:如果样本量较少,优先选择朴素贝叶斯(NB)分类器,它具有较好的稳健性。 - **大样本情况**:当样本量较大时,可以尝试使用树增强朴素贝叶斯(TAN)和 K - 依赖贝叶斯网络(KDB)分类器,它们能够更好地捕捉数据的复杂关系。 ##### 7.3 算法参数设置 - **SEM 方法**:将参数收敛阈值设置为 0.1%,结构和参数收敛的最大迭代次数固定为 200 次,这是经过实验验证的较为合适的参数。 - **MCMC 过程**:设置预热样本数 $b_i = 100$,用于估计完成的样本数 $s = 1000$,以保证 MCMC 近似的准确性。 #### 8. 总结与展望 本文介绍了一种新颖的弱监督分类问题——从正样本和无标签样本比例中学习,并提出了一种基于 EM 的方法来学习贝叶斯网络分类器。通过实验验证了该方法在不同类别不确定性场景下的有效性和稳定性,分析了不同参数和不同类型分类器对性能的影响。 在未来的研究中,可以进一步探索以下方向: - **更复杂的模型**:尝试使用更复杂的贝叶斯网络模型或其他机器学习模型,以提高分类器的性能。 - **数据增强**:研究如何通过数据增强的方法,增加样本的多样性,提高分类器的泛化能力。 - **实际应用**:将该方法应用到实际的领域中,如医疗诊断、图像识别等,验证其在实际场景中的有效性。 总之,弱监督学习是一个具有广阔前景的研究领域,未来还有很多工作值得深入探索。 以下是不同贝叶斯网络模型性能对比的表格: | 模型类型 | 小样本性能 | 大样本性能 | 复杂度 | | ---- | ---- | ---- | ---- | | 朴素贝叶斯(NB) | 稳健,表现较好 | 性能提升有限 | 低 | | 树增强朴素贝叶斯(TAN) | 一般 | 性能明显提升 | 中等 | | K - 依赖贝叶斯网络(KDB) | 一般 | 性能较好 | 高 | 下面是 MCMC 近似方法的 mermaid 流程图: ```mermaid graph TD; A[开始] --> B[进行预热阶段,采样 bi 个样本]; B --> C[开始采样阶段,采样 s 个样本]; C --> D[随机选择新样本 et+1]; D --> E{是否满足接受条件}; E -- 是 --> F[接受新样本 et+1]; E -- 否 --> G[拒绝新样本,复制前一个样本 et]; F --> H{是否完成 s 个样本采样}; G --> H; H -- 否 --> D; H -- 是 --> I[估计最终完成 E]; I --> J[结束]; ```
corwn 最低0.47元/天 解锁专栏
赠100次下载
点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

物联网_赵伟杰

物联网专家
12年毕业于人民大学计算机专业,有超过7年工作经验的物联网及硬件开发专家,曾就职于多家知名科技公司,并在其中担任重要技术职位。有丰富的物联网及硬件开发经验,擅长于嵌入式系统设计、传感器技术、无线通信以及智能硬件开发等领域。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

开源安全工具:Vuls与CrowdSec的深入剖析

### 开源安全工具:Vuls与CrowdSec的深入剖析 #### 1. Vuls项目简介 Vuls是一个开源安全项目,具备漏洞扫描能力。通过查看代码并在本地机器上执行扫描操作,能深入了解其工作原理。在学习Vuls的过程中,还能接触到端口扫描、从Go执行外部命令行应用程序以及使用SQLite执行数据库操作等知识。 #### 2. CrowdSec项目概述 CrowdSec是一款开源安全工具(https://github.com/crowdsecurity/crowdsec ),值得研究的原因如下: - 利用众包数据收集全球IP信息,并与社区共享。 - 提供了值得学习的代码设计。 - Ge

Ansible高级技术与最佳实践

### Ansible高级技术与最佳实践 #### 1. Ansible回调插件的使用 Ansible提供了多个回调插件,可在响应事件时为Ansible添加新行为。其中,timer插件是最有用的回调插件之一,它能测量Ansible剧本中任务和角色的执行时间。我们可以通过在`ansible.cfg`文件中对这些插件进行白名单设置来启用此功能: - **Timer**:提供剧本执行时间的摘要。 - **Profile_tasks**:提供剧本中每个任务执行时间的摘要。 - **Profile_roles**:提供剧本中每个角色执行时间的摘要。 我们可以使用`--list-tasks`选项列出剧

RHEL9系统存储、交换空间管理与进程监控指南

# RHEL 9 系统存储、交换空间管理与进程监控指南 ## 1. LVM 存储管理 ### 1.1 查看物理卷信息 通过 `pvdisplay` 命令可以查看物理卷的详细信息,示例如下: ```bash # pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name rhel PV Size <297.09 GiB / not usable 4.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 76054 Free PE 0 Allocated PE 76054

轻量级HTTP服务器与容器化部署实践

### 轻量级 HTTP 服务器与容器化部署实践 #### 1. 小需求下的 HTTP 服务器选择 在某些场景中,我们不需要像 Apache 或 NGINX 这样的完整 Web 服务器,仅需一个小型 HTTP 服务器来测试功能,比如在工作站、容器或仅临时需要 Web 服务的服务器上。Python 和 PHP CLI 提供了便捷的选择。 ##### 1.1 Python 3 http.server 大多数现代 Linux 系统都预装了 Python 3,它自带 HTTP 服务。若未安装,可使用包管理器进行安装: ```bash $ sudo apt install python3 ``` 以

信息系统集成与测试实战

### 信息系统集成与测试实战 #### 信息系统缓存与集成 在实际的信息系统开发中,性能优化是至关重要的一环。通过使用 `:timer.tc` 函数,我们可以精确测量执行时间,从而直观地看到缓存机制带来的显著性能提升。例如: ```elixir iex> :timer.tc(InfoSys, :compute, ["how old is the universe?"]) {53, [ %InfoSys.Result{ backend: InfoSys.Wolfram, score: 95, text: "1.4×10^10 a (Julian years)\n(time elapsed s

构建交互式番茄钟应用的界面与功能

### 构建交互式番茄钟应用的界面与功能 #### 界面布局组织 当我们拥有了界面所需的所有小部件后,就需要对它们进行逻辑组织和布局,以构建用户界面。在相关开发中,我们使用 `container.Container` 类型的容器来定义仪表盘布局,启动应用程序至少需要一个容器,也可以使用多个容器来分割屏幕和组织小部件。 创建容器有两种方式: - 使用 `container` 包分割容器,形成二叉树布局。 - 使用 `grid` 包定义行和列的网格。可在相关文档中找到更多关于 `Container API` 的信息。 对于本次开发的应用,我们将使用网格方法来组织布局,因为这样更易于编写代码以

PowerShell7在Linux、macOS和树莓派上的应用指南

### PowerShell 7 在 Linux、macOS 和树莓派上的应用指南 #### 1. PowerShell 7 在 Windows 上支持 OpenSSH 的配置 在 Windows 上使用非微软开源软件(如 OpenSSH)时,可能会遇到路径问题。OpenSSH 不识别包含空格的路径,即使路径被单引号或双引号括起来也不行,因此需要使用 8.3 格式(旧版微软操作系统使用的短文件名格式)。但有些 OpenSSH 版本也不支持这种格式,当在 `sshd_config` 文件中添加 PowerShell 子系统时,`sshd` 服务可能无法启动。 解决方法是将另一个 PowerS

实时资源管理:Elixir中的CPU与内存优化

### 实时资源管理:Elixir 中的 CPU 与内存优化 在应用程序的运行过程中,CPU 和内存是两个至关重要的系统资源。合理管理这些资源,对于应用程序的性能和可扩展性至关重要。本文将深入探讨 Elixir 语言中如何管理实时资源,包括 CPU 调度和内存管理。 #### 1. Elixir 调度器的工作原理 在 Elixir 中,调度器负责将工作分配给 CPU 执行。理解调度器的工作原理,有助于我们更好地利用系统资源。 ##### 1.1 调度器设计 - **调度器(Scheduler)**:选择一个进程并执行该进程的代码。 - **运行队列(Run Queue)**:包含待执行工

基于属性测试的深入解析与策略探讨

### 基于属性测试的深入解析与策略探讨 #### 1. 基于属性测试中的收缩机制 在基于属性的测试中,当测试失败时,像 `stream_data` 这样的框架会执行收缩(Shrinking)操作。收缩的目的是简化导致测试失败的输入,同时确保简化后的输入仍然会使测试失败,这样能更方便地定位问题。 为了说明这一点,我们来看一个简单的排序函数测试示例。我们实现了一个糟糕的排序函数,实际上就是恒等函数,它只是原封不动地返回输入列表: ```elixir defmodule BadSortTest do use ExUnit.Case use ExUnitProperties pro

容器部署与管理实战指南

# 容器部署与管理实战指南 ## 1. 容器部署指导练习 ### 1.1 练习目标 在本次练习中,我们将使用容器管理工具来构建镜像、运行容器并查询正在运行的容器环境。具体目标如下: - 配置容器镜像注册表,并从现有镜像创建容器。 - 使用容器文件创建容器。 - 将脚本从主机复制到容器中并运行脚本。 - 删除容器和镜像。 ### 1.2 准备工作 作为工作站机器上的学生用户,使用 `lab` 命令为本次练习准备系统: ```bash [student@workstation ~]$ lab start containers-deploy ``` 此命令将准备环境并确保所有所需资源可用。 #