当前位置: 首页 > news >正文

机器学习——自监督学习与无监督学习

``# 机器学习中的自监督学习与无监督学习

在机器学习的世界中,监督学习、无监督学习和自监督学习都是重要的学习方法。本文将聚焦于自监督学习与无监督学习,探讨它们的原理、应用场景以及技术细节,并通过大量代码示例来揭示这些方法的内在工作机制。本文旨在提供一个深入的、全面的指南,以帮助你理解这些技术的核心理念和应用。

引言

随着深度学习技术的广泛应用,数据的标注成本日益成为机器学习发展的瓶颈之一。无监督学习和自监督学习因此逐渐成为解决这一问题的重要工具。无监督学习主要关注从未标注数据中学习,而自监督学习则试图通过设计辅助任务来利用大量未标注数据,从而提高模型在下游任务中的表现。

在接下来的章节中,我们将深入讨论无监督学习和自监督学习的区别和联系,并且会通过代码实现来展示它们在真实场景中的应用。

无监督学习

无监督学习是一种让模型从未标注数据中提取有用信息的技术。它的主要目标是找出数据的潜在结构。常见的无监督学习算法包括聚类(如 K-Means)、降维(如 PCA)、密度估计等。

聚类分析:K-Means

聚类是无监督学习中的重要任务之一,用于将数据划分为多个簇。K-Means 是最经典的聚类算法之一。我们先通过 Python 实现一个简单的 K-Means 算法。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs# 生成模拟数据
X, y = make_blobs(n_samples=300, centers=4, random_state=42)# 定义 K-Means 算法
def k_means(X, k, max_iters=100):# 随机初始化质心np.random.seed(42)centroids = X[np.random.choice(X.shape[0], k, replace=False)]for _ in range(max_iters):# 计算每个点到质心的距离distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=2)# 为每个点分配最接近的质心labels = np.argmin(distances, axis=1)# 更新质心位置new_centroids = np.array([X[labels == j].mean(axis=0) for j in range(k)])# 如果质心没有变化,则结束迭代if np.all(centroids == new_centroids):breakcentroids = new_centroidsreturn centroids, labels# 应用 K-Means 算法
centroids, labels = k_means(X, k=4)# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], s=300, c='red', marker='x')
plt.title('K-Means Clustering')
plt.show()

在上面的代码中,我们实现了 K-Means 算法,它通过迭代来最小化簇内样本的距离。这个过程一直进行,直到质心的位置不再变化为止。

降维:PCA

主成分分析(PCA)是一种用于数据降维的无监督学习技术,它通过找出数据中的主成分来降低数据的维度。

以下是 PCA 的一个实现示例:

from sklearn.decomposition import PCA# 生成高维模拟数据
np.random.seed(42)
X_high_dim = np.random.rand(100, 50)# 使用 PCA 将数据降到二维
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X_high_dim)# 可视化降维后的数据
plt.scatter(X_reduced[:, 0], X_reduced[:, 1])
plt.title('PCA Dimensionality Reduction')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()

PCA 的目标是通过线性变换将原始数据映射到低维空间中,从而保留数据的主要信息。

自监督学习

自监督学习是一种介于监督学习和无监督学习之间的学习方法,模型通过生成和解决预定义的辅助任务来从数据中学习特征。自监督学习的优势在于它利用了未标注的数据,通过设计辅助任务来产生伪标签,从而提升模型的性能。

自监督学习的核心思想

自监督学习的基本思想是通过构建辅助任务,模型在完成这些任务时学会有用的特征,这些特征可以用于下游任务。典型的辅助任务包括:

  • 图像块排序:将一张图像分割为多个块,随机打乱顺序,然后让模型恢复原始顺序。
  • 图像旋转预测:随机旋转图像,让模型预测旋转的角度。

接下来我们通过代码实现一个自监督学习的例子:图像块恢复任务。

图像块恢复任务

在这个任务中,我们将一张图像分割为若干块,随机打乱顺序,然后训练一个卷积神经网络来恢复这些块的正确顺序。

