使用Rust的Linfa和Polars库进行机器学习:线性回归

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

使用rust的linfa和polars库进行机器学习:线性回归

怪兽智能全息舱 怪兽智能全息舱

专业的AI数字人平台,定制数字人专属IP

怪兽智能全息舱 16 查看详情 怪兽智能全息舱

在这篇文章中,我们将使用Rust的Linfa库和Polars库来实现机器学习中的线性回归算法。

Linfa crate旨在提供一个全面的工具包来使用Rust构建机器学习应用程序。

Polars是一个基于Apache Arrow内存模型的Rust DataFrame库。Apache Arrow提供了高效的列数据结构,并逐渐成为事实上的标准。

在下面的例子中,我们使用一个糖尿病数据集来训练线性回归算法。

使用以下命令创建一个Rust新项目:

cargo new machine_learning_linfa

在Cargo.toml文件中加入以下依赖项:

[dependencies]linfa = "0.7.0"linfa-linear = "0.7.0"ndarray = "0.15.6"polars = { version = "0.35.4", features = ["ndarray"]}

在项目根目录下创建一个diabetes_file.csv文件,将数据集写入文件。

AGESEX BMI BPS1S2S3S4S5S6Y592 32.1101 157 93.2384 4.859887151481 21.687183 103.2 703 3.89186975722 30.593156 93.6414 4.672885141241 25.384198 131.4 405 4.890389206501 23101 192 125.4 524 4.290580135231 22.689139 64.8612 4.18976897362 2290160 99.6503 3.951282138662 26.2114 255 185 564.554.24859263602 32.183179 119.4 424 4.477394110.............

数据集从这里下载:https://www4.stat.ncsu.edu/~boos/var.select/diabetes.tab.txt

在src/main.rs文件中写入以下代码:

use linfa::prelude::*;use linfa::traits::Fit;use linfa_linear::LinearRegression;use ndarray::{ArrayBase, OwnedRepr};use polars::prelude::*; // Import polarsfn main() -> Result<(), Box> {// 将制表符定义为分隔符let separator = b't';let df = polars::prelude::CsvReader::from_path("./diabetes_file.csv")?.infer_schema(None).with_separator(separator).has_header(true).finish()?;println!("{:?}", df);// 提取并转换目标列let age_series = df.column("AGE")?.cast(&DataType::Float64)?;let target = age_series.f64()?;println!("Creating features dataset");let mut features = df.drop("AGE")?;// 遍历列并将每个列强制转换为Float64for col_name in features.get_column_names_owned() {let casted_col = df.column(&col_name)?.cast(&DataType::Float64).expect("Failed to cast column");features.with_column(casted_col)?;}println!("{:?}", df);let features_ndarray: ArrayBase<OwnedRepr, _> =features.to_ndarray::(IndexOrder::C)?;let target_ndarray = target.to_ndarray()?.to_owned();let (dataset_training, dataset_validation) =Dataset::new(features_ndarray, target_ndarray).split_with_ratio(0.80);// 训练模型let model = LinearRegression::default().fit(&dataset_training)?;// 预测let pred = model.predict(&dataset_validation);// 评价模型let r2 = pred.r2(&dataset_validation)?;println!("r2 from prediction: {}", r2);Ok(())}

使用polar的CSV reader读取CSV文件。将数据帧打印到控制台以供检查。从DataFrame中提取“AGE”列作为线性回归的目标变量。将目标列强制转换为Float64(双精度浮点数),这是机器学习中数值数据的常用格式。将features DataFrame转换为narray::ArrayBase(一个多维数组)以与linfa兼容。将目标序列转换为数组,这些数组与用于机器学习的linfa库兼容。使用80-20的比例将数据集分割为训练集和验证集,这是机器学习中评估模型在未知数据上的常见做法。使用linfa的线性回归算法在训练数据集上训练线性回归模型。使用训练好的模型对验证数据集进行预测。计算验证数据集上的R²(决定系数)度量,以评估模型的性能。R²值表示回归预测与实际数据点的近似程度。

执行cargo run,运行结果如下:

