.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/semi_supervised/plot_label_propagation_digits.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. or to run this example in your browser via Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_semi_supervised_plot_label_propagation_digits.py: =================================================== 标签传播数字:展示性能 =================================================== 这个示例通过训练一个标签传播模型来分类手写数字,展示了半监督学习的强大功能,使用的标签集非常少。 手写数字数据集共有1797个点。模型将使用所有点进行训练,但只有30个点会被标记。结果将以混淆矩阵和每个类别的一系列指标的形式展示,效果会非常好。 最后,将展示最不确定的前10个预测。 .. GENERATED FROM PYTHON SOURCE LINES 13-17 .. code-block:: Python # 作者:scikit-learn 开发者 # SPDX-License-Identifier: BSD-3-Clause .. GENERATED FROM PYTHON SOURCE LINES 18-22 数据生成 --------------- 我们使用数字数据集。我们只使用随机选择的样本子集。 .. GENERATED FROM PYTHON SOURCE LINES 22-31 .. code-block:: Python import numpy as np from sklearn import datasets digits = datasets.load_digits() rng = np.random.RandomState(2) indices = np.arange(len(digits.data)) rng.shuffle(indices) .. GENERATED FROM PYTHON SOURCE LINES 32-34 我们选择了340个样本,其中只有40个样本会被关联到已知标签。 因此,我们存储了另外300个样本的索引,这些样本的标签我们不应该知道。 .. GENERATED FROM PYTHON SOURCE LINES 35-46 .. code-block:: Python X = digits.data[indices[:340]] y = digits.target[indices[:340]] images = digits.images[indices[:340]] n_total_samples = len(y) n_labeled_points = 40 indices = np.arange(n_total_samples) unlabeled_set = indices[n_labeled_points:] .. GENERATED FROM PYTHON SOURCE LINES 47-48 把所有东西都打乱 .. GENERATED FROM PYTHON SOURCE LINES 48-51 .. code-block:: Python y_train = np.copy(y) y_train[unlabeled_set] = -1 .. GENERATED FROM PYTHON SOURCE LINES 52-56 半监督学习 ------------------------ 我们拟合一个 :class:`~sklearn.semi_supervised.LabelSpreading` 并使用它来预测未知标签。 .. GENERATED FROM PYTHON SOURCE LINES 56-69 .. code-block:: Python from sklearn.metrics import classification_report from sklearn.semi_supervised import LabelSpreading lp_model = LabelSpreading(gamma=0.25, max_iter=20) lp_model.fit(X, y_train) predicted_labels = lp_model.transduction_[unlabeled_set] true_labels = y[unlabeled_set] print( "Label Spreading model: %d labeled & %d unlabeled points (%d total)" % (n_labeled_points, n_total_samples - n_labeled_points, n_total_samples) ) .. rst-class:: sphx-glr-script-out .. code-block:: none Label Spreading model: 40 labeled & 300 unlabeled points (340 total) .. GENERATED FROM PYTHON SOURCE LINES 70-71 分类报告 .. GENERATED FROM PYTHON SOURCE LINES 71-74 .. code-block:: Python print(classification_report(true_labels, predicted_labels)) .. rst-class:: sphx-glr-script-out .. code-block:: none precision recall f1-score support 0 1.00 1.00 1.00 27 1 0.82 1.00 0.90 37 2 1.00 0.86 0.92 28 3 1.00 0.80 0.89 35 4 0.92 1.00 0.96 24 5 0.74 0.94 0.83 34 6 0.89 0.96 0.92 25 7 0.94 0.89 0.91 35 8 1.00 0.68 0.81 31 9 0.81 0.88 0.84 24 accuracy 0.90 300 macro avg 0.91 0.90 0.90 300 weighted avg 0.91 0.90 0.90 300 .. GENERATED FROM PYTHON SOURCE LINES 75-76 混淆矩阵 .. GENERATED FROM PYTHON SOURCE LINES 76-83 .. code-block:: Python from sklearn.metrics import ConfusionMatrixDisplay ConfusionMatrixDisplay.from_predictions( true_labels, predicted_labels, labels=lp_model.classes_ ) .. image-sg:: /auto_examples/semi_supervised/images/sphx_glr_plot_label_propagation_digits_001.png :alt: plot label propagation digits :srcset: /auto_examples/semi_supervised/images/sphx_glr_plot_label_propagation_digits_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 84-88 绘制最不确定的预测 ----------------------------------- 在这里,我们将挑选并展示10个最不确定的预测。 .. GENERATED FROM PYTHON SOURCE LINES 88-92 .. code-block:: Python from scipy import stats pred_entropies = stats.distributions.entropy(lp_model.label_distributions_.T) .. GENERATED FROM PYTHON SOURCE LINES 93-94 选择最不确定的前10个标签 .. GENERATED FROM PYTHON SOURCE LINES 94-97 .. code-block:: Python uncertainty_index = np.argsort(pred_entropies)[-10:] .. GENERATED FROM PYTHON SOURCE LINES 98-99 Plot .. GENERATED FROM PYTHON SOURCE LINES 99-115 .. code-block:: Python import matplotlib.pyplot as plt f = plt.figure(figsize=(7, 5)) for index, image_index in enumerate(uncertainty_index): image = images[image_index] sub = f.add_subplot(2, 5, index + 1) sub.imshow(image, cmap=plt.cm.gray_r) plt.xticks([]) plt.yticks([]) sub.set_title( "predict: %i\ntrue: %i" % (lp_model.transduction_[image_index], y[image_index]) ) f.suptitle("Learning with small amount of labeled data") plt.show() .. image-sg:: /auto_examples/semi_supervised/images/sphx_glr_plot_label_propagation_digits_002.png :alt: Learning with small amount of labeled data, predict: 1 true: 2, predict: 2 true: 2, predict: 8 true: 8, predict: 1 true: 8, predict: 1 true: 8, predict: 1 true: 8, predict: 3 true: 3, predict: 8 true: 8, predict: 2 true: 2, predict: 7 true: 2 :srcset: /auto_examples/semi_supervised/images/sphx_glr_plot_label_propagation_digits_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.148 seconds) .. _sphx_glr_download_auto_examples_semi_supervised_plot_label_propagation_digits.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://mybinder.org/v2/gh/scikit-learn/scikit-learn/main?urlpath=lab/tree/notebooks/auto_examples/semi_supervised/plot_label_propagation_digits.ipynb :alt: Launch binder :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_label_propagation_digits.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_label_propagation_digits.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_label_propagation_digits.zip ` .. include:: plot_label_propagation_digits.recommendations .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_