import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
import matplotlib.pyplot as plt# 加载 CIFAR-10 数据集
(X_train, _), (_, _) = tf.keras.datasets.cifar10.load_data()# 选择一张图像并将其分割为 3x3 的块
image = X_train[0]
image_height, image_width, _ = image.shape
block_size = image_height // 3
blocks = [image[i * block_size:(i + 1) * block_size, j * block_size:(j + 1) * block_size]for i in range(3) for j in range(3)
]# 打乱这些块
np.random.shuffle(blocks)# 构建 CNN 模型
model = models.Sequential([layers.Input(shape=(block_size, block_size, 3)),layers.Conv2D(32, (3, 3), activation='relu'),layers.MaxPooling2D((2, 2)),layers.Conv2D(64, (3, 3), activation='relu'),layers.Flatten(),layers.Dense(128, activation='relu'),layers.Dense(9, activation='softmax')
])# 模型编译
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])# 打印模型结构
model.summary()

上面的代码中,我们使用 TensorFlow 实现了一个简单的卷积神经网络,用于处理图像块恢复任务。这个模型的目标是学习如何将随机打乱的图像块恢复到正确的顺序。

自监督学习与无监督学习的区别与联系

自监督学习与无监督学习的主要区别在于数据标注的方式。无监督学习直接从数据中提取结构信息,而自监督学习通过构建辅助任务来学习数据的有用特征。这两种方法都无需人工标注数据,但它们的学习过程和目标有所不同。

无监督学习可以用于发现数据的聚类结构、生成潜在特征或降维,而自监督学习则更适合从大量未标注数据中学习有用的表示,以便应用于下游的监督任务中。

应用场景对比

  • 无监督学习:主要用于数据探索、聚类、降维等任务。例如,客户分群分析、新药分子结构的发现等。
  • 自监督学习:主要用于特征学习,为下游任务提供优质的特征表示。例如,计算机视觉中的特征提取、NLP 中的词向量表示等。

自监督学习的优势

  1. 大规模数据的利用:自监督学习可以在没有标注的数据上进行训练,通过生成伪标签的方式,让模型从数据中获取更多的有用信息。
  2. 适应下游任务:自监督学习通常为下游任务学习特征表示,从而提高了这些任务的表现。
  3. 更高的泛化能力:通过完成不同的辅助任务,模型可以学习到具有广泛适应性的特征。

总结

自监督学习和无监督学习是解决数据标注不足问题的重要工具。无监督学习通过聚类、降维等方法揭示数据的内在结构,而自监督学习则通过构建辅助任务利用未标注数据来提高模型在下游任务中的表现。

通过本文,我们不仅讨论了这两种学习方法的理论知识,还通过代码实现展示了如何在实际应用中使用这些方法。希望本文能为你提供清晰的理解和实际操作的指导,让你更好地掌握这些前沿技术。

相关文章:

机器学习——自监督学习与无监督学习

# 机器学习中的自监督学习与无监督学习 在机器学习的世界中,监督学习、无监督学习和自监督学习都是重要的学习方法。本文将聚焦于自监督学习与无监督学习,探讨它们的原理、应用场景以及技术细节,并通过大量代码示例来揭示这些方法的内在工作…...

2003经典绝版100%仿盛大服务端火炬引擎原版

;中国游戏制作 本版本为中国游戏制作小组推出的第一个版本,有什么不完美的地方还请大家多多指教!!! 与盛大逼真!!! 本版本M2Server采用“梦幻风”以及“冰眼”M2Server修改器修改的 2004/1/…...

银河麒麟服务器:更新软件源

银河麒麟服务器:更新软件源 1、使用场景2、操作步骤3、注意事项 💐The Begin💐点点关注,收藏不迷路💐 1、使用场景 当需要安装最新软件或修改软件源配置后,需更新软件源以获取最新软件包信息。 2、操作步…...

字节跳动收购Oladance耳机:强化音频技术,加速VR/AR生态布局

字节跳动收购Oladance耳机:加码VR/AR领域布局 近日,字节跳动宣布已完成对开放式耳机品牌Oladance的收购,实现了对该品牌的100%控股。这一收购标志着字节跳动在AI硬件领域的进一步扩展和深化,特别是对其VR/AR领域布局的重要加码。 …...

Android SystemUI组件(11)SystemUIVisibility解读

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节思维导图,主要关注左侧最上方SystemUiVisibility解读部分即可。 本章节主要讲解SystemUiVisibility的概念及其相…...

JSON 全知全解:深入探索 JSON 的奥秘