shape: (442, 11)┌─────┬─────┬──────┬───────┬───┬──────┬────────┬─────┬─────┐│ AGE ┆ SEX ┆ BMI┆ BP┆ … ┆ S4 ┆ S5 ┆ S6┆ Y ││ --- ┆ --- ┆ ---┆ --- ┆ ┆ ---┆ ---┆ --- ┆ --- ││ i64 ┆ i64 ┆ f64┆ f64 ┆ ┆ f64┆ f64┆ i64 ┆ i64 │╞═════╪═════╪══════╪═══════╪═══╪══════╪════════╪═════╪═════╡│ 59┆ 2 ┆ 32.1 ┆ 101.0 ┆ … ┆ 4.0┆ 4.8598 ┆ 87┆ 151 ││ 48┆ 1 ┆ 21.6 ┆ 87.0┆ … ┆ 3.0┆ 3.8918 ┆ 69┆ 75││ 72┆ 2 ┆ 30.5 ┆ 93.0┆ … ┆ 4.0┆ 4.6728 ┆ 85┆ 141 ││ 24┆ 1 ┆ 25.3 ┆ 84.0┆ … ┆ 5.0┆ 4.8903 ┆ 89┆ 206 ││ … ┆ … ┆ …┆ … ┆ … ┆ …┆ …┆ … ┆ … ││ 47┆ 2 ┆ 24.9 ┆ 75.0┆ … ┆ 5.0┆ 4.4427 ┆ 102 ┆ 104 ││ 60┆ 2 ┆ 24.9 ┆ 99.67 ┆ … ┆ 3.77 ┆ 4.1271 ┆ 95┆ 132 ││ 36┆ 1 ┆ 30.0 ┆ 95.0┆ … ┆ 4.79 ┆ 5.1299 ┆ 85┆ 220 ││ 36┆ 1 ┆ 19.6 ┆ 71.0┆ … ┆ 3.0┆ 4.5951 ┆ 92┆ 57│└─────┴─────┴──────┴───────┴───┴──────┴────────┴─────┴─────┘Creating features datasetshape: (442, 11)┌─────┬─────┬──────┬───────┬───┬──────┬────────┬─────┬─────┐│ AGE ┆ SEX ┆ BMI┆ BP┆ … ┆ S4 ┆ S5 ┆ S6┆ Y ││ --- ┆ --- ┆ ---┆ --- ┆ ┆ ---┆ ---┆ --- ┆ --- ││ i64 ┆ i64 ┆ f64┆ f64 ┆ ┆ f64┆ f64┆ i64 ┆ i64 │╞═════╪═════╪══════╪═══════╪═══╪══════╪════════╪═════╪═════╡│ 59┆ 2 ┆ 32.1 ┆ 101.0 ┆ … ┆ 4.0┆ 4.8598 ┆ 87┆ 151 ││ 48┆ 1 ┆ 21.6 ┆ 87.0┆ … ┆ 3.0┆ 3.8918 ┆ 69┆ 75││ 72┆ 2 ┆ 30.5 ┆ 93.0┆ … ┆ 4.0┆ 4.6728 ┆ 85┆ 141 ││ 24┆ 1 ┆ 25.3 ┆ 84.0┆ … ┆ 5.0┆ 4.8903 ┆ 89┆ 206 ││ … ┆ … ┆ …┆ … ┆ … ┆ …┆ …┆ … ┆ … ││ 47┆ 2 ┆ 24.9 ┆ 75.0┆ … ┆ 5.0┆ 4.4427 ┆ 102 ┆ 104 ││ 60┆ 2 ┆ 24.9 ┆ 99.67 ┆ … ┆ 3.77 ┆ 4.1271 ┆ 95┆ 132 ││ 36┆ 1 ┆ 30.0 ┆ 95.0┆ … ┆ 4.79 ┆ 5.1299 ┆ 85┆ 220 ││ 36┆ 1 ┆ 19.6 ┆ 71.0┆ … ┆ 3.0┆ 4.5951 ┆ 92┆ 57│└─────┴─────┴──────┴───────┴───┴──────┴────────┴─────┴─────┘r2 from prediction: 0.15937814745521017

