使用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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月28日 18:37:40
下一篇 2025年11月28日 18:38:01

相关推荐

  • html5怎样插入csv数据表_html5csv表格嵌入与格式化显示【实操】

    可在HTML5页面中用JavaScript实现CSV数据展示:一、File API本地读取;二、fetch加载远程CSV;三、预转JSON再渲染;四、用PapaParse库高兼容解析,均需解析后生成HTML表格。 如果您希望在HTML5页面中直接展示CSV格式的数据,但浏览器本身不支持原生解析CSV…

    2025年12月23日
    000
  • 使用Scrapy高效抓取并整合Div内不定数量P标签文本

    本文旨在指导如何使用scrapy框架高效地从网页中抓取特定 元素内不定数量的 标签内容。我们将探讨如何利用xpath表达式精准定位并提取所有目标 标签,并通过python的字符串连接方法,将这些分散的文本内容整合为一个单一字段,以便于数据存储和后续处理,解决仅保存最后一个 标签的问题。 引言:处理动…

    2025年12月23日 好文分享
    000
  • Scrapy教程:高效抓取并整合多个P标签内容至单一字段

    本教程详细讲解如何使用scrapy框架高效抓取html页面中不确定数量的` `标签内容,并将其整合为一个单一字符串字段,以便于数据存储和导出。文章通过分析常见错误,提供优化的xpath表达式和python代码实现,确保所有目标文本都能被正确提取并聚合。 1. 理解多P标签抓取的需求与挑战 在网页抓取…

    2025年12月23日
    000
  • 如何使用Scrapy和XPath高效抓取div中可变数量的p标签并合并存储

    本文详细介绍了如何利用scrapy框架和xpath表达式,从网页中准确提取特定`div`元素内数量不定的` `标签内容,并将其合并为单个字符串进行存储。通过分析常见问题,提供了一种简洁高效的解决方案,确保所有段落内容都能被正确抓取并导出到csv文件,避免只存储最后一个段落的错误。 在进行网页抓取时,…

    2025年12月23日
    000
  • JavaScript中处理表格数据:将扁平数组行转换为结构化对象记录

    本教程详细介绍了如何在javascript中将从google sheets或excel等表格数据源获取的扁平数组(数组的数组)转换为更具语义化和易于操作的结构化对象数组。我们将利用array.prototype.reduce()方法,通过索引映射和数组切片技术,高效地将每一行数据转换为包含明确属性的…

    2025年12月23日
    000
  • JavaScript数据转换:将扁平数组重塑为结构化对象数组

    本教程详细介绍了如何使用javascript将常见的扁平二维数组(例如从电子表格获取的数据)转换为结构化的对象数组。通过运用`array.prototype.reduce()`方法,我们将学习如何遍历原始数据,并根据预设的键值对创建新的对象,同时处理嵌套数组的生成,从而提升数据可读性和易用性。 数据…

    2025年12月23日
    000
  • 运行jmeter怎么生成HTML报告_jmeter生成HTML报告步骤【指南】

    首先通过监听器保存测试结果为CSV文件,再使用命令行或GUI生成HTML报告;具体步骤包括配置聚合报告监听器并导出数据、通过jmeter -g ./result.csv -o ./report_output命令生成报告,或在GUI中选择“选项”→“生成HTML报告”并指定输入输出路径,最后打开输出目…

    2025年12月23日
    000
  • 利用R语言通过API和JSON解析高效提取网页链接与数据

    本文旨在指导读者如何使用R语言中的`httr2`包,通过访问网页的底层JSON数据源来高效提取链接地址和下载文件,尤其适用于那些点击后直接触发下载的链接。我们将探讨如何识别、请求、解析JSON数据,并从中提取特定信息,最终实现无需浏览器自动化即可获取所需链接和文件的目的。 1. 挑战与解决方案概述 …

    2025年12月23日
    000
  • PowerShell管道扫描,HTML里CSS链接全体检!

    首先读取HTML文件中的CSS链接,使用PowerShell的Get-Content和正则表达式提取href属性中以.css结尾的URL;接着验证链接可达性,通过Invoke-WebRequest发送HEAD请求,判断状态码是否为200;最后生成扫描报告,将结果导出为CSV文件并在控制台用红色高亮显…

    2025年12月23日
    000
  • Linux Mnemosyne间隔重复,HTML+CSS学习曲线飙升!

    掌握Mnemosyne结合HTML与CSS的学习方法:一、配置支持富文本的卡片类型,使用内联样式增强视觉记忆;二、通过CSV批量导入含HTML代码的卡片,提升录入效率;三、自定义模板统一设置HTML结构与CSS样式,实现个性化排版;四、排查标签闭合与CSS兼容性问题,确保正确渲染。 如果您在使用Li…

    2025年12月23日
    000
  • 在Python中动态嵌入变量到HTML iframe src属性的教程

    本教程详细阐述了如何在python中利用f-string(格式化字符串字面量)将python变量动态地嵌入到html的` 动态生成HTML与Python变量的融合 在Web开发或数据可视化场景中,我们经常需要根据Python程序中的数据动态生成HTML内容。一个常见的需求是将Python变量的值注入…

    2025年12月23日
    000
  • R语言中通过解析Web服务JSON源获取文件链接的教程

    本教程将指导如何在r语言环境中,利用`httr2`和`tidyverse`库,通过直接访问web服务的底层json数据源来高效获取文件下载链接,例如csv文件。这种方法避免了模拟浏览器交互或直接下载文件,提供了一种更稳定、程序化的数据链接提取策略,并涵盖了从json中解析链接到实际下载文件的完整流程…

    2025年12月23日
    000
  • Java Web应用:高效实现多文件ZIP打包与下载

    本教程详细阐述了在java web应用中,如何高效且正确地将多个文件打包成zip格式并提供给浏览器下载。文章分析了常见错误,并推荐使用直接流式传输到http响应输出流的方法,结合try-with-resources确保资源妥善管理,避免内存溢出和下载内容不完整的问题,从而实现稳定可靠的文件下载功能。…

    2025年12月23日
    000
  • 通过API/JSON直接获取网页下载链接:R语言实战

    在R语言中,当需要获取网页上的文件下载链接而不触发直接下载时,模拟用户界面操作(如右键点击)并非总是最有效的方法。本教程将展示如何利用网站提供的API或JSON数据源,通过httr2等R包直接访问并提取所需链接,从而实现更高效、稳定的数据获取,并避免不必要的下载行为。 1. 简介:绕过UI操作的优势…

    2025年12月23日
    100
  • 通过API/JSON源高效获取网页数据与下载链接

    本教程旨在指导如何在不进行ui交互(如右键点击)的情况下,通过直接访问和解析web应用程序的底层json api,程序化地获取特定文件(如csv)的下载链接。该方法比传统的浏览器自动化(如rselenium)更为高效和稳定,适用于需要批量获取数据或避免直接触发文件下载的场景,并演示了如何使用r语言中…

    2025年12月23日
    000
  • R语言中从JSON数据源提取文件下载链接的策略

    本教程旨在介绍一种在r语言中高效获取文件下载链接的方法,尤其适用于当链接点击后会直接触发下载而非跳转页面的场景。我们将通过直接访问并解析网站的底层json数据源来提取目标链接,避免了复杂的浏览器自动化操作,并提供了使用`httr2`和`tidyverse`系列包进行数据请求、json解析及可选文件下…

    2025年12月23日
    000
  • 如何用HTML插入标签云组件_HTML CSS3变换与随机颜色生成算法

    使用HTML构建标签结构,CSS3添加旋转与过渡效果,JavaScript生成随机HSL颜色并设置字体大小,实现动态交互的标签云组件。 要在网页中实现一个动态的标签云组件,结合 HTML、CSS3 变换和随机颜色生成算法,可以按照以下步骤操作。这个组件不仅能提升页面视觉效果,还能通过色彩和旋转增加交…

    2025年12月23日
    000
  • HTML数据如何用于机器学习 HTML数据预处理的特征工程方法

    首先解析HTML提取文本与元信息,再从结构、文本、样式三方面构建特征:1. 用BeautifulSoup等工具解析HTML,提取标题、正文、链接及属性;2. 统计标签频率、DOM深度、路径模式等结构特征;3. 清洗文本并采用TF-IDF或词嵌入向量化;4. 提取class、id、样式、脚本等交互与视…

    2025年12月23日
    000
  • 如何在Go Gin应用中集成前端JavaScript模块(如Sentry)

    本文探讨了在Go Gin框架下,通过HTML模板服务前端页面时,如何有效集成JavaScript模块(如Sentry)。针对浏览器不直接支持Node.js模块导入语法的问题,文章详细阐述了利用CDN引入Sentry SDK的解决方案,并提供了具体的代码示例,帮助开发者实现前端错误监控功能,避免了复杂…

    2025年12月23日
    000
  • Flask Session数据传递至另一路由并实现CSV下载教程

    本文档旨在解决Flask应用中,如何将API调用获取的数据,通过session传递到另一个路由,并最终实现将数据以CSV格式下载的功能。我们将详细讲解如何使用session存储数据,并在下载路由中读取并处理数据,最终生成可下载的CSV文件。同时,也会讨论session大小限制以及替代方案。 问题分析…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信