Notebook 在复现数据科学研究成果中的丝滑使用

对于数据科学和 AI 科研人员而言,研究成果的复现至关重要。成果复现既是一种研究算法的方式,也有助于科研人员找到研究的新途径。

IDP 中提供自研 notebook 交互式编程环境,它非常适合做数据分析与代码展示,主要功能包括:智能开发、自适配环境、一键运行、一键连接数据源、各种其他平台工具集成、可视化工作流管理等等。

本文仅以展示可复现性研究成果为目标,来讲解如何利用 IDP 书写漂亮的 notebook。

研究成果复现的开发周期通常可分为三个阶段:组织和记录,代码的思想整理记录和为分享做准备。下面将对这三阶段进行依次展开。

一、组织和记录

“组织记录”,顾名思义就是记录完整的实验过程,其实验依赖应当完全参照论文内容的明确指示或者自我的实验设计细节。

广泛总结其他研究学者的经验,此阶段的 notebook 书写应当遵循以下几点:

1. 内容的故事性

IDP notebook 由代码、文本、SQL、数据可视化四部分组成,我们要利用好文本甚至多媒体在解释性方面的优秀表达,创建一个计算性的叙述,像为观众讲故事一样地介绍主题、排列步骤、解释结果,让这个故事变得更加引人入胜,在此时要对阅读故事的人群有一个预估,他是实验室的非技术同事、另一个实验室的分析师、某一期刊的读者还是公众?这决定了你要讲故事讲成什么样、语言描述的粒度大小。

img

图 1. IDP Notebook 组成

2. 更加注重过程而不是结果

IDP notebook 有很强的交互性,右边栏的变量管理器强大的功能进一步增强了这一点,这使得我们尝试和对比不同方法或参数更加快速和容易。但便捷的交互和参数管理功能,有时会使我们忽略了在执行这些交互式调研时将过程其记录下来(根源在于懒得新建一个 cell)。我们应当确保记录下所有的探索,甚至那些导致进入死胡同的探索!这些将帮助你记住做了什么和为什么做。不建议等到分析结束、得到了可靠结果后,才添加这样的解释性文字。正确做法是不要等,到那时你可能已经忘记了为什么选择某个特定参数值、从哪里复制了一段代码,或者中间结果的有趣之处是什么。如果你没有时间全面记录你此刻正在做什么或在想什么,那么留下简短的描述性笔记来提醒自己,在可以停下时抓紧把这些内容添加上。

img

图 2. IDP 工作区变量管理器

3. 将内容分区

IDP 的自研 notebook 是一个交互式的环境,所以它很容易编写和运行单行单元格,在实验过程中,可能会存在多个他人难以理解的短小代码单元格。这时,我们可以尝试添加一个有意义的分析步骤,用以划分单元块,还可以联动右边栏的大纲功能,实现随时跳转,准确定位。

细化来说,就是按单元格模块化代码,并在单元格上方用 markdown 标记。将每个单元格想象为一个段落、拥有一个函数或完成一个任务(例如,创建一个绘图)。避免长单元格(任何超过 100 行或一页的内容都太长了)。在代码注释中放入低级文档。使用描述性的 markdown header 将 notebook 分区,使其可以轻松导航和添加目录。将长 notebook 拆分为一系列 notebook,并保留一个 top-level index notebook,其中包含指向各个 notebook 的链接。

img

图 3. IDP 工作区大纲

二、代码的思想整理记录

到这一步实验已经基本完成,我们要让我们书写的 notebook 变得更加美观、合理,需要在以下几个方面整理笔记:

1. 遵循规则的重要性

面向对象的思想在代码工程中应用很多,此时也需要简单地遵循规则,以避免重复,在 notebook 中,复制一个单元格、调整几行、将生成的代码粘贴到新单元格或其他 notebook 中并再次运行是特别容易的,所以实验过程中难免留下一些重复代码,此时就应当将其用函数的形式包装起来,复杂一点的需要用到类,这取决于自己的判断。

需要注意的是,如果你要在其他项目或 notebook 中重用代码,请考虑将其转换为模块、包或库,并遵循良好的软件开发实践(如单元测试)。

2. 实验环境的配置

记录依赖项是一个非常重要的问题,这决定了你未来是否能重新生成分析,在计算机科学实验领域,建议一开始就使用诸如 conda 的 environment.yml 或 pip 的 requirements.txt 之类的工具明确地管理依赖项,以列出所有相关的依赖项(包括它们的软件版本)。始终在这些依赖项创建的环境中工作,以确保不添加未记录的依赖项。

