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

news2025/1/15 21:02:08

     目录

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_state
            total_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 = degrees

    def 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_intensity
        self.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, _ = sample
    rotated_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.text
        optimizer.zero_grad()
        predictions = model(text, text_lengths).squeeze(1)
        loss = criterion(predictions, batch.label)
        loss.backward()
        optimizer.step()

# 在测试集上评估模型
correct_predictions = 0
total_samples = 0

with torch.no_grad():
    for batch in test_iterator:
        text, text_lengths = batch.text
        predictions = 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):

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

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

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

相关文章

Java编程--synchronized/死锁/可重入锁/内存可见性问题/wait()、notify()

前言 逆水行舟,不进则退!!! 目录 线程安全 synchronized原子锁 可重入锁(递归锁) 死锁 内存可见性问题 wait()、notify() 线程安全 线程安全是指在多线程环境下,程序的行为表现仍然符合我…

华为ensp:静态默认路由

静态路由 到r2 上的系统视图模式 下一跳为1.1.1.2 ip route-static 192.168.2.0 255.255.255.0 1.1.1.2 如果找2网段下一跳为1.1.1.2接口 默认路由 到r3上做的是默认路由 ip route-static 0.0.0.0 0 1.1.1.1 所有的流量去找1.1.1.1 查看效果 只要做完完整的路由就可…

HIKVISION流媒体管理服务器后台任意文件读取漏洞

默认账号密码为 admin/12345 构造payload /systemLog/downFile.php?fileName../../../../../../../../../../../../../../../windows/system.ini漏洞证明 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免责声明:由于传播…

无需标注海量数据,目标检测新范式OVD

当前大火的多模态GPT-4在视觉能力上只具备目标识别的能力,还无法完成更高难度的目标检测任务。而识别出图像或视频中物体的类别、位置和大小信息,是现实生产中众多人工智能应用的关键,例如自动驾驶中的行人车辆识别、安防监控应用中的人脸锁定…

若依如何进行页面路由跳转,路由跳转时如何携带参数(超详细图文教程)

我们经常会有这样需求,当我们在一个页面时,想要跳转到另一个页面,但是跳转的同时还需要携带参数。那么这种情况在若依系统中该如何做呢,下面我们来说一下。 文章目录 问题提出:一、创建目标页面的路由(也就是图2的路由…

C语言--有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

一.解体思路 设一个结构体数组,数组中包含3个元素; 每个元素中的信息应包括候选人的姓名和得票数;输入被选人的姓名,然后与数组元素中的“姓名”成员比较,如果相同,就给这个元素中的“得票数”成 员的值加1;输出所有元素的信息。 …

win下安卓打包指南

win下安卓打包指南 0、缘起 换了台电脑竟然忘了怎么打包,还好有笔记,用软件打包也挺好,但是我感觉用 命令行 更有操作感,分享下。 1、下载并配置apktool(放在C://Windows无需配置环境变量,需要java环境&…

【算法练习Day45】最长公共子序列不相交的线最大子数组和

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 最长公共子序列不相交的线最…

Linux输入与输出设备的管理

计算机系统中CPU 并不直接和设备打交道,它们中间有一个叫作设备控制器(Device Control Unit)的组件,例如硬盘有磁盘控制器、USB 有 USB 控制器、显示器有视频控制器等。这些控制器就像代理商一样,它们知道如何应对硬盘…

如何在 Windows 11 上恢复丢失的文件?(4种方法)

在 Windows 11 设备上丢失重要文件感觉就像一场噩梦。这是您希望时光倒流并撤消意外删除或避免那些意外的系统故障的时刻之一。这种情况带来的挫败感和焦虑感简直难以承受。但是,嘿,不要绝望!我们随时为您提供帮助。 在这本真诚的指南中&…

CA 陪你看 Ignite | 聚焦 Microsoft Ignite 2023

点击蓝字 关注我们 编辑:Alan Wang 排版:Rani Sun 微软 Reactor 为帮助广开发者,技术爱好者,更好的学习 .NET Core, C#, Python,数据科学,机器学习,AI,区块链, IoT 等技术&#xff0…

android studio 修改图标

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

XC1010非隔离型、低成本的PWM功率开关、AC-DC 220V转5V 200mA小电流芯片

XC1010是一款非隔离型、高集成度且低成本的PWM功率开关,适用于降压型和升降压型电路。 XC1010采用高压单晶圆工艺,在同一片晶圆上集成有 500V 高压 MOSFET 和采用开关式峰值电流模式控制的控制器。在全电压输入的范围内可以保证高精度的 5V 默认…

LoRAShear:微软在LLM修剪和知识恢复方面的最新研究

LoRAShear是微软为优化语言模型模型(llm)和保存知识而开发的一种新方法。它可以进行结构性修剪,减少计算需求并提高效率。 LHSPG技术( Lora Half-Space Projected Gradient)支持渐进式结构化剪枝和动态知识恢复。可以通过依赖图分析和稀疏度…

【3】Gradle-快速入门使用【Gradle概念】

目录 【3】Gradle-快速入门使用【Gradle概念】Gradle任务查看可用任务了解任务探索任务依赖性 依赖关系了解传递依赖关系查看项目依赖项添加版本目录 【可选】 插件使用插件查看插件提供的任务配置插件 增量构建启用缓存使用构建缓存步骤总结 个人主页: 【⭐️个人主页】 需要您…

【tg】 5 :线程切换

manager 可以切到 其他类的其他线程去执行。线程切换 先通过 networkmgr 线程 执行 ,但是传递了Manager 自己的线程 进去。在networkmgr 的network线程中,获取到stats数据,然后扔给 manager的线程thread ,去posttask 还行这个task里调用了mediamanager 的perform ,在media…

研究方法——案例研究设计与方法

作者:罗伯特K.殷 (一)计划:如何把握何处、何时用案例研究方法 1.问题: 按照作者的观点,案例研究1984年之后才逐渐得到重视,可是在数据信息有效收集的时代,几乎所有的经典都是以案例…

[西湖论剑 2022]real_ez_node

文章目录 前置知识EJS模板注入(CVE-2022-29078)原型链污染漏洞 (CVE-2021-25928)HTTP响应拆分攻击(CRLF) 解题过程代码审计构造payload 前置知识 EJS模板注入(CVE-2022-29078) EJS…

LeetCode18-四数之和

注意!其中nums数值的范围,四个加一起会导致INT溢出,long类型则是64位的整数,因此不会导致溢出,这也是本题难点之一! 大佬解法(拿捏offer的解法) 经过反复的代码比对和Debug,发现大佬解法的速度之快体现在足足7个if语句的剪枝,其中包括了2个关键性的去重的if语句以及2个关键性…

openpnp - 74路西门子飞达控制板(主控板STM32_NUCLEO-144) - 验证

文章目录 openpnp - 74路西门子飞达控制板(主控板STM32_NUCLEO-144) - 验证概述笔记重复数字IO的问题想法手工实现程序实现确定要摘掉的数字重合线自动化测试的问题测试程序的场景测试程序的运行效果测试程序实现备注END openpnp - 74路西门子飞达控制板(主控板STM32_NUCLEO-14…