机器学习---半监督学习简单示例(标签传播算法)

1. 使用半监督学习方法 Label Spreading 在一个生成的二维数据集上进行标签传播

import numpy as np
import matplotlib.pyplot as plt
from sklearn.semi_supervised import label_propagation
from sklearn.datasets import make_circles# generate ring with inner box
n_samples = 200
X, y = make_circles(n_samples=n_samples, shuffle=False) 
# sklearn.datasets.make_circles(n_samples=100, shuffle=True, noise=None, random_state=None, factor=0.8)
# make_circle和make_moom产生二维二元分类数据集来测试某些算法的性能,可以为数据集添加噪声,可以为二元分类器产生一些球形判决界面的数据
outer, inner = 0, 1
labels = np.full(n_samples, -1.) # 形状n_samples,数据-1
labels[0] = outer
labels[-1] = inner# Learn with LabelSpreading
label_spread = label_propagation.LabelSpreading(kernel='knn', alpha=0.8) # kernel : {‘knn’, ‘rbf’, callable}
label_spread.fit(X, labels)# Plot output labels
output_labels = label_spread.transduction_
plt.figure(figsize=(8.5, 4))
plt.subplot(1, 2, 1)
plt.scatter(X[labels == outer, 0], X[labels == outer, 1], color='navy', # s点的大小,lw线宽marker='s', lw=0, label="outer labeled", s=10)
plt.scatter(X[labels == inner, 0], X[labels == inner, 1], color='c',marker='s', lw=0, label='inner labeled', s=10)
plt.scatter(X[labels == -1, 0], X[labels == -1, 1], color='darkorange',marker='.', label='unlabeled')
plt.legend(scatterpoints=1, shadow=False, loc='upper right')
plt.title("Raw data (2 classes=outer and inner)")plt.subplot(1, 2, 2)
output_label_array = np.asarray(output_labels) # 将结构数据转化为ndarray
outer_numbers = np.where(output_label_array == outer)[0]
inner_numbers = np.where(output_label_array == inner)[0]
plt.scatter(X[outer_numbers, 0], X[outer_numbers, 1], color='navy',marker='s', lw=0, s=10, label="outer learned")
plt.scatter(X[inner_numbers, 0], X[inner_numbers, 1], color='c',marker='s', lw=0, s=10, label="inner learned")
plt.legend(scatterpoints=1, shadow=False, loc='upper right')
plt.title("Labels learned with Label Spreading (KNN)")plt.subplots_adjust(left=0.07, bottom=0.07, right=0.93, top=0.92)
plt.show()

这段代码演示了使用半监督学习方法 Label Spreading 在一个生成的二维数据集上进行标签传播的

过程。Label Spreading 是一种用于利用未标记数据来改善学习模型的技术。

使用 make_circles 函数生成一个包含200个样本的二维数据集,这个数据集形成了两个圆形:一

个内圈和一个外圈。这些数据点将用于演示 Label Spreading 算法的效果。

为了进行半监督学习,我们需要一些已标记的数据。在这个示例中,我们将数据集中的第一个和最

后一个数据点分别标记为外圈和内圈,用数字0和1表示。其余数据点的标签被初始化为-1,表示它

们是未标记的。

使用 LabelSpreading 类来应用标签传播算法。通过设置 kernel='knn 和 alpha=0.8,算法将基于最

近邻(KNN)核来传播标签,其中 alpha 参数控制标签传播过程中的平滑程度。

通过调用 fit 方法,标签传播算法使用已标记和未标记的数据来学习,并预测所有未标记数据点的

标签。代码最后部分使用 matplotlib 生成了两个子图。第一个子图展示了原始数据及其标记,第二

个子图展示了使用 Label Spreading 算法学习得到的标签。这通过比较两个子图来直观展示标签传

播算法的效果。

通过这个示例,可以看到即使只有极少数的数据点被标记,Label Spreading 也能有效地利用数据

集的结构信息来预测未标记数据点的标签,展示了半监督学习在利用未标记数据上的潜力。

2. 使用半监督学习技术(特别是 Label Spreading)和支持向量机(SVM)在鸢尾花

(Iris)数据集上进行分类

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn import svm
from sklearn.semi_supervised import label_propagationrng = np.random.RandomState(0)iris = datasets.load_iris()X = iris.data[:, :2]
y = iris.target# step size in the mesh
h = .02y_30 = np.copy(y)
y_30[rng.rand(len(y)) < 0.6] = -1
y_50 = np.copy(y)
y_50[rng.rand(len(y)) < 0.9] = -1
# we create an instance of SVM and fit out data. We do not scale our
# data since we want to plot the support vectors
ls30 = (label_propagation.LabelSpreading().fit(X, y_30),y_30)
ls50 = (label_propagation.LabelSpreading().fit(X, y_50),y_50)
ls100 = (label_propagation.LabelSpreading().fit(X, y), y)
rbf_svc = (svm.SVC(kernel='rbf', gamma=.5).fit(X, y), y)# create a mesh to plot in
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))# title for the plots
titles = ['Label Spreading 30% data','Label Spreading 50% data','Label Spreading 0% data','SVC with rbf kernel']color_map = {-1: (1, 1, 1), 0: (0, 0, .9), 1: (1, 0, 0), 2: (.8, .6, 0)} # (1, 1, 1)白色for i, (clf, y_train) in enumerate((ls30, ls50, ls100, rbf_svc)):# Plot the decision boundary. For that, we will assign a color to each# point in the mesh [x_min, x_max]x[y_min, y_max].plt.subplot(2, 2, i + 1)Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) # 扁平化操作# Put the result into a color plotZ = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)plt.axis('off')# Plot also the training pointscolors = [color_map[y] for y in y_train]plt.scatter(X[:, 0], X[:, 1], c=colors, edgecolors='black')plt.title(titles[i])plt.suptitle("Unlabeled points are colored white", y=0.1)
plt.show()

