关于懒惰学习与渴求学习的一份介绍

news2024/11/25 22:50:25

在这篇文章中,我将介绍些懒惰学习与渴求学习的算法例子,会介绍其概念、优缺点以及其python的运用。

一、渴求学习

1.1概念

渴求学习(Eager Learning)是指在训练阶段构建出复杂的模型,然后在预测阶段运用这个构建出的模型来进行预测。(在西瓜书中,将其翻译为“急切学习”)

1.2 优缺点

优点:预测效率高(因为已经构建好,所以直接拿来用即可)、适用范围广泛、可解释性强。

缺点:训练时间长、对静态数据集有效(对于一个动态的数据集,渴求学习需要对其频繁计算与训练,这样在有些时候是不符合实际需求的)、模型更新能力弱。

1.3 常见渴求学习的算法

通常,像逻辑回归、决策树、逻辑森林、SVM、深度学习等都属于渴求学习。

二、懒惰学习

1.1 概念

懒惰学习(Lazy Learning)与传统的渴求学习对应,它是一种机器学习的范式。通常地,这类学习算法会在训练阶段做极少或压根不做计算,而在之后的预测阶段才进行计算。可以说这类学习算法不进行复杂运算而是转向简单的存储并用这些存储去做出决策。

仔细观察,我们会发现渴求学习与懒惰学习间实际反应了时间复杂度与空间复杂度间的权衡。在渴求学习中,我们在训练阶段就要去构建一个模型,此时的时间复杂度通常会很高,而到了预测阶段则会相对降低,因为此时我们直接使用了那个构建的模型,而在整个过程中,真正需要去存储的只有那个构建好的模型,而不是庞大的训练集;而懒惰学习则与之相反,它起先时间复杂度很低,而后变高,因为开始时只要存储数据即可,而到了之后的预测阶段才开始构建局部模型去预测,所以复杂度升高,在整个过程中,其空间复杂度都会很高,因为它需要存储的不是一个构建好的模型而是整个庞大的训练集。所以,在实际运用是可以根据需求找到对于时间与空间之间的平衡点而进行正确的决定。

1.2 优缺点

优点:适应性强、灵活性高、训练时间较少。

缺点:内存消耗大、可解释性弱。

1.3 常见懒惰学习的算法

1)KNN算法

之前,我有详细介绍过KNN算法,所以在这里我只放一份代码,有需要的可以看我以往的文章。代码如下:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt

# 加载数据集并分割
iris = load_iris()
X = iris.data[:, [2, 3]]  # 只使用花瓣长度和宽度
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)

# 标准化
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)

# KNN实例化
knn = KNeighborsClassifier(n_neighbors=3, p=2, metric='minkowski')
knn.fit(X_train_std, y_train)

# 预测
y_pred = knn.predict(X_test_std)

# 计算准确率
accuracy = np.mean(y_pred == y_test)
print(f'Accuracy: {accuracy * 100:.2f}%')

# 可视化结果
# 训练集
plt.scatter(X_train_std[y_train==0, 0], X_train_std[y_train==0, 1], color='red', marker='o', label='setosa')
plt.scatter(X_train_std[y_train==1, 0], X_train_std[y_train==1, 1], color='blue', marker='x', label='versicolor')
plt.scatter(X_train_std[y_train==2, 0], X_train_std[y_train==2, 1], color='green', marker='s', label='virginica')
# 测试集
plt.scatter(X_test_std[y_test==0, 0], X_test_std[y_test==0, 1], color='lightcoral', marker='o', label='test setosa')
plt.scatter(X_test_std[y_test==1, 0], X_test_std[y_test==1, 1], color='lightblue', marker='x', label='test versicolor')
plt.scatter(X_test_std[y_test==2, 0], X_test_std[y_test==2, 1], color='lightgreen', marker='s', label='test virginica')
plt.xlabel('Petal length [standardized]')
plt.ylabel('Petal width [standardized]')
plt.legend(loc='upper left')
plt.show()

其绘制出的图表为:

2)局部加权回归(LRW)

局部加权回归的思路是: 在训练阶段不进行计算只存储数据,然后到了预测阶段则对于每一个新的输入数据点都根据周围附近的数据点来构建一个局部线性回归模型并对这个输入数据点去预测,预测完则作废。

其代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 生成模拟数据
np.random.seed(42)
X = np.linspace(0, 10, 100).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.1, size=X.shape[0])

# LWR算法实现
def lw_regression(X_train, y_train, X_test, tau):# 带宽参数tau
    m = X_train.shape[0]
    weights = np.eye(m)

    for i in range(m):
        diff = X_train[i] - X_test
        weights[i, i] = np.exp(-diff * diff.T / (2.0 * tau * tau))

    theta = np.linalg.solve(X_train.T.dot(weights.dot(X_train)), X_train.T.dot(weights.dot(y_train)))
    return X_test.dot(theta)

