AI在线 AI在线

使用Rust构建高性能机器学习模型

作者: 布加迪
2025-03-04 08:00
译者 | 布加迪审校 | 重楼机器学习主要使用Python来完成。 Python之所以大受欢迎,是由于它易于学习,并且有许多机器学习库。 而现在,Rust正成为一种强有力的替代语言。

译者 | 布加迪

审校 | 重楼

机器学习主要使用Python来完成。Python之所以大受欢迎,是由于它易于学习,并且有许多机器学习库。而现在,Rust正成为一种强有力的替代语言。Rust速度快,使用内存安全机制,并擅长同时处理多个任务。这些功能特性使Rust非常适合高性能机器学习。

使用Rust构建高性能机器学习模型

Linfa是Rust中的一个库,可以帮助你构建机器学习模型。它使你更容易用Rust创建和使用机器学习模型。我们在本文中将向你介绍如何使用Linfa完成两种机器学习任务:线性回归和k-means聚类。

为什么Rust适合机器学习?

由于以下几个优势,Rust越来越多地被考虑用于机器学习:

1. 性能:Rust是一种编译语言,这使得它的性能特征接近C和C++。它可以从底层控制系统资源,又没有垃圾收集器,因而非常适合机器学习之类注重性能的应用。

2. 内存安全:Rust的突出特性之一是它的所有权模式,这保证了内存安全,不需要垃圾收集器。它消除了许多常见的编程错误,比如空指针解引用或数据竞争。

3. 并发:Rust的并发模式确保了安全并行处理。机器学习常常涉及大型数据集和大量计算。Rust可以高效地处理多线程操作。其所有权系统防止了数据竞争和内存问题。

Linfa简介

Linfa是一个面向Rust的机器学习库。它提供各种机器学习算法,酷似Python的scikit-learn。该库与Rust的生态系统很好地集成。它支持高性能数据操作、统计和优化。Linfa包括线性回归、k-means聚类和支持向量机等算法。这些实现高效且易于使用。开发人员可以利用Rust的速度和安全来构建强大的机器学习模型。

不妨通过两个简单但重要的例子来探索如何使用Linfa以构建机器学习模型:线性回归和k-means聚类。

搭建环境

首先确保已安装了Rust。如果没有,使用以下命令通过rustup来安装它:

复制
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

接下来,将Linfa和相关依赖项添加到你的项目中。打开你的Cargo.toml文件,添加以下内容:

复制
[dependencies]
linfa = "0.5.0"
linfa-linear = "0.5.0" # For linear regression
linfa-clustering = "0.5.0" # For k-means clustering
ndarray = "0.15.4" # For numerical operations
ndarray-rand = "0.14.0" # For random number generation

完成这一步后,你就可以使用Linfa实现机器学习模型了。

Rust的线性回归

线性回归是最简单、最常用的监督学习算法之一。它通过将线性方程拟合到观测的数据中,为因变量y与一个或多个自变量x之间的关系建立模型。在本节中,我们将探究如何使用Rust的Linfa库实现线性回归。

  • 准备数据

为了理解和测试线性回归,我们需要从一个数据集入手。

复制
use ndarray::{Array2, Axis};

fn generate_data() -> Array2 {
 let x = Array2::::from_shape_vec((10, 1), vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]).unwrap();
 let y = x.mapv(|v| 2.0 * v + 1.0);
 let data = ndarray::stack(ndarray::Axis(1), &[x.view(), y.view()]).unwrap();
 data
}

在这里,我们模拟了一个简单的数据集,其中x与y的关系遵循公式:y=2x+1。

  • 训练模型

在准备好数据集之后,我们使用Linfa的LinearRegression(线性回归)模块来训练模型。训练需要通过最小化预测值与实际值之间的误差来确定线性方程(y=mx+c)的系数。使用Linfa的LinearRegression模块,我们在这个数据集上训练了回归模型。

复制
use linfa::prelude::*;
use linfa_linear::LinearRegression;

fn train_model(data: Array2) -> LinearRegression {
 let (x, y) = (data.slice(s![.., 0..1]), data.slice(s![.., 1..2]));
 LinearRegression::default().fit(&x, &y).unwrap()
}

重点:

  1. fit方法学习最适合数据的直线的斜率和截距。
  2. unwrap处理训练期间可能发生的任何错误。
  • 进行预测

在训练模型之后,我们可以用它来预测新数据的结果。

复制
fn make_predictions(model: &LinearRegression, input: Array2) -> Array2 {
 model.predict(&input)
}

