LabelSpreading 收敛失败或标签同质化的根本原因是相似度图构建不当,尤其是 RBF 核的 gamma 参数未适配数据距离分布,导致图过疏或过密;需标准化特征、预计算相似度矩阵、合理设置 gamma 或改用 KNN 图。

LabelSpreading 为什么总收敛不了或标签全变成同一类
根本原因常是相似度图构建不当,不是算法本身有问题。默认用 rbf 核时,gamma 参数没调好,会导致图太稀疏(大部分节点无连接)或太稠密(所有节点几乎等价),标签没法有效传播。
实操建议:
- 先用
sklearn.metrics.pairwise_distances(X, metric='euclidean')看原始特征距离分布,选gamma使平均最近邻距离落在 0.1–0.5 区间较稳 - 显式传入预计算的相似度矩阵:用
affinity='precomputed'+rbf_kernel(X, gamma=...),避免内部重复计算和数值溢出 - 确保
X已标准化——未归一化的特征会让欧氏距离失真,尤其混合了数值量纲差异大的列 - 若样本量 > 5000,别直接用默认
n_neighbors=10;改用affinity='knn'并设n_neighbors=5,减少稀疏图噪声
半监督训练中数据增强怎么加才不破坏标签一致性
增强不是越多越好,关键在于“同一张图的不同增强视图”必须映射到模型输出空间里足够接近——否则伪标签会互相冲突,模型越训越乱。
实操建议:
- 只对未标注样本做强增强(如
RandAugment、AutoContrast),标注样本保持弱增强(RandomHorizontalFlip+ColorJitter)或不做增强 - 在损失函数里加一致性正则:比如用
MeanTeacher的 EMA 模型预测作为目标,或直接算两个增强视图输出的KL_divergence - 禁用会改变语义的增强:裁剪尺寸小于原图 60%、旋转超 ±15°、任意遮挡(
RandomErasing)在小样本场景下极易生成歧义样本 - 图像任务中,把增强逻辑封装进
torchvision.transforms.Compose,并在DataLoader的collate_fn里统一控制是否启用强增
LabelPropagation 和 LabelSpreading 该选哪个
二者核心区别不在效果,而在对噪声的容忍度和求解方式:LabelPropagation 是硬约束(迭代更新直到收敛),LabelSpreading 是软约束(带正则项的优化问题),后者更抗标注错误。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
实操建议:
- 标注质量高(比如人工精标前 100 个)、样本少(LabelPropagation,收敛快、结果确定
- 存在明显误标、或有大量弱标注(如网页抓取+关键词过滤)→ 必须用
LabelSpreading,并调大alpha(0.8–0.95)加强正则 - 两者都不支持在线更新;如果数据流式到达,得换
sklearn.semi_supervised.SelfTrainingClassifier+ 基础分类器 - 注意:
LabelSpreading默认用solver='lbfgs',内存占用比LabelPropagation高 3–5 倍,大数据集需设max_iter=20防卡死
伪标签筛选时为什么 acc 上升但 F1 下降
典型陷阱:只按模型置信度阈值(如 pred_proba.max() > 0.95)筛伪标签,忽略了类别不平衡。高置信度多集中在多数类,少数类伪标签被持续压制,F1 中的召回率项快速坍塌。
实操建议:
- 按每个类单独算置信度分位数:用
np.quantile(pred_proba[:, i], 0.9)得第 i 类阈值,而非全局一刀切 - 引入不确定性校准:对 logits 过
temperature_scaling再算 softmax,避免模型过于自信 - 每轮伪标签生成后,检查各标签数量占比是否与原始标注集分布偏差 > 15%,超了就降该类阈值
- 宁可少选,不可错选:初始轮伪标签量控制在未标注集的 5%–10%,后续逐步放开,比第一轮就塞满更稳
半监督真正难的不是调参,而是判断哪部分未标注数据“值得信”。模型输出的分数只是参考,得结合业务逻辑看样本——比如医疗影像里,边缘模糊的结节图哪怕置信度 0.92,也不如清晰良性图的 0.85 可靠。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










