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

【机器学习范式】监督学习,无监督学习,强化学习, 半监督学习,自监督学习,迁移学习,对比分析+详解与示例代码

     目录

1. 监督学习 (Supervised Learning):

2. 无监督学习 (Unsupervised Learning):

3. 强化学习 (Reinforcement Learning):

4. 半监督学习 (Semi-Supervised Learning):

5. 自监督学习 (Self-Supervised Learning):

6. 迁移学习 (Transfer Learning):

7 机器学习范式应用分析 

        机器学习(Machine Learning,ML)有不同的范式,这些范式描述了学习算法如何从数据中提取模式和知识。以下是几种常见的机器学习范式:

1. 监督学习 (Supervised Learning):

  • 定义: 监督学习是一种机器学习任务,其中算法通过学习从输入到输出的映射关系来进行训练。训练数据包含有标签的样本,即每个输入都与相应的输出相关联。
  • 例子: 分类和回归任务是监督学习的例子。例如,手写数字识别和房价预测。
  • 代码:
  • from sklearn.datasets import load_digits
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LogisticRegression
    from sklearn.metrics import accuracy_score# 加载手写数字数据集
    digits = load_digits()
    X, y = digits.data, digits.target# 划分数据集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建并拟合模型
    model = LogisticRegression()
    model.fit(X_train, y_train)# 预测
    predictions = model.predict(X_test)# 评估模型
    accuracy = accuracy_score(y_test, predictions)
    print(f'Accuracy: {accuracy}')
    

2. 无监督学习 (Unsupervised Learning):

  • 定义: 无监督学习涉及从未标记的数据中学习数据的结构、模式或分布。训练数据不包含目标变量。
  • 例子: 聚类和降维是无监督学习的例子。例如,K均值聚类和主成分分析(PCA)。
  • 代码:
  • from sklearn.cluster import KMeans
    from sklearn.datasets import make_blobs
    import matplotlib.pyplot as plt# 创建一个带有明显簇结构的合成数据集
    X, _ = make_blobs(n_samples=300, centers=4, cluster_std=1.0, random_state=42)# 使用K均值进行聚类
    kmeans = KMeans(n_clusters=4)
    kmeans.fit(X)# 预测每个样本的簇标签
    labels = kmeans.predict(X)# 可视化聚类结果
    plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
    plt.title('K-Means Clustering')
    plt.show()
    

3. 强化学习 (Reinforcement Learning):

  • 定义: 强化学习是一种通过观察环境、执行动作并从奖励中学习的学习方式。它旨在使智能体(agent)在环境中学会采取一系列动作,以最大化累积奖励。
  • 例子: AlphaGo 是一个著名的强化学习应用,通过与自己下围棋的对局进行训练,最终成为世界冠军。
  • 代码:
  • # 强化学习示例代码通常涉及使用专门的库(如TensorFlow、PyTorch)和环境(如OpenAI Gym)。
    # 以下是一个简化的伪代码示例:# 伪代码示例
    # 创建环境
    env = ...# 创建智能体
    agent = ...# 迭代训练
    for episode in range(num_episodes):state = env.reset()total_reward = 0# 迭代每个时间步while not done:# 智能体选择动作action = agent.choose_action(state)# 执行动作,获取奖励和下一个状态next_state, reward, done, _ = env.step(action)# 智能体学习agent.learn(state, action, reward, next_state)# 更新状态state = next_statetotal_reward += reward# 打印每个周期的总奖励print(f'Episode {episode + 1}, Total Reward: {total_reward}')
    

