# 1.14. 半监督学习
校验者:
[@STAN,废柴0.1](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
[@那伊抹微笑](https://github.com/apachecn/scikit-learn-doc-zh)
[半监督学习](https://en.wikipedia.org/wiki/Semi-supervised_learning) 适用于在训练数据上的一些样本数据没有贴上标签的情况。 [`sklearn.semi_supervised`](classes.html#module-sklearn.semi_supervised "sklearn.semi_supervised") 中的半监督估计, 能够利用这些附加的未标记数据来更好地捕获底层数据分布的形状,并将其更好地类推到新的样本。 当我们有非常少量的已标签化的点和大量的未标签化的点时,这些算法表现均良好。
y 中含有未标记的数据
在使用 `fit` 方法训练数据时, 将标识符与已标签化的数据一起分配给未标签化的点是尤其重要的. 实现该标记的方法是使用整数值 ![-1](https://box.kancloud.cn/cd7a061361dec1e3b142b30bbd1e8e60_21x13.jpg).
## 1.14.1. 标签传播
标签传播表示半监督图推理算法的几个变体。
该模型的一些特性如下:- 可用于分类和回归任务
- Kernel methods to project data into alternate dimensional spaces
scikit-learn 提供了两种标签传播模型: [`LabelPropagation`](generated/sklearn.semi_supervised.LabelPropagation.html#sklearn.semi_supervised.LabelPropagation "sklearn.semi_supervised.LabelPropagation") 和 [`LabelSpreading`](generated/sklearn.semi_supervised.LabelSpreading.html#sklearn.semi_supervised.LabelSpreading "sklearn.semi_supervised.LabelSpreading") 。 两者都通过在输入的 dataset(数据集)中的所有 items(项)上构建 similarity graph (相似图)来进行工作。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_label_propagation_structure_0011.png](https://box.kancloud.cn/7d84c03bdd619423ad316ad50df3a61f_566x266.jpg)](../auto_examples/semi_supervised/plot_label_propagation_structure.html)**标签传播说明:** *未标签化的观察值结构与 class(类)结构一致, 因此可以将 class(类)标签传播到训练集的未标签化的观察值*
[`LabelPropagation`](generated/sklearn.semi_supervised.LabelPropagation.html#sklearn.semi_supervised.LabelPropagation "sklearn.semi_supervised.LabelPropagation") 和 [`LabelSpreading`](generated/sklearn.semi_supervised.LabelSpreading.html#sklearn.semi_supervised.LabelSpreading "sklearn.semi_supervised.LabelSpreading") 在对图形的相似性矩阵, 以及对标签分布的 clamping effect(夹持效应)的修改方面不太一样。 Clamping 允许算法在一定程度上改变真实标签化数据的权重。 该 [`LabelPropagation`](generated/sklearn.semi_supervised.LabelPropagation.html#sklearn.semi_supervised.LabelPropagation "sklearn.semi_supervised.LabelPropagation") 算法执行输入标签的 hard clamping, 这意味着 ![\alpha=0](https://box.kancloud.cn/6833b35b3fe9b6b9ea2251f3f7796de5_45x12.jpg) 。 这些 clamping factor 可以不是很严格的, 例如 ![\alpha=0.2](https://box.kancloud.cn/b48a77f3c8bce232dc0c9d4f423a72b5_59x12.jpg) , 这意味着我们将始终保留原始标签分配的 80%, 但该算法可以将其分布的置信度改变在 20% 以内。
[`LabelPropagation`](generated/sklearn.semi_supervised.LabelPropagation.html#sklearn.semi_supervised.LabelPropagation "sklearn.semi_supervised.LabelPropagation") 使用原始相似性矩阵从未修改的数据来构建。 [`LabelSpreading`](generated/sklearn.semi_supervised.LabelSpreading.html#sklearn.semi_supervised.LabelSpreading "sklearn.semi_supervised.LabelSpreading") 最小化具有正则化属性的损耗函数, 因此它通常更适用于噪声数据。 该算法在原始图形的修改版本上进行迭代, 并通过计算 normalized graph Laplacian matrix (归一化图拉普拉斯矩阵)来对边缘的权重进行归一化。 此过程也用于 [Spectral clustering](clustering.html#spectral-clustering) 。
标签传播模型有两种内置的 kernel methods(核函数)。 kernel (核)的选择会影响算法的可扩展性和性能。 以下是可用的:
> - rbf (![\exp(-\gamma |x-y|^2), \gamma > 0](https://box.kancloud.cn/621084c75f90ac326a5cf9f80d829f0e_176x20.jpg)). ![\gamma](https://box.kancloud.cn/502b69cbaa2eaab1fc4bf35906e10418_10x12.jpg) 通过关键字 gamma 来指定。
> - knn (![1[x' \in kNN(x)]](https://box.kancloud.cn/f041308bbf46f2764b865c5d8493da60_119x19.jpg)). ![k](https://box.kancloud.cn/300675e73ace6bf4c352cfbb633f0199_9x13.jpg) 通过关键字 n\_neighbors 来指定。
RBF 核将产生一个完全连接的图形, 它通过密集矩阵在内存中表示。 该矩阵可能非常大, 与算法的每次迭代执行全矩阵乘法计算的成本相结合可导致超长的运行时间。 在另一方面, KNN 核将产生更多的内存友好的稀疏矩阵, 这样可以大幅度的减少运行时间。
例子
- [Decision boundary of label propagation versus SVM on the Iris dataset](../auto_examples/semi_supervised/plot_label_propagation_versus_svm_iris.html#sphx-glr-auto-examples-semi-supervised-plot-label-propagation-versus-svm-iris-py)
- [Label Propagation learning a complex structure](../auto_examples/semi_supervised/plot_label_propagation_structure.html#sphx-glr-auto-examples-semi-supervised-plot-label-propagation-structure-py)
- [Label Propagation digits active learning](../auto_examples/semi_supervised/plot_label_propagation_digits_active_learning.html#sphx-glr-auto-examples-semi-supervised-plot-label-propagation-digits-active-learning-py)
参考
\[1\] Yoshua Bengio, Olivier Delalleau, Nicolas Le Roux. In Semi-Supervised Learning (2006), pp. 193-216
\[2\] Olivier Delalleau, Yoshua Bengio, Nicolas Le Roux. Efficient Non-Parametric Function Induction in Semi-Supervised Learning. AISTAT 2005 [http://research.microsoft.com/en-us/people/nicolasl/efficient\_ssl.pdf](http://research.microsoft.com/en-us/people/nicolasl/efficient_ssl.pdf)
- scikit-learn 0.19 中文文档
- 用户指南
- 1. 监督学习
- 1.1. 广义线性模型
- 1.2. 线性和二次判别分析
- 1.3. 内核岭回归
- 1.4. 支持向量机
- 1.5. 随机梯度下降
- 1.6. 最近邻
- 1.7. 高斯过程
- 1.8. 交叉分解
- 1.9. 朴素贝叶斯
- 1.10. 决策树
- 1.11. 集成方法
- 1.12. 多类和多标签算法
- 1.13. 特征选择
- 1.14. 半监督学习
- 1.15. 等式回归
- 1.16. 概率校准
- 1.17. 神经网络模型(有监督)
- 2. 无监督学习
- 2.1. 高斯混合模型
- 2.2. 流形学习
- 2.3. 聚类
- 2.4. 双聚类
- 2.5. 分解成分中的信号(矩阵分解问题)
- 2.6. 协方差估计
- 2.7. 经验协方差
- 2.8. 收敛协方差
- 2.9. 稀疏逆协方差
- 2.10. Robust 协方差估计
- 2.11. 新奇和异常值检测
- 2.12. 密度估计
- 2.13. 神经网络模型(无监督)
- 3. 模型选择和评估
- 3.1. 交叉验证:评估估算器的表现
- 3.2. 调整估计器的超参数
- 3.3. 模型评估: 量化预测的质量
- 3.4. 模型持久化
- 3.5. 验证曲线: 绘制分数以评估模型
- 4. 数据集转换
- 4.1. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器
- 4.2. 特征提取
- 4.3. 预处理数据
- 4.4. 无监督降维
- 4.5. 随机投影
- 4.6. 内核近似
- 4.7. 成对的矩阵, 类别和核函数
- 4.8. 预测目标 (y) 的转换
- 5. 数据集加载工具
- 6. 大规模计算的策略: 更大量的数据
- 7. 计算性能
- 教程
- 使用 scikit-learn 介绍机器学习
- 关于科学数据处理的统计学习教程
- 机器学习: scikit-learn 中的设置以及预估对象
- 监督学习:从高维观察预测输出变量
- 模型选择:选择估计量及其参数
- 无监督学习: 寻求数据表示
- 把它们放在一起
- 寻求帮助
- 处理文本数据
- 选择正确的评估器(estimator)
- 外部资源,视频和谈话