在 notebook 中,你可以使用!pip install XXX.txt 一键安装依赖项,在工作区底部一键切换环境等等来完成实验配置,如果对 Linux 系统比较熟悉,也可以使用左边栏的终端功能,直接完成实验环境的配置。

3. 版本控制的妙用

IDP 工作区头部右侧的历史版本,可以实现版本控制,因为 notebook 的交互特性使其很容易意外地更改或删除重要内容。此外,由于 notebook 中包含代码,代码不可避免会有 bug,因此确定 bug 引入与修复的时间(及其可能影响的分析)是科学计算中的一项关键能力。

img

图 4. IDP 版本管理

4. 工作流的使用

实验研究稳定之后,可以考虑构建 pipeline,记录初步探索性研究的 notebook 很少能被广泛推广,但一旦确定了某种稳定的分析方法,设计良好的 notebook 就可以通过 pipeline 推广到其他任务中,从而使用不同的输入数据和参数很容易地重复分析。记住这一点,从一开始就设计你的 notebook,以允许将来重新调整用途。把关键变量声明(尤其是在进行新的分析时会改变的变量)放在 notebook 的顶部,而不是埋在中间的某个地方。直接在 notebook 中执行准备步骤,如数据清理,并尽可能避免手动干预。

通过构建 pipeline,也避免了他人在因为 ReadMe.txt 的阅读难度而影响复现结果。

img

图 5. IDP 可视化工作流管理

三、分享

分享是一项高瞻远瞩的主题,在书写 notebook 的时候考虑这一点似乎有些“鸡肋”,实际上分享、交流才是实验研究走得更远的基石,以下几点需要注意。

1. 可读性

分享的内容一定要具有可读性,特别是对于实验数据,需要详细又清晰的解释。理想情况下,你可以在 notebook 中共享整个数据集。我们认识到许多数据集太大或太敏感,无法以这种方式共享。在这些情况下,考虑将大型和复杂的数据集分解为多个层次,这样即使原始数据太大,无法与已发布的 notebook 一起共享,或者受到隐私或其他访问问题的限制,也不会影响到可复现性。

2. 便捷性

当我们完成了以上所有的点,我们的 notebook 已经书写得非常美观可用了,那么就需要考虑一个问题,他人如何访问、运行和探索它们呢?团队协作是 IDP 的特色功能,支持 notebook 的一键分享,目前已实现数据可视化单元格的一键分享。

我们也可以选择将 notebook 存储到一个具备清晰 README 文件的公共代码库中来以便分享,如常见的 GitHub。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

资源分享

图片

大模型AGI学习包

图片

图片

资料目录

  1. 成长路线图&学习规划
  2. 配套视频教程
  3. 实战LLM
  4. 人工智能比赛资料
  5. AI人工智能必读书单
  6. 面试题合集

人工智能\大模型入门学习大礼包》,可以扫描下方二维码免费领取

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

图片

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩

图片

3.LLM

大家最喜欢也是最关心的LLM(大语言模型)

图片

人工智能\大模型入门学习大礼包》,可以扫描下方二维码免费领取

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

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

相关文章

java基础概念01-注释、关键字、字面量、变量

一、注释 注释内容不会参与编译和运行,仅仅是对代码的解释说明。 1-1、注释的三种类型 1、单行注释://…… // 这是单行注释 2、多行注释:/*…….*/ /* 这是一个 多行注释 */ 3、文档注释 特殊的多行注释,以/**开头&#xf…

【初阶数据结构】理解堆的特性与应用:深入探索完全二叉树的独特魅力

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油!时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

Qt类 | QObject类详解