4. 半监督学习 (Semi-Supervised Learning):

  • 定义: 半监督学习是一种综合了有标签数据和未标签数据的学习方式。模型通过同时使用这两种类型的数据进行训练,以提高性能。
  • 例子: 在半监督学习中,可以使用少量带有标签的数据和大量未标签的数据进行模型训练。
  • 示例代码:
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score# 加载手写数字数据集
digits = load_digits()
X, y = digits.data, digits.target# 划分数据集,只使用少量带有标签的样本
X_labeled, X_unlabeled, y_labeled, _ = train_test_split(X, y, test_size=0.9, random_state=42)# 创建并拟合模型
model = RandomForestClassifier()
model.fit(X_labeled, y_labeled)# 预测
predictions = model.predict(X_unlabeled)# 评估模型(在半监督学习中,可能需要一些领域专家的帮助来评估性能)# 假设我们有一些手动标记的未标记数据的真实标签
# 在实际应用中,这个步骤可能需要领域专家的帮助
true_labels_for_unlabeled = ...# 评估模型性能(这里简单使用准确度)
accuracy = accuracy_score(true_labels_for_unlabeled, predictions)print(f'Model Accuracy: {accuracy * 100:.2f}%')

        在这个例子中,我们假设有一些手动标记的未标记数据的真实标签 (true_labels_for_unlabeled)。在实际应用中,获取这些标签可能需要领域专家的帮助。评估模型的性能可以使用不同的指标,具体取决于问题的性质。在这里,我们简单地使用准确度作为评估指标。可以根据实际情况选择适当的评估指标。 

5. 自监督学习 (Self-Supervised Learning):

  • 定义: 自监督学习是一种无监督学习的变体,其中模型通过自动生成标签或任务来学习。这些任务通常是通过对输入数据进行某种变换或转换来生成的。
  • 例子: 图像旋转任务是自监督学习的一种示例,模型学会预测图像是否被旋转过。
  • 示例代码:
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import transforms
from torch.utils.data import DataLoader
from torchvision.datasets import MNIST
import matplotlib.pyplot as plt# 自定义旋转函数
class RotateImage(nn.Module):def __init__(self, degrees):super(RotateImage, self).__init__()self.degrees = degreesdef forward(self, x):return torch.rot90(x, self.degrees, [2, 3])# 构建自监督学习模型
class SelfSupervisedModel(nn.Module):def __init__(self):super(SelfSupervisedModel, self).__init__()self.rescale = nn.functional.rescale_intensityself.rotate = RotateImage(degrees=1)def forward(self, x):x_rotated = self.rotate(x)return torch.cat([x_rotated, x], dim=1)# 超参数
batch_size = 64
learning_rate = 0.001
epochs = 5# 加载MNIST数据集
transform = transforms.Compose([transforms.Grayscale(num_output_channels=1),transforms.ToTensor()])
mnist_dataset = MNIST(root='./data', train=True, download=True, transform=transform)
dataloader = DataLoader(mnist_dataset, batch_size=batch_size, shuffle=True)# 初始化模型、损失函数和优化器
model = SelfSupervisedModel()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)# 训练模型
for epoch in range(epochs):for data in dataloader:images, _ = data# 梯度清零optimizer.zero_grad()# 前向传播outputs = model(images)# 计算损失loss = criterion(outputs, torch.zeros_like(outputs))# 反向传播loss.backward()# 更新权重optimizer.step()print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item()}')# 可视化旋转后的图像
with torch.no_grad():sample = next(iter(dataloader))original_images, _ = samplerotated_images = model.rotate(original_images)plt.figure(figsize=(8, 4))for i in range(4):plt.subplot(2, 4, i + 1)plt.imshow(original_images[i][0], cmap='gray')plt.title('Original')plt.axis('off')plt.subplot(2, 4, i + 5)plt.imshow(rotated_images[i][0], cmap='gray')plt.title('Rotated')plt.axis('off')plt.show()

6. 迁移学习 (Transfer Learning):

  • 定义: 迁移学习是一种将一个领域中学到的知识应用于另一个领域的学习方式。它通过在源领域上训练的模型或知识来提高在目标领域上的性能。
  • 例子: 在自然语言处理中,使用在大型文本语料库上预训练的词嵌入模型(如Word2Vec或GloVe)来改善在特定任务上的性能。
  • 代码:使用预训练的词嵌入模型进行情感分析

    在自然语言处理中,情感分析是一项常见的任务,涉及判断文本中的情感倾向,如正面、负面或中性。为了提高情感分析任务的性能,可以使用在大型文本语料库上预训练的词嵌入模型,如Word2Vec或GloVe。