# 预测
predictions = []
tau = 0.1
for point in X:
    predictions.append(lw_regression(X, y, point, tau))
predictions = np.array(predictions)

# 可视化结果
plt.figure(figsize=(10, 6))
plt.scatter(X, y, color='blue', label='Training data')
plt.plot(X, predictions, color='red', linewidth=2, label='LWR fit')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.title('Locally Weighted Regression (LWR)')
plt.legend()
plt.show()

然后代码做出的图表如下:

在这里,我给出代码的流程图如下:

这个流程图就是LWR的主要流程,至于整个代码,则是分为了三部分,生成模拟数据、预测以及可视化。其中关于生成模拟数据的过程中,我先设置了随机数种子,然后生成了0到10均匀分布的100个点,接着将之reshape成一列,最后生成正弦波形数据,并添加一些正态分布的噪声。

最后,我再解释下生成的图像,其中蓝色的点是生成的数据点,然后红色的曲线是加权回归算法的拟合结果。可以看出,局部加权回归算法生成的拟合曲线相当平滑。这是因为算法通过给每个训练样本分配权重,并根据权重构建局部线性模型,从而减少了噪声的影响。其中关于参数tau是指带宽,它控制着参数下降的速度,较小的tau值意味着权重随距离的增加而迅速下降,这会导致模型更加关注附近的点,可能产生过拟合。较大的tau值会使权重衰减得更慢,模型会考虑到更远的点,可能导致欠拟合。

 3)懒惰朴素贝叶斯

虽然朴素贝叶斯通常属于渴求学习,但是让我们将其所有训练数据保存下来,然后在预测时计算每个类别的条件概率,而不是预先计算并存储概率分布。那么此时它就属于懒惰学习了。

4)懒惰SVM

在训练阶段我们只让它去存储训练数据与支持向量,而不去构建决策边界,然后在预测阶段根据输入数据与支持向量的关系再去做分类决策,那么此时的支持向量机就可以被称为“懒惰SVM”。

除上述外,还有懒惰强化学习、懒惰实例基学习、懒惰决策规则等也属于懒惰学习的范畴,在此不一一叙述了。

此上

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

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

相关文章

分布式锁--redission 最佳实践!

我们知道如果我们的项目服务不只是一个实例的时候,单体锁就不再适用,而我们自己去用redis实现分布式锁的话,会有比如锁误删、超时释放、锁的重入、失败重试、Redis主从一致性等等一系列的问题需要自己解决。 当然,上述问题并非无…

3dsMax合并FBX的时候相同的节点会被合并(重命名解决),3Ds MAX创建空物体(虚拟对象或者点)

3dsMax合并FBX的时候相同的节点会被合并 3dsamax的文档,但是并没有说FBX的合并如何处理 https://help.autodesk.com/view/3DSMAX/2024/CHS/?guidGUID-98146EB8-436F-4954-8682-C57D4E53262A模型节点信息,yase,Points,Mesh 都是点…

【优选算法】(第二十一篇)

目录 外观数列(medium) 题目解析 讲解算法原理 编写代码 数⻘蛙(medium) 题目解析 讲解算法原理 编写代码 外观数列(medium) 题目解析 1.题目链接:. - 力扣(LeetCode) 2.题目描述 给定⼀个正整数n&#xff0…

openpnp - 坐标文件中的元件0角度如果和编带规定的角度不一样,需要调整贴片任务中的元件旋转角度

文章目录 openpnp - 坐标文件中的元件0角度如果和编带规定的角度不一样,需要调整贴片任务中的元件旋转角度笔记查看自己图纸中的封装的0角度方法贴片任务的角度值范围编带规定的0角度根据编带规定的元件0角度来调整贴片的元件旋转角度如果是托盘飞达备注备注END ope…

电脑失声,一招搞定

早已习惯了Edge浏览器的“大声朗读”功能,今天值班,值班室用的两台电脑只配有耳机,没有音箱,顿时感觉不适。 先找了一个带功放的老音箱,发现少了电箱到功放的音频线。 一顿搜索,在找到音频线的同时&#…

2024年计算机视觉与艺术研讨会(CVA 2024)

目录 基本信息 大会简介 征稿主题 会议议程 参会方式 基本信息 大会官网:www.icadi.net(点击了解参会投稿等信息) 大会时间:2024年11月29-12月1日 大会地点:中国-天津 大会简介 2024年计算机视觉与艺术国际学术…

基于SpringBoot+Vue+MySQL的装修公司管理系统

系统展示 管理员后台界面 员工后台界面 系统背景 随着信息技术的快速发展,装修行业正面临数字化转型的关键时刻。传统的装修管理方式存在信息管理混乱、出错率高、信息安全性差等问题,已无法满足现代市场的需求。因此,开发一套高效、便捷的装…