文章目录 一、QObject类介绍二、Properties(属性)三、Public Functions(公共函数)四、Public Slots(公共槽函数)五、Signals(信号)六、Static Public Members(静态公共成…

react Ant Design 动态表头添加操作列

模拟后端返回的表头、列表数据 注意:我们要在表头数据中添加一个 render 函数,里面就是你操作列的内容,value是你数据列表每行的对象 ,item 是你表头的对象 页面中去处理这个两个数组 dataList.forEach((item, index) > {item.…

昇思25天学习打卡营第24天 | RNN实现情感分类

概述 情感分类是自然语言处理中的经典任务,是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型,实现如下的效果: 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This film is great 正确标…

dmasmtool工具详细用法

DMASMTOOL 是 DMASM 文件系统管理工具,提供了一套类 Linux 文件操作命令,用于管理 ASM 文件,是管理、维护 DMASM 的好帮手。DMASMTOOL 工具使用 DMASMAPI 连接到 DMASMSVR,并调用相应的 DMASMAPI 函数,实现创建、拷贝、…

C1W2.LAB.Visualizing Naive Bayes

理论课:C1W2.Sentiment Analysis with Nave Bayes 文章目录 导入包Calculate the likelihoods for each tweetUsing Confidence Ellipses to interpret Nave Bayes 理论课: C1W2.Sentiment Analysis with Nave Bayes 导入包 在下面的练习中&#xff0…

everything搜索不到任何文件-设置

版本: V1.4.1.1024 (x64) 问题:搜索不到任何文件 click:[工具]->[选项]->下图所示 将本地磁盘都选中包含

Python爬虫速成之路(3):下载图片

hello hello~ ,这里是绝命Coding——老白~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页:绝命Coding-CSDN博客 &a…

SpringMVC源码解析(一):web容器启动流程

SpringMVC源码系列文章 SpringMVC源码解析(一):web容器启动流程 目录 一、SpringMVC全注解配置1、pom文件2、web容器初始化类(代替web.xml)3、SpringMVC配置类(代替springmvc.xml)4、测试Controller 二、SpringServletContainerInitializer1、web容器初始化入口2、…

从本地到全局:基于图的RAG方法进行查询聚焦原理摘要

摘要 使用检索增强生成(RAG)从外部知识源检索相关信息,使大型语言模型(LLMs)能够回答有关私有和/或以前未见过的文档集合的问题。然而,当针对整个文本文档库提出全局问题时,例如“数据集中的主…

音视频入门基础:H.264专题(13)——FFmpeg源码中通过SPS属性获取视频色彩格式的实现

一、引言 通过FFmpeg命令可以获取到H.264裸流文件的色彩格式(又译作色度采样结构、像素格式): 在vlc中也可以获取到色彩格式(vlc底层也使用了FFmpeg进行解码): 这个色彩格式就是之前的文章《音视频入门基础…

【精品资料】模块化数据中心解决方案(33页PPT)

引言:模块化数据中心解决方案是一种创新的数据中心设计和部署策略,旨在提高数据中心的灵活性、可扩展性和效率。这种方案通过将数据中心的基础设施、计算、存储和网络资源封装到标准化的模块中,实现了快速部署、易于管理和高效运维的目标 方案…

2024最新Cloudways主机使用教程(含最新Cloudways折扣码)

Cloudways是一家提供云托管服务的公司,可以帮助你轻松管理和运行你的网站。本教程是Cloudways主机注册和使用教程。Cloudways界面简洁,使用方便,不需要复杂的设置,就能快速搭建一个WordPress网站。它的主机功能包括高级缓存和Bree…

DepthAnything(2): 基于ONNXRuntime在ARM(aarch64)平台部署DepthAnything

DepthAnything(1): 先跑一跑Depth Anything_depth anything离线怎么跑-CSDN博客 目录 1. 写在前面 2. 安装推理组件 3. 生成ONNX 4. 准备ONNXRuntime库 5. API介绍 6. 例程 1. 写在前面 DepthAnything是一种能在任何情况下处理任何图像的简单却又强大的深度估计模型。 …

KingbaseES数据库逻辑备份还原

数据库版本:KingbaseES V008R006C008B0014 简介 介绍2个KingbaseES用于备份还原的工具: sys_dump:逻辑备份sys_restore:逻辑还原 sys_dump 是 KingbaseES 用于逻辑备份的工具,可以将数据备份为不同类型的文件。支持数据…

ARM功耗管理标准接口之SCMI

安全之安全(security)博客目录导读 思考:功耗管理有哪些标准接口?ACPI&PSCI&SCMI? Advanced Configuration and Power Interface Power State Coordination Interface System Control and Management Interface 下图示例说明了实现…

docker部署canal 并监听mysql

1.部署mysql 需要开启mysql的binlong,和创建好用户等 可以参考这个 Docker部署Mysql数据库详解-CSDN博客 2.部署canal 参考这一篇: docker安装Canal,开启MySQL binlog ,连接Java,监控MySQL变化_docker canal-CSD…

内网信息收集——MSF信息收集浏览器记录配置文件敏感信息

文章目录 一、配置文件敏感信息收集二、浏览器密码&记录三、MSF信息收集 域控:windows server 2008 域内机器:win7 攻击机:kali 就是红日靶场(一)的虚拟机。 一、配置文件敏感信息收集 使用searchall64.exe&#…

【错题集-编程题】四个选项(DFS + 剪枝 + 哈希表)

牛客对应题目链接:四个选项 (nowcoder.com) 一、分析题目 用递归枚举出所有的情况,注意剪枝: 填写某个数时,要看看还有没有剩余次数。填写某个数时,要看看符不符合若干题的选项必须相同。 二、代码 // 值得学习的代码…