fn main() {
 let data = generate_data();
 let model = train_model(data);
 let input = Array2::from_shape_vec((5, 1), vec![11.0, 12.0, 13.0, 14.0, 15.0]).unwrap();
 let predictions = make_predictions(&model, input);
 println!("Predictions: {:?}", predictions);
}

对于输入值[11.0,12.0,13.0,14.0,15.0],预测结果如下:

复制
Predictions: [[23.0], [25.0], [27.0], [29.0], [31.0]]

这个输出对应于y=2x+1。

Rust的K-means聚类

K -means聚类是一种无监督学习算法,它根据相似性将数据划分为k个聚类。

  • 准备数据

为了演示K-means聚类,我们使用ndarray-rand crate生成一个随机数据集。

复制
use ndarray::Array2;
use ndarray_rand::RandomExt;
use rand_distr::Uniform;

fn generate_random_data() -> Array2 {
 let dist = Uniform::new(0.0, 10.0);
 Array2::random((100, 2), dist)
}

这将创建随机点的100x2矩阵,模拟二维数据。

  • 训练模型

train_kmeans_model函数使用Linfa的KMeans模块将数据分组到k=3个聚类中。

复制
use linfa_clustering::KMeans;
use linfa::traits::Fit;

fn train_kmeans_model(data: Array2) -> KMeans {
 KMeans::params(3).fit(&data).unwrap()
}

重点:

  1. KMeans::params(3)表示3个聚类。
  2. fit方法基于数据学习聚类质心。
  • 指定聚类

在训练之后,我们可以将每个数据点分配给其中一个聚类。

复制
fn assign_clusters(model: &KMeans, data: Array2) {
 let labels = model.predict(&data);
 println!("Cluster Labels: {:?}", labels);
}

fn main() {
 let data = generate_random_data();
 let model = train_kmeans_model(data);
 assign_clusters(&model, data);
}

输出将显示分配给每个数据点的聚类标签。每个标签将对应于三个聚类中的一个。

结论

Rust是创建快速机器学习模型的上佳选择。它通过内存安全机制确保处理数据时没有错误。Rust还可以同时使用多个线程,这在处理机器学习中的大型数据集时非常重要。

Linfa库使得你用Rust实现机器学习变得更容易。它可以帮助你轻松使用线性回归和K-means聚类等算法。Rust的所有权系统确保内存安全,又不需要垃圾收集。处理多线程的功能可以防止在处理大量数据时出现错误。

原文标题:Building High-Performance Machine Learning Models in Rust,作者:Jayita Gulati

相关标签:

相关资讯

白宫发文,呼吁开发者放弃C、C++:Rust被「钦点」内存安全

近年来,C、C 编程语言成了美国官方的「眼中钉」,而内存安全的 Rust 等语言摇身一变成了「新宠」。近日,在一份 19 页的报告《回归基础构件:通往安全软件之路》中,白宫国家网络主任办公室(ONCD)呼吁开发者使用「内存安全的编程语言」,比如 Rust 语言。报告指出,从一开始就选择内存安全的编程语言,是以安全设计方式开发软件的重要途径。此外,ONCD 表示,报告中的建议是与包括科技公司、学术界和其他机构合作制定的,并收集了包括惠普、埃森哲和 Palantir 在内等多家科技公司支持报告的意见。报告地址:,这
3/1/2024 3:25:00 PM
机器之心

太酷了!iPhone、iPad、MacBook老旧设备组成异构集群,能跑Llama 3

假如你有闲置的设备,或许可以试一试。这次,你手里的硬件设备也能在 AI 领域大展拳脚了。将 iPhone、iPad、Macbook 进行组合,就能组装成「异构集群推理方案」, 然后顺畅的运行 Llama3 模型。值得一提的是,这个异构集群可以是 Windows 系统,也可以是Linux、iOS 系统,并且对 Android 的支持很快到来。                                                        异构集群正在运行中。根据项目作者 @evilsocket 的介绍,
7/16/2024 3:16:00 PM
机器之心

基于 Rust 实现简单、快速、轻量级的 AI Agent 框架 Rig

这几天 AI Agent 生态进入爆发期,有个叫 Rig 非常抢眼,它是基于 Rust 构建的 AI 应用开发专业框架。 与它类似还有个叫 ELIZA  框架,本文主要介绍 Rig。 什么是 Rig?Rig(ARC) 是一个基于 Rust 优势面向 LLM 工作流引擎的 AI 系统构建框架,目的是要解决更底层的性能优化问题。
12/23/2024 6:10:00 AM
渔夫