import torch
import torch.nn as nn
import torch.optim as optim
from torchtext.vocab import GloVe
from torchtext.data import Field, BucketIterator, TabularDataset# 定义数据处理
TEXT = Field(tokenize='spacy', include_lengths=True)
LABEL = Field(sequential=False, use_vocab=False, dtype=torch.float)# 加载IMDb电影评论数据集(示例数据)
train_data, test_data = TabularDataset.splits(path='./data',train='train.csv',test='test.csv',format='csv',fields=[('text', TEXT), ('label', LABEL)]
)# 构建词汇表,并使用预训练的GloVe词嵌入
TEXT.build_vocab(train_data, vectors=GloVe(name='6B', dim=100))
LABEL.build_vocab(train_data)# 定义神经网络模型
class SentimentClassifier(nn.Module):def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim, n_layers, bidirectional, dropout):super().__init__()self.embedding = nn.Embedding(vocab_size, embedding_dim)self.lstm = nn.LSTM(embedding_dim, hidden_dim, num_layers=n_layers, bidirectional=bidirectional, dropout=dropout, batch_first=True)self.fc = nn.Linear(hidden_dim * 2 if bidirectional else hidden_dim, output_dim)self.dropout = nn.Dropout(dropout)def forward(self, text, text_lengths):embedded = self.embedding(text)packed_embedded = nn.utils.rnn.pack_padded_sequence(embedded, text_lengths, batch_first=True)packed_output, (hidden, cell) = self.lstm(packed_embedded)output, output_lengths = nn.utils.rnn.pad_packed_sequence(packed_output, batch_first=True)hidden = self.dropout(torch.cat((hidden[-2,:,:], hidden[-1,:,:]), dim=1))return self.fc(hidden)# 初始化模型和优化器
model = SentimentClassifier(len(TEXT.vocab), 100, 256, 1, 2, True, 0.5)
model.embedding.weight.data.copy_(TEXT.vocab.vectors)
optimizer = optim.Adam(model.parameters())
criterion = nn.BCEWithLogitsLoss()# 定义数据迭代器
train_iterator, test_iterator = BucketIterator.splits((train_data, test_data),batch_size=64,sort_key=lambda x: len(x.text),sort_within_batch=True,device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')
)# 训练模型
for epoch in range(5):for batch in train_iterator:text, text_lengths = batch.textoptimizer.zero_grad()predictions = model(text, text_lengths).squeeze(1)loss = criterion(predictions, batch.label)loss.backward()optimizer.step()# 在测试集上评估模型
correct_predictions = 0
total_samples = 0with torch.no_grad():for batch in test_iterator:text, text_lengths = batch.textpredictions = model(text, text_lengths).squeeze(1)rounded_predictions = torch.round(torch.sigmoid(predictions))correct_predictions += (rounded_predictions == batch.label).sum().item()total_samples += len(batch.label)accuracy = correct_predictions / total_samples
print(f'Test Accuracy: {accuracy * 100:.2f}%')

        这些机器学习范式代表了不同的学习方法和应用领域。在实际应用中,选择适当的学习范式取决于任务的性质、可用的数据以及问题的复杂性。在许多情况下,研究人员和从业者会结合这些范式,以满足特定应用的需求。

7 机器学习范式应用分析

(1) 监督学习(Supervised Learning):

  • 应用: 在许多领域中广泛应用,如图像分类、语音识别、自然语言处理等。通过提供带有标签的训练数据,模型学习从输入到输出的映射关系。
  • 对比: 需要大量标记数据,对新领域的适应能力有限,对标签噪声敏感。

(2) 无监督学习(Unsupervised Learning):

  • 应用: 在聚类、降维、异常检测等任务中有应用。无需标签,模型试图从数据中学到结构、模式或分布。
  • 对比: 对于某些任务,无监督学习可能更具通用性,但结果的解释性可能较差。

(3)强化学习(Reinforcement Learning):

  • 应用: 在游戏、机器人控制、自动驾驶等领域有应用。智能体通过与环境互动,根据奖励信号学习如何执行动作以达到最大化累积奖励。
  • 对比: 需要定义奖励信号,可能需要长时间的训练,对环境的建模和实时决策要求高。

