登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  科技周边 >  人工智能

LabelSpreading 的transduction与新样本预测有什么区别

来源:17golang原创

时间:2026-10-31 09:43:34 467浏览 收藏

LabelSpreading 里的 transduction_ 和 predict(X) 不是同一个入口。前者是 fit(X, y) 时在整张训练图上给样本分配的标签,包含原本用 -1 标记的未标注样本;后者是模型拟合后对一批输入特征做归纳式推断,适合处理之后到来的新样本。已经有标签的训练点不要拿来证明泛化效果,生产数据也不要把 transduction_ 当成新样本预测接口。

官方文档:https://scikit-learn.org/stable/modules/generated/sklearn.semi_supervised.LabelSpreading.html

要点速览
  • transduction_ 的长度等于传给 fit 的样本数,代表训练图上的传导标签。
  • predict(X_new) 与 predict_proba(X_new) 面向拟合后的新输入,概率列顺序对应 classes_。
  • alpha 控制邻居信息相对初始标签的权重;它不是新样本置信度阈值。

先按样本来源拆开两个结果

LabelSpreading 是半监督分类器。fit 接收带标签和未标注样本的 X,未标注位置通常在 y 中写成 -1。算法根据样本之间的相似关系传播类别信息,最终把每个 fit 输入对应的标签保存到 transduction_。它回答的是“这张已参与传播的图上,每个节点现在被分到哪一类”。

predict(X_new) 的问题不同:X_new 可以是 fit 之后才出现的数据,接口执行的是文档所称的 inductive inference。它返回新输入的类别;如果需要每一类的归一化分布,使用 predict_proba。因此,二者最大的区别不是返回值类型,而是样本是否已经进入本次 fit 的传播图。

LabelSpreading fit 输入、transduction_ 训练图标签与 predict 新样本推断的边界说明图
图1:边界说明图,展示 fit 样本、transduction_ 与新样本预测的静态关系,不是运行截图。

用接口名称确认“图内标签”还是“新数据预测”

下面的写法只展示接口关系。代码中的 X_new 不应被拼回原训练数组后再用结果冒充线上预测;上线时应保留训练特征处理流程,并检查列数和顺序与 n_features_in_ 一致。

import numpy as np
from sklearn.semi_supervised import LabelSpreading

# -1 表示这一行没有人工标签,参与传播但不是已知类别。
X_fit = np.array([[0.0, 0.1], [0.2, 0.0], [1.0, 1.1], [1.2, 0.9]])
y_fit = np.array([0, -1, 1, -1])

# alpha 控制邻居信息相对初始标签的影响,不是置信度阈值。
model = LabelSpreading(kernel="rbf", alpha=0.2, max_iter=30)
model.fit(X_fit, y_fit)

# 读取 fit 阶段整张图的传导标签,长度与 X_fit 相同。
labels_on_graph = model.transduction_

# 新样本走归纳式预测;概率列按 model.classes_ 对齐。
X_new = np.array([[0.1, 0.2], [1.1, 1.0]])
new_labels = model.predict(X_new)
new_probabilities = model.predict_proba(X_new)

如果业务只想查看训练图上未标注点的补全结果,可以用 transduction_ 配合原始的 y_fit == -1 掩码;如果业务要给刚上传的记录分类,就应该调用 predict,并在需要人工复核时保留 predict_proba 的整行分布,而不是只保存最大类别。

结果对应样本适合回答的问题注意点
transduction_传给 fit 的全部样本训练图上的节点被分到哪类不能当作独立测试集成绩
predict(X_new)拟合后的新输入这批新特征预测成哪类先保持特征处理一致
predict_proba(X_new)拟合后的新输入各类别分布怎样概率不是业务风险保证

kernel 和 alpha 改变的是传播边界,不是接口含义

kernel="rbf" 使用 RBF 相似度,kernel="knn" 则按近邻关系构图;选择哪个 kernel 会改变样本之间的连接方式。gamma 用于 RBF,n_neighbors 用于 KNN。它们会影响传播结果,但不会把 transduction_ 变成预测新数据的缓存。

alpha 是 clamping factor。官方定义是:样本从邻居吸收的信息相对于初始标签的比例;alpha=0 更偏向保留初始信息,接近 1 则更偏向邻居信息。生产调参时要同时看已知标签是否被稳定保留、未标注区域是否出现整片偏向,以及新样本的概率分布是否过于平均。不要把 alpha 直接解释成“只接受 20% 置信度”。

LabelSpreading kernel、gamma、n_neighbors、alpha 与 classes_、label_distributions_ 结果的参数边界说明图
图2:参数边界说明图,展示构图参数、软约束参数与输出对象之间的静态关系;不代表实测结果。

上线前用四项检查避免误读

第一,确认训练图里的 -1 只代表未标注,不要把它当成一个真实类别;第二,把 transduction_ 和原始行号一起落盘,避免传播后重排造成错配;第三,对新样本使用与训练期完全一致的特征缩放、词向量或列选择;第四,对低置信度的新样本设置人工复核或“暂不判定”分支。若要评估泛化能力,应使用独立的有标签验证集调用 predict 后再计算指标,不能直接对 transduction_ 做训练集式自评。

相关问题

transduction_ 会包含原本已经标注的样本吗?

会。它对应 fit 输入的全部样本;未标注点会被传播赋值,但已标注点也位于同一个结果数组中。

新样本能直接追加到 transduction_ 吗?

不能。新样本应调用 predict 或 predict_proba;若数据分布或特征空间发生变化,应重新设计训练和评估流程。

predict_proba 的列顺序怎样确认?

用 model.classes_ 对照概率矩阵的列,不能按业务标签名称的字典序自行猜测。

声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>