对于优先考虑快速迭代和快速原型的数据科学家来说,Rust的编译时间可能是令人头疼的问题。Rust的强静态类型系统虽然有利于确保类型安全和减少运行时错误,但也会在编码过程中增加一层复杂性。

以上就是使用Rust的Linfa和Polars库进行机器学习:线性回归的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/897729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
在Java中如何使用this关键字引用对象_OOP对象引用技巧分享
上一篇 2025年11月28日 18:37:47
喜报!凉山文旅集团成功获评产业类“AA+”主体信用等级
下一篇 2025年11月28日 18:37:51

相关推荐

  • 怎么全选VSCode多个光标_VSCode多光标操作与批量选择文本教程

    VSCode中高效创建多光标的方法包括:Alt+Click手动添加光标,适用于不规则位置;Ctrl+Alt+方向键垂直添加光标,适合连续多行操作;Ctrl+D逐个选择匹配项,精准控制选择范围;Ctrl+Shift+L一次性选择所有匹配项,实现全局批量修改。结合查找替换和列选择模式可进一步提升编辑效率…

    2026年9月21日
    100
  • mysql常用存储引擎有哪些

    InnoDB是现代MySQL应用的首选存储引擎,因其支持事务(ACID)、行级锁、外键约束、崩溃恢复和MVCC,适用于高并发、数据完整性要求高的OLTP场景;MyISAM虽读取快但仅支持表级锁且无事务和外键,适用于读多写少的简单场景,已逐渐被淘汰;Memory引擎将数据存于内存,速度快但易失,适合临…

    2026年9月21日
    000
  • 大数据量下的批量导入/导出优化

    在大数据环境下优化批量导入/导出的方法包括:1. 使用批处理技术分批导入/导出数据,减少系统资源压力;2. 采用数据流技术如apache kafka进行实时处理,降低内存占用;3. 利用并行处理技术分配任务到多个处理器或节点,提高处理速度;4. 通过性能监控和调优识别并解决瓶颈点,以提升整体效率。 …

    2026年9月21日
    300
  • Linux怎么监控特定进程的运行状态

    Linux怎么监控特定进程的运行状态Linux怎么监控特定进程的运行状态Linux怎么监控特定进程的运行状态Linux怎么监控特定进程的运行状态

    监控Linux进程需综合使用ps、top、htop、pgrep和systemctl等工具,结合资源占用、进程状态、日志输出和进程数量判断是否异常,并通过systemd的Restart机制或看门狗脚本实现自动重启,同时利用journalctl、sar、atop及Prometheus+Grafana等方…

    2026年9月21日 用户投稿
    100
  • VSCode的悬浮提示信息如何自定义?

    通过JSDoc或docstring添加注释可直接影响VSCode悬浮提示内容,如JavaScript/TypeScript中使用/* /格式、Python中使用三引号文档字符串,配合Pylance等扩展增强显示;安装语言支持扩展可提升提示丰富度;高级场景可通过开发自定义语言服务器,在textDocu…

    2026年9月20日
    500
  • AI推文助手如何设置发布时间 AI推文助手的智能定时发布技巧

    AI推文助手如何设置发布时间 AI推文助手的智能定时发布技巧AI推文助手如何设置发布时间 AI推文助手的智能定时发布技巧AI推文助手如何设置发布时间 AI推文助手的智能定时发布技巧AI推文助手如何设置发布时间 AI推文助手的智能定时发布技巧

    一、使用AI推文助手的智能推荐功能,基于粉丝互动数据选择最佳发布时间;二、手动设定精确发布时间以精准触达特定受众;三、通过日程管理批量导入多条推文的发布计划,提升运营效率;四、开启多时区同步功能,实现跨区域受众在本地黄金时段接收内容,最大化传播效果。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜…

    2026年9月12日 用户投稿
    200
  • windows怎么查看并导出事件日志_Windows事件日志查看与导出方法

    通过事件查看器和命令行工具可查看、筛选并导出Windows日志。首先使用eventvwr.msc打开事件查看器,浏览系统、应用程序和安全日志;其次通过筛选功能按级别、ID和时间定位事件;然后右键日志类别选择“将所有事件保存为”以导出为.evtx、CSV等格式;最后利用wevtutil或PowerSh…

    2026年9月12日
    000
  • 如何在mysql中迁移临时表数据

    临时表数据迁移需在会话结束前将数据转存至持久表,常用方法包括:1. 用INSERT INTO…SELECT将临时表数据插入现有普通表;2. 用CREATE TABLE…AS SELECT基于临时表创建新表(无约束);3. 跨会话迁移时需通过中间表或文件中转;4. 可导出为CS…

    2026年9月11日
    200
  • 如何在Gremlin-Java中动态插入未知数量的顶点

    本文探讨了在Gremlin-Java中动态构建查询以插入未知数量顶点的方法。我们将介绍两种主要的后端无关策略:通过迭代构建Gremlin遍历以及利用`inject().unfold()`进行批量数据处理。此外,还将简要提及TinkerPop 3.6引入的`mergeV()`步,为执行更高效的upse…

    2026年9月11日
    300
  • Linux怎么给用户添加多个附属组

    Linux怎么给用户添加多个附属组Linux怎么给用户添加多个附属组Linux怎么给用户添加多个附属组Linux怎么给用户添加多个附属组

    给用户添加多个附属组需使用usermod -aG命令,避免遗漏-a导致原有组被覆盖;添加后用户需重新登录或使用newgrp命令才能获得新权限;批量操作可通过脚本循环处理用户列表;管理时应遵循最小权限原则,使用描述性组名,定期审计并自动化配置以确保安全与效率。 在Linux系统里,给用户添加多个附属组…

    2026年9月10日 用户投稿
    100
  • Laravel任务链?任务链怎样定义使用?

    Laravel任务链通过Bus::chain()将多个队列任务按序执行,确保步骤间依赖与统一错误处理,适用于需顺序执行且具原子性的多步流程,如图片处理或订单创建。 Laravel任务链是Laravel队列系统中的一个强大特性,它允许你将多个队列任务(Jobs)串联起来,形成一个有序的执行序列。简单来…

    2026年9月10日
    100
  • 个人抖店怎么绑定抖音?抖店怎么绑定主账号

    随着抖音平台的持续火爆,越来越多的用户开始涉足抖音电商领域,而抖店作为抖音官方推出的电商平台,已经成为众多商家和消费者的重要选择。那么,如何将个人抖店与抖音账号进行绑定呢?下面将为您详细介绍相关操作流程。 一、抖店绑定抖音的重要性 1. 提升曝光率:通过绑定抖音账号,店铺将获得更多的展示机会,有助于…

    2026年9月10日
    100
  • 淘宝开店上架宝贝的步骤是什么?如何批量上架宝贝?淘宝开店上架宝贝全流程解析:从单件发布到批量操作!

    刚开淘宝店不知道怎么上架商品?数据显示,掌握正确的上架流程能让新品流量飙升50%!本文将一步步带你实操:单个商品发布的7大核心环节;两种快速批量上传技巧;最佳上架时间段推荐。更有内部经验分享:如何通过完善属性提升搜索排名,以及批量操作时规避系统报错的实用方法。某女装店铺应用这些策略后,3个月内自然访…

    2026年9月9日
    500
  • 打造VSCode量子机器学习开发环境与混合算法

    首先安装Python 3.8–3.11和VSCode,再配置量子计算库与插件,搭建本地量子机器学习开发环境并运行混合算法示例。 想在本地高效开展量子机器学习研究,Visual Studio Code(VSCode)是一个理想选择。它轻量、插件丰富,配合主流量子计算框架,能快速搭建支持混合经典-量子模…

    2026年9月8日
    200
  • AI赋能蛋白质研究:SaprotHub让蛋白质AI模型训练和调用不再有门槛!

    AI赋能蛋白质研究:SaprotHub让蛋白质AI模型训练和调用不再有门槛!AI赋能蛋白质研究:SaprotHub让蛋白质AI模型训练和调用不再有门槛!AI赋能蛋白质研究:SaprotHub让蛋白质AI模型训练和调用不再有门槛!AI赋能蛋白质研究:SaprotHub让蛋白质AI模型训练和调用不再有门槛!

    编辑 | scienceai 近年来,AI 技术在蛋白质研究领域发挥了越来越重要的作用。从 AlphaFold2 在结构预测任务上的脱颖而出,到各类蛋白质语言模型(PLMs)在功能预测方面的重大进展,生物研究者们可以利用各式各样的 AI 模型来辅助他们的研究。 然而,随着模型变得越来越复杂,如何训练…

    2026年9月7日 用户投稿
    200
  • 清华大学研究组首次在双重编码量子比特之间实现高保真度量子纠缠门

    清华大学科研团队在双重编码量子比特量子逻辑门研究中取得突破性进展,成功在钡离子超精细能级中实现了双重编码量子比特间的直接纠缠逻辑门。这项研究成果显著降低了量子线路复杂度,为未来量子纠错和离子-光子量子网络应用铺平了道路。 离子阱技术是构建大规模通用量子计算机的热门选择,已成功实现高保真量子比特操作。…

    2026年9月6日
    000
  • 实现5Å全原子RMSD,普渡大学深度学习方法准确预测RNA三级结构,登Nature子刊

    实现5Å全原子RMSD,普渡大学深度学习方法准确预测RNA三级结构,登Nature子刊实现5Å全原子RMSD,普渡大学深度学习方法准确预测RNA三级结构,登Nature子刊实现5Å全原子RMSD,普渡大学深度学习方法准确预测RNA三级结构,登Nature子刊实现5Å全原子RMSD,普渡大学深度学习方法准确预测RNA三级结构,登Nature子刊

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 编辑 | 萝卜皮 非编码 RNA 在各种生物功能中发挥着调控作用,并且与人类健康、药物设计等领域息息相关。 了解功能的机械机制需要三级结构信息,然而,通过实验确定 RNA 三维结构成本高昂且耗时…

    2026年9月5日 用户投稿
    100
  • AI for Science:北大、东方理工等团队用人工智能在实验数据中挖掘潜在规律

    AI for Science:北大、东方理工等团队用人工智能在实验数据中挖掘潜在规律AI for Science:北大、东方理工等团队用人工智能在实验数据中挖掘潜在规律AI for Science:北大、东方理工等团队用人工智能在实验数据中挖掘潜在规律AI for Science:北大、东方理工等团队用人工智能在实验数据中挖掘潜在规律

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 编辑 | ScienceAI‍‍ 科学研究的核心之一是发现能够描述自然现象的规律性方程。这些方程不仅能加深我们对自然的理解,还能为复杂问题的解决提供明确指导。 然而,许多领域,尤其是材料和化学等…

    2026年9月4日 用户投稿
    300
  • 70年AI研究得出了《苦涩的教训》:为什么说AI创业也在重复其中的错误?

    70年AI研究得出了《苦涩的教训》:为什么说AI创业也在重复其中的错误?70年AI研究得出了《苦涩的教训》:为什么说AI创业也在重复其中的错误?70年AI研究得出了《苦涩的教训》:为什么说AI创业也在重复其中的错误?70年AI研究得出了《苦涩的教训》:为什么说AI创业也在重复其中的错误?

    人人都在做垂直 AI 产品,为什么要反其道而行? Scaling Laws 是否失灵,这个话题从 2024 年年尾一直讨论至今,也没有定论。 Ilya Sutskever 在 NeurIPS 会上直言:大模型预训练这条路可能已经走到头了。上周的 CES 2025,黄仁勋有提到,在英伟达看来,Scal…

    2026年9月4日 用户投稿
    200
  • 怎么用AI做市场分析_Bard商业数据分析与报告生成方法

    怎么用AI做市场分析_Bard商业数据分析与报告生成方法怎么用AI做市场分析_Bard商业数据分析与报告生成方法怎么用AI做市场分析_Bard商业数据分析与报告生成方法怎么用AI做市场分析_Bard商业数据分析与报告生成方法

    AI能快速处理海量数据并发现隐藏趋势,其核心在于通过精准提示词与迭代优化实现人机协作,结合AI的数据处理优势与人类的战略思维,生成兼具效率与深度的市场分析报告。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 利用AI进行市场分析,特别是借助…

    2026年9月3日 用户投稿
    100

发表回复

登录后才能评论
关注微信