仿《11773手游》源码/手机游戏软件下载门户网站模板/帝国CMS 7.5

帝国CMS 7.5仿《11773手游》源码,手机游戏软件下载门户网站模板。简洁漂亮的手游下载网站模板,采用帝国CMS7.5核心,同步刷新M端。 该模板带同步生成插件,整站干净大气界面漂亮,简单不失简约,模板中的典范&…

css 简单网页布局(一)

1. 三种布局方式 1.1 标准流 1.2 浮动的使用 1.3 简述浮动 1.3.1 浮动三大特性 <style>.out {border: 1px red solid;width: 1000px;height: 500px;}.one {background-color: aquamarine;width: 200px;height: 100px;}.two {background-color: blueviolet;width: 200px;h…

Chromium 中JavaScript Fetch API接口c++代码实现(二)

Chromium 中JavaScript Fetch API接口c代码实现&#xff08;一&#xff09;-CSDN博客 接着上一篇继续介绍调用&#xff0c;上函数堆栈。 1、打开http://192.168.8.1/chfs/shared/test/test02.html 此标签进程ID12484&#xff0c; 2、打开vs附加上此进程ID12484 3、点击页面测…

华为 HCIP-Datacom H12-821 题库 (31)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1. 默认情况下&#xff0c;IS-IS Level-1-2 路由器会将 Level-2 区域的明细路由信息发布到Lev…

YOLOv8 基于NCNN的安卓部署

YOLOv8 NCNN安卓部署 前两节我们依次介绍了基于YOLOv8的剪枝和蒸馏 本节将上一节得到的蒸馏模型导出NCNN&#xff0c;并部署到安卓。 NCNN 导出 YOLOv8项目中提供了NCNN导出的接口&#xff0c;但是这个模型放到ncnn-android-yolov8项目中你会发现更换模型后app会闪退。原因…

【STM32 Blue Pill编程实例】-OLED显示HC-SR04超声波测距结果

OLED显示HC-SR04超声波测距结果 文章目录 OLED显示HC-SR04超声波测距结果1、HC-SR04超声波传感器介绍2、硬件准备及接线模块配置3.1 定时器配置3.2 OLED I2C接口配置3.3 HC-SR04引脚配置4、代码实现在本文中,我们将 HC-SR04 超声波传感器与 STM32 Blue Pill 开发板结合使用,并…

Python-函数与数据容器超详解

1.函数的定义 函数是&#xff1a;组织好的、可重复使用的、用来实现特定功能的代码段。它的优点&#xff1a;将功能封装在函数内&#xff0c;可供随时随地重复利用&#xff0c;提高代码的复用性&#xff0c;减少重复代码&#xff0c;提高开发效率 Python函数的定义方式&#…

Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略

日前&#xff0c;Perforce携手合作伙伴龙智一同亮相Unreal Fest 2024上海站&#xff0c;分享Helix Core版本控制系统及其协作套件的强大功能与最新动态&#xff0c;助力游戏创意产业加速前行。 Perforce解决方案工程师Kory Luo在活动主会场&#xff0c;带来《Perforce Helix C…

论文理解【LLM-CV】—— 【MAE】Masked Autoencoders Are Scalable Vision Learners

文章链接&#xff1a;Masked Autoencoders Are Scalable Vision Learners代码&#xff1a;GitHub - facebookresearch/mae发表&#xff1a;CVPR 2022领域&#xff1a;LLM CV一句话总结&#xff1a;本文提出的 MAE 是一种将 Transformer 模型用作 CV backbone 的方法&#xff0c…

新闻推荐系统:Spring Boot的可扩展性

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

csp-j模拟五补题报告

前言 今天第二题文件名把 r 写成 t 了 又跌出前10名了 白丢了好多分 &#xff08;“关于二进制中一的个数的研究与规律”这篇文章正在写&#xff09; 第一题 牛奶(milk) 我的代码&#xff08;AC&#xff09; #include<bits/stdc.h> #define ll long long #define fi …

Acwing 线性DP

状态转移方程呈现出一种线性的递推形式的DP&#xff0c;我们将其称为线性DP。 Acwing 898.数字三角形 实现思路&#xff1a; 对这个三角形的数字进行编号&#xff0c;状态表示依然可以用二维表示&#xff0c;即f(i,j),i表示横坐标&#xff08;横线&#xff09;&#xff0c;j表…

pygame--超级马里奥(万字详细版)

超级马里奥点我下载https://github.com/marblexu/PythonSuperMario 1.游戏介绍 小时候的经典游戏&#xff0c;代码参考了github上的项目Mario-Level-1&#xff0c;使用pygame来实现&#xff0c;从中学习到了横版过关游戏实现中的一些处理方法。原项目实现了超级玛丽的第一个小…