这段代码演示了如何使用半监督学习技术(特别是 Label Spreading)和支持向量机(SVM)在鸢

尾花(Iris)数据集上进行分类。这个示例展示了在不同比例的数据被标记的情况下,这些算法的

表现。从 `sklearn.datasets` 加载鸢尾花数据集。仅使用前两个特征(为了方便在二维平面上绘

图)。y_30 和 y_50 分别是复制的标签数组,其中 60% 和 90% 的标签被随机置为未知(-1),

用于模拟半监督学习场景。

使用 LabelSpreading 模型分别训练三个不同的数据集(30%、50% 标签数据和100% 标签数据)

以及一个使用 RBF 核的 SVM 模型进行比较。不对数据进行缩放,因为目的是要在图中展示支持

向量。为了绘制决策边界,创建一个网格覆盖数据集的全部范围。使用 numpy.meshgrid 函数生成

网格点的坐标矩阵。

对每个分类器和训练集组合,预测整个网格上的点的标签。使用 plt.contourf 绘制决策区域,并用

不同的颜色表示不同的类别。未标记的点(在 y_30 和 y_50 中被标记为 -1 的点)在图上用白色表

示。使用 plt.scatter 绘制训练点,颜色由 y_train 决定,边界颜色设为黑色以便区分。

为每个子图设置标题以区分不同的训练情况。使用 plt.suptitle 设置总标题。

最终显示图形,展示在不同标签数据比例下的分类效果和决策边界。

3. 使用标签传播(Label Spreading)算法在一个合成的二维数据集上进行半监督学习