目录 一、JSON 基础认知(一)JSON 的定义与历史(二)JSON 的语法规则(三)JSON 与 JS 对象的关系 二、JSON 在不同语言中的用法(一)JavaScript 中的 JSON 操作(二&#xff0…...

CSS | 响应式布局之媒体查询(media-query)详解

media type(媒体类型)是CSS 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面。media query(媒体查询)是对media type的一种增强,是CSS 3的重要内容之一。随着移动互联网的发展,m…...

并查集的模拟实现

简化版本 class UnionFindSet { public:UnionFindSet(size_t n):_ufs(n, -1){}void Union(int x1, int x2){int root1 FindRoot(x1);int root2 FindRoot(x2);// 如果本身就在一个集合就没必要合并了if (root1 root2)return;// 控制数据量小的往大的集合合并if (abs(_ufs[roo…...

如何高效删除 MySQL 日志表中的历史数据?实战指南

在处理高并发的物联网平台或者其他日志密集型应用时,数据库中的日志表往往会迅速增长,数据量庞大到数百GB甚至更高,严重影响数据库性能。如何有效管理这些庞大的日志数据,特别是在不影响在线业务的情况下,成为了一项技…...

请散户股民看过来,密切关注两件大事

明天股市要开市,不仅散户股民期盼节后股市大涨,上面也同样想在节后来上一个“开门红”。 为此,上面没休假,关起门来办了两件大事,这两天发布消息已提前预热了。 两件大事如下: 一是,上交所10…...

设计模式之外观模式(Facade)

一、外观模式介绍 外观模式( Facade Pattern),也叫门面模式,是一个 “结构型” 设计模式。 外观模式的原始定义是:为子系统中的一组接口提供统一的接口。它定义了一个更高级别 的接口,使子系统更易于使用。 外观模式,是…...

解锁 Python 嵌套字典的奥秘:高效操作与实战应用指南

文章目录 前言🍀一、 什么是 Python 字典?1.1 字典的语法 🍀二、 字典的基本操作2.1 字典的创建2.2 访问字典中的值2.3 添加或修改键值对2.4 删除字典中的键值对 🍀三、 字典的遍历操作3.1 遍历字典的键3.2 遍历字典的值3.3 同时遍…...

联想服务器配置阵列、安装操作系统

文章目录 [toc]1.配置阵列2.制作启动盘3.安装系统 1.配置阵列 1.根据提示进入BIOS设置(F1) 2.系统设置 3.存储 4.第四步可以看到raid卡信息 5.Main Menu 6.Configuration Management 7.Create Virtual Drive 8.Select RAID Level raid5 9.Select Drives…...

【深度强化学习】DDPG实现的4个细节(OUNoise等)

文章目录 前言一、论文内容简述创新点(特点,与DQN的区别):可借鉴参数:细节补充: 二、细节1:weight_decay原理代码 三、细节2:OUNoise原理代码 四、细节3:ObsNorm原理代码…...

算法工程师重生之第二十二天(递增子序列 全排列 全排列 II 重新安排行程 N皇后 解数独 总结 )

参考文献 代码随想录 一、非递减子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以视作…...

css的选择器及优先级

一、css选择器 CSS选择器是用来选择HTML文档中的元素,并为它们应用样式规则的工具。CSS选择器有很多种,可以根据元素的类名、ID、属性、伪类、伪元素、标签等来选择元素。以下是一些常见的CSS选择器及其用法: 1. ID选择器: 根据…...

JavaScript中的数组不改变原数组的方法

数组 var a [1, 2, 3, 5, 8, 13, 21] 不改变原数组的方法 length 数组元素的长度 继承自原型 concat(arrayX,arrayY) 合并两个或多个数组,返回新数组 合并,a.concat(b) var a[1,2,3],b[4,5,6],c[7,8,9]; a.concat(b,c); //[1, 2, 3, 4, 5, 6, 7…...

Go语言实现长连接并发框架 - 路由分组

文章目录 前言接口结构体接口实现项目地址最后 前言 你好,我是醉墨居士,我们上篇博客实现了任务执行流的路由模块,接下来我们实现一下对任务执行流进行任务 接口 trait/router_group.go type RouterGroup interface {RouterGroup(flow ..…...

跨 VLAN 通信

跨 VLAN 通信指的是不同 VLAN 之间的网络设备进行数据交换的能力。由于 VLAN 将网络分割成多个逻辑隔离的广播域,默认情况下,不同 VLAN 之间的设备无法直接通信。为了实现跨 VLAN 通信,需要借助一些网络设备和技术。以下详细讲解跨 VLAN 通信…...

11.4 Linux_线程_条件变量

概述 条件变量的作用: 条件变量和互斥量配合使用,主要应用于生产者和消费者问题。 这种问题也是一种临界资源的问题,但与互斥量一文中 "写文件" 这种资源不同。文件是一直存在的临界资源,而生产者的资源不是一直存在…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...