(4)半监督学习(Semi-Supervised Learning):

  • 应用: 在当标记数据稀缺时,通过同时使用标记和未标记数据来提高模型性能。在医疗图像分析、网络安全等领域有应用。
  • 对比: 比纯监督学习更灵活,但对未标记数据的使用需要谨慎,可能受到未标记数据质量的限制。

(5)自监督学习(Self-Supervised Learning):

  • 应用: 在图像、文本等领域中,通过设计任务来生成标签,然后使用这些生成的标签进行训练。在图像领域,如图像旋转任务;在文本领域,如语言模型预训练。
  • 对比: 无需人工标签,具有良好的可扩展性和泛化性,适用于大规模数据。

(6) 迁移学习(Transfer Learning):

  • 应用: 在一个领域训练的知识被应用到另一个相关领域。在自然语言处理中,使用预训练的词嵌入模型进行情感分析,或在计算机视觉中,使用在大规模图像数据上预训练的卷积神经网络进行图像分类。
  • 对比: 可以节省大量训练时间,适用于目标任务数据有限的情况,但前提是源领域和目标领域存在一定的相关性。

相关文章:

【机器学习范式】监督学习,无监督学习,强化学习, 半监督学习,自监督学习,迁移学习,对比分析+详解与示例代码

目录 1. 监督学习 (Supervised Learning): 2. 无监督学习 (Unsupervised Learning): 3. 强化学习 (Reinforcement Learning): 4. 半监督学习 (Semi-Supervised Learning): 5. 自监督学习 (Self-Supervised Learning): 6. 迁移学习 (Transfer Learning): 7 机器学习范式应…...

JUC包下面的四大天王+线程池部分知识

一)Semphore:限流器用我就对了 Java中信号量Semphore是把操作系统原生的信号量封装了一下,本质就是一个计数器,描述了 可用资源的个数,主要涉及到两个操作 如果计数器为0了,继续Р操作,就会出现阻塞等待的情况 P操作:申…...

AGV系统控制位置管理功能

# ファイル: agv_locattion.py # 説明: AGV (Automated Guided Vehicle) の位置情報を管理し、UDPサーバーとして動作するGUIアプリケーションです。 # 必要なライブラリをインポート import tkinter as tk import socket import threading def AGV_handle_submit(canvas, st…...

JavaScript从入门到精通系列第三十三篇:详解正则表达式语法(二)

文章目录 一:正则表达式 1: 检查一个字符串中是否有. 2:第二种关键表达 3:第三种关键表达 ​编辑4:第四种关键表达 5:第五种关键表达 6:第六种关键表达 二:核心表达二 1&am…...

由于找不到 d3dx9_43.dll,无法继续执行代码。重新安装程序可能会解决此问题

电脑出现d3dx9_43.dll缺失的问题,通常是由于DirectX组件未安装或损坏导致的。为了解决这个问题,我为您提供了以下四个解决方法: d3dx9_43.dll解决方法1. 使用dll修复程序修复 首先,使用系统文件程序dll进行修复操作非常简单&…...

AI全栈大模型工程师(二十一)LangChain和SemanticKernel怎么选

LangChain 和 Semantic Kernel 怎么选? #%% md 划重点: 两者都值得学C#、JavaScript 和 Java 现在没得选做原型,首选 LangChain。功能多,开发快做产品,还是 SK 长期更可依赖建议只用 SK 的 Connectors 和 Plugins 能力…...

npm install 报错 chromedriver 安装失败的解决办法

npm install chromedriver --chromedriver_cdnurlhttp://cdn.npm.taobao.org/dist/chromedriver...

C语言--每日五道选择题--Day6

第一题 1、声明以下变量,则表达式: ch/i (f*d – i) 的结果类型为( ) char ch; int i; float f; double d; A: char B: int C: float D: double 答案及解析 D 基本数据类型的等级从低到高如下:char-> int-> long-> f…...

element-ui 封装 表格

一、封装表格组件 <template><el-table :data"list" :default-sort"{ prop: date }" style"width: 100%"><template v-for"item in tableColumn"><el-table-columnv-if"item.filters":prop"item…...

数据的使用、表关系的创建、Django框架的请求生命周期流程图