import numpy as np
import matplotlib.pyplot as plt
from sklearn.semi_supervised import label_propagation
from sklearn.datasets import make_circles# generate ring with inner box
n_samples = 200
X, y = make_circles(n_samples=n_samples, shuffle=False) 
# sklearn.datasets.make_circles(n_samples=100, shuffle=True, noise=None, random_state=None, factor=0.8)
# make_circle和make_moom产生二维二元分类数据集来测试某些算法的性能,可以为数据集添加噪声,可以为二元分类器产生一些球形判决界面的数据
outer, inner = 0, 1
labels = np.full(n_samples, -1.) # 形状n_samples,数据-1
labels[0] = outer
labels[-1] = inner# Learn with LabelSpreading
label_spread = label_propagation.LabelSpreading(kernel='knn', alpha=0.8) # kernel : {‘knn’, ‘rbf’, callable}
label_spread.fit(X, labels)# Plot output labels
output_labels = label_spread.transduction_
plt.figure(figsize=(8.5, 4))
plt.subplot(1, 2, 1)
plt.scatter(X[labels == outer, 0], X[labels == outer, 1], color='navy', # s点的大小,lw线宽marker='s', lw=0, label="outer labeled", s=10)
plt.scatter(X[labels == inner, 0], X[labels == inner, 1], color='c',marker='s', lw=0, label='inner labeled', s=10)
plt.scatter(X[labels == -1, 0], X[labels == -1, 1], color='darkorange',marker='.', label='unlabeled')
plt.legend(scatterpoints=1, shadow=False, loc='upper right')
plt.title("Raw data (2 classes=outer and inner)")plt.subplot(1, 2, 2)
output_label_array = np.asarray(output_labels) # 将结构数据转化为ndarray
outer_numbers = np.where(output_label_array == outer)[0]
inner_numbers = np.where(output_label_array == inner)[0]
plt.scatter(X[outer_numbers, 0], X[outer_numbers, 1], color='navy',marker='s', lw=0, s=10, label="outer learned")
plt.scatter(X[inner_numbers, 0], X[inner_numbers, 1], color='c',marker='s', lw=0, s=10, label="inner learned")
plt.legend(scatterpoints=1, shadow=False, loc='upper right')
plt.title("Labels learned with Label Spreading (KNN)")plt.subplots_adjust(left=0.07, bottom=0.07, right=0.93, top=0.92)
plt.show()

这段代码演示了如何使用标签传播(Label Spreading)算法在一个合成的二维数据集上进行半监

督学习。标签传播是一种半监督学习算法,它可以利用少量的已标记数据和大量的未标记数据来训

练模型。使用 make_circles 函数生成一个由两个圆形组成的数据集,总共有200个样本。这些样本

被用来模拟一个简单的二分类问题。

初始化一个全是 -1 的标签数组,表示大部分样本都是未标记的。将第一个样本的标签设置为

outer(外圈),最后一个样本的标签设置为 inner(内圈),以此模拟已知的少量标签信息。

创建一个 LabelSpreading 模型实例,使用K近邻(KNN)作为核函数,并设置 alpha=0.8。

使用这个模型和初始的标签来训练数据集。算法将尝试根据少量的已标记数据和数据的分布,推断

出未标记数据的标签。

使用 matplotlib 创建两个子图。第一个子图展示原始数据和初始的少量标签。第二个子图展示标签

传播算法学习到的标签。在第一个子图中,已标记的外圈和内圈样本分别用不同颜色表示,未标记

的样本用第三种颜色表示。在第二个子图中,根据标签传播算法的结果,所有样本都被标记,并用

相应的颜色表示外圈和内圈。通过这种方式,可以直观地看到标签传播算法是如何利用少量的标签

信息来推断整个数据集的标签分布的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Zeppelin 整合 Spark 和 Hudi

一 环境信息 1.1 组件版本 组件版本Spark3.2.3Hudi0.14.0Zeppelin0.11.0-SNAPSHOT 1.2 环境准备 Zeppelin 整合 Spark 参考&#xff1a;Apache Zeppelin 一文打尽Hudi0.14.0编译参考&#xff1a;Hudi0.14.0 最新编译 二 整合 Spark 和 Hudi 2.1 配置 %spark.confSPARK_H…

tee漏洞学习-翻译-2:探索 Qualcomm TrustZone的实现

原文&#xff1a;http://bits-please.blogspot.com/2015/08/exploring-qualcomms-trustzone.html 获取 TrustZone image 从两个不同的位置提取image 从手机设备本身从google factory image 已经root的Nexus 5设备&#xff0c;image存储在eMMC芯片上&#xff0c;并且eMMC芯片…

postgresql 初始化驱动支持高可用配置

条件&#xff1a; jdk 1.6及以上 配置&#xff1a; jdbc:postgresql://host1:port1,host2:port2/database连接故障转移&#xff1a; To support simple connection fail-over it is possible to define multiple endpoints (host and port pairs) in the connection url sepa…

分享65个节日PPT,总有一款适合您

分享65个节日PPT&#xff0c;总有一款适合您 65个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1hc1M5gfYK8eDxQVsK8O9xQ?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知…

SQLite database实现加密

注意&#xff1a;以下操作以VS2022为开发工具&#xff0c;以C#为开发语言。 数据加密原因 软件在使用的各个场景&#xff0c;很多都需要数据具有保密性&#xff0c;于是对于数据库就需要加密。特别是在某些特定领域或存储敏感数据尤其如此。 SQLite加密实现 SQLite加密有两种…

Spring Boot(六十五):使用 ant.jar 执行 SQL 脚本文件

ant用处,主要用在编译java文件,打包,部署。打包:jar,war,ear包等。ant在项目中有很重要的作用。今天我们讲解它的另一个作用:执行 SQL 脚本文件。 1 引入依赖 <dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId&g…

Go语言每日一练——链表篇(五)

传送门 牛客面试笔试必刷101题 ----------------合并k个已排序的链表 题目以及解析 题目 解题代码及解析 解析 这一道题与昨天的合并链表题目类似&#xff0c;但是由于有K个且时间复杂度要求控制在O(nlogn)&#xff0c;这里主要有两种解法&#xff1a;一种是依旧使用归并来…

Arduino 串口绘图仪简单使用

1、工具所在位置 串口绘图仪实际上是从预设的串口获取值并将其绘制在xy轴图每获取到一组数据向左滑动一个单位&#xff0c;读取数据的速度起快&#xff0c;滑动就越快。 Y轴代表来自串口的值&#xff0c;可以是单个也可以是一组 。在读取串口数据时遇到"\n"&#xf…

正点原子-STM32通用定时器学习笔记(1)

1. 通用定时器简介&#xff08;F1为例&#xff09; F1系列通用定时器有4个&#xff0c;TIM2/TIM3/TIM4/TIM5 主要特性&#xff1a; 16位递增、递减、中心对齐计数器&#xff08;计数值&#xff1a;0~65535&#xff09;&#xff1b; 16位预分频器&#xff08;分频系数&#xff…

【leetcode】LCR 123. 图书整理 I(简单)题解学习

题目描述&#xff1a; 书店店员有一张链表形式的书单&#xff0c;每个节点代表一本书&#xff0c;节点中的值表示书的编号。为更方便整理书架&#xff0c;店员需要将书单倒过来排列&#xff0c;就可以从最后一本书开始整理&#xff0c;逐一将书放回到书架上。请倒序返回这个书…

RP2040 SPI

SPI 的库文件是arduino开源库&#xff0c;在程序中include。 SPI IIC都是通信协议【模块】&#xff0c;需要硬件支持&#xff0c;MCU都会集成相应的模块。arduino都集成在了内核中&#xff0c;直接用API函数调用即可。其他单片机的架构也是相同的。 SPI的库和函数及其相关说明…

已解决org.springframework.context.ApplicationContextException异常的正确解决方法,亲测有效!!!

已解决org.springframework.context.ApplicationContextException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 问题分析 报错原因 解决思路 解决方法 步骤1: 检查异常细节 步骤2: 验证外部依赖 步骤3: 校验Spring配置 步骤…

LeetCode第1124题 - 表现良好的最长时间段

题目 给你一份工作时间表 hours&#xff0c;上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候&#xff0c;那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」&#xff0c;意味在这段时间内&#xff0c;「劳累的天数」是严格…

GUI编程..

1.GUI(Graphical User Interface 图形用户界面) 所谓GUI 指的是在计算机中采用图形方式展示用户的界面 在GUI之前采用的是字符界面 有了GUI之后 采用的则是图形界面 2.Java的GUI编程方案 常见的有四种 3.Swing 1.实现一个窗口 public class Main{public static void ma…

网络编程面试系列-02

1. 为什么 TCP 握手三次,挥手四次? 因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。 服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端,服务…

眼动追踪系统体验实验(脑与认知期末考核)

实验名称&#xff1a;眼动追踪系统体验实验 实验目的&#xff1a; 本实验旨在通过体验脑与认知眼动追踪系统&#xff0c;了解该技术在心理学、认知科学等领域的应用&#xff0c;理解它是怎样工作的&#xff0c;探究眼动追踪技术如何揭示人类认知过程的奥秘。 实验环境&#…

155基于matlab 的形态学权重自适应图像去噪

基于matlab 的形态学权重自适应图像去噪&#xff1b;通过串并联的滤波降噪对比图&#xff0c;说明并联降噪的优越性。输出降噪前后图像和不同方法的降噪情况的信噪比。程序已调通&#xff0c;可直接运行。 155matlab 自适应图像降噪 串并联降噪 (xiaohongshu.com)

一些参数(仅供个人理解)

1.mAP&#xff1a; 数据集的平均准确率 mAP50-95&#xff1a;mAP阈值为50到mAP阈值为95&#xff0c;间隔5%,取得10个mAP值&#xff0c;然后对这十个值取平均。 目标检测评估指标mAP&#xff1a;从Precision,Recall,到AP50-95【未完待续】_map50和map50-95-CSDN博客 2.IoU&a…

使用VASPKIT生成非整数倍扩胞结构

在计算某些任务时需要根据原胞进行非对称或者根号倍扩胞&#xff0c;使用vaspkit可以构建一个扩胞倍数矩阵&#xff0c;这样可以获得特定方向非整数倍的扩胞结构。 这里使用的命令为vaspkit的400模块 注意400的命令会让你连续输入三行&#xff0c;每行都需要三个数值&#xff0…

智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码) 源码设计 %%%% clear all clc SearchAgents_no=100; % Number of search ag