目录 一、数据的增删改查 1. 用户列表的展示 2. 修改数据的逻辑分析 3. 删除功能的分析 二、如何创建表关系 三、Django的请求生命周期流程图 一、数据的增删改查 1. 用户列表的展示 把数据表中得用户数据都给查询出来展示在页面上 查询数据 def userlist(request):&qu…...

Python基础教程:类--继承和方法的重写

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 什么是继承 继承就是让类与类之间产生父子关系&#xff0c;子类可以拥有父类的静态属性和方法 继承就是可以获取到另一个类中的静态属性和普通方法&#xff08;并非所有成员&#xff09; 在python中&#xff0c;新建的类可…...

Three.js提供了多种类型的灯光

Three.js提供了多种类型的灯光&#xff0c;包括环境光、点光源、平行光源和聚光灯。这些灯光可以用来照亮场景中的物体&#xff0c;使其看起来更加真实。 环境光(AmbientLight)&#xff1a;环境光会均匀地照亮场景中的所有物体&#xff0c;没有方向&#xff0c;不能用来投射阴…...

精通Nginx(10)-负载均衡

负载均衡就是将前端过来的负载分发到两台或多台应用服务器。Nginx支持多种协议的负载均衡,包括http(s)、TCP、UDP(关于TCP、UDP负载均衡另文讲述)等。 目录 HTTP负载均衡 负载均衡策略 轮询 least_conn(最少连接) hash(通用哈希) ip_hash(IP 哈希) random(随…...

Hls学习(一)

1&#xff1a;CPU、DSP、GPU都算软件可编程的硬件 2&#xff1a;dsp在递归方面有所减弱&#xff0c;在递归方面有所增强&#xff0c;比如递归啊等&#xff0c;GPU可以同时处理多个进程&#xff0c;对于大块数据&#xff0c;流处理比较适用 3&#xff1a;为了提高运算量处理更多…...

Maven打包引入本地依赖包

Maven打包引入本地依赖包 SpringBoot 工程&#xff0c;Maven 在构建项目时&#xff0c;如何引入本地 Jar 包&#xff1f; 适合场景&#xff1a; 引用的依赖不在 Maven 仓库第三方公司提供的 SDK 包Maven 内网离线开发引入被定制改动过的 Jar 包 解决方法&#xff1a; 在 I…...

Docker常用命令及部署微服务项目

Docker常用命令及部署微服务项目 1、Docker常用命令 1、设置Yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2、安装docker yum -y install docker-ce 3、启动docker service docker start 4、验证 docker version 5…...

okhttp添加公共参数

在项目开发中很多时候后台都会给一些全局的公共入参&#xff0c;比如携带手机信息或者时间戳等字段。而我们在使用okhttp时&#xff0c;就需要我们单独就行二次封装处理了&#xff0c;对于请求全局参数&#xff0c;每次请求都要去写一次&#xff0c;那是肯定不行的。 所以就要我…...

基于SpringBoot的SSMP整合案例(开启日志与分页查询条件查询功能实现)

开启事务 导入Mybatis-Plus框架后&#xff0c;我们可以使用Mybatis-Plus自带的事务&#xff0c;只需要在配置文件中配置即可 使用配置方式开启日志&#xff0c;设置日志输出方式为标准输出mybatis-plus:global-config:db-config:table-prefix: tb_id-type: autoconfiguration:…...

android studio 修改图标

Android Studio 修改图标 简介 Android Studio 是一款由谷歌推出的用于开发 Android 应用程序的集成开发环境&#xff08;IDE&#xff09;。在开发过程中&#xff0c;我们可以根据自己的需求修改 Android Studio 的图标&#xff0c;以个性化我们的开发环境。 本文将介绍如何在…...

pytorch学习之第二课之预测温度

主要有以下几个步骤 第一&#xff1a;导入相应的工具包 第二&#xff1a;导入需要使用的数据集 第三&#xff1a;对导入的数据集输入进行预处理&#xff0c;找出特征与标签&#xff0c;查看数据特征的类型&#xff0c;判断是否需要标准化或者归一化处理 第四&#xff1a;构建神…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

如何做好一份技术文档?从规划到实践的完整指南

如何做好一份技术文档&#xff1f;从规划到实践的完整指南 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...