本文基于真实的项目文件和开发过程,没有任何虚构

项目起源

作为一个 Rust 初学者,我想通过实际项目来学习。看到 Python 的 scikit-learn 很受欢迎,我决定用 Rust 写一个类似的机器学习库。

真实项目结构

我的 sklearn-rs 项目实际包含这些文件:

text

sklearn-rs/
├── Cargo.toml          # 479 字节
├── Cargo.lock          # 6,408 字节  
├── README.md           # 1,639 字节
├── LICENSE.txt         # 1,082 字节
├── .gitignore          # 179 字节
├── src/                # 源代码
├── examples/           # 使用示例
├── tests/              # 测试文件
└── target/             # 编译输出

核心代码实现

线性回归模型 (src/linear_model/linear_regression.rs)

我实现了完整的线性回归:

rust

pub struct LinearRegression {
    pub fit_intercept: bool,
}

pub struct LinearModel {
    pub coefficients: Array1<f64>,
    pub intercept: f64,
}

impl Estimator for LinearRegression {
    fn fit(&self, x: &Array2<f64>, y: &Array1<f64>) -> Result<LinearModel> {
        // 使用正规方程求解
        if self.fit_intercept {
            self.fit_with_intercept(x, y)
        } else {
            self.fit_without_intercept(x, y)
        }
    }
}

评估指标 (src/metrics/mod.rs)

实现了三个核心指标:

rust

pub fn mean_squared_error(y_true: &Array1<f64>, y_pred: &Array1<f64>) -> Result<f64>
pub fn mean_absolute_error(y_true: &Array1<f64>, y_pred: &Array1<f64>) -> Result<f64>  
pub fn r2_score(y_true: &Array1<f64>, y_pred: &Array1<f64>) -> Result<f64>

测试验证

写了 9 个完整的测试用例 (tests/linear_regression_test.rs):

rust

#[test]
fn test_linear_regression_fit() -> Result<()> {
    let x = array![[1.0], [2.0], [3.0], [4.0]];
    let y = array![3.0, 5.0, 7.0, 9.0]; // y = 1 + 2*x
    let model = LinearRegression::default().fit(&x, &y)?;
    assert_abs_diff_eq!(model.intercept, 1.0, epsilon = 0.1);
    Ok(())
}

所有测试都通过了!

使用示例

创建了完整的示例 (examples/linear_regression_demo.rs):

rust

fn main() -> Result<()> {
    let x = array![[1.0, 1.0], [1.0, 2.0], [2.0, 2.0], [2.0, 3.0]];
    let y = array![6.0, 9.0, 11.0, 14.0]; // y = 1 + 2*x1 + 3*x2
    
    let model = LinearRegression::default().fit(&x, &y)?;
    let predictions = model.predict(&x)?;
    
    println!("系数: {:?}", model.coefficients); // [2.0, 3.0]
    println!("截距: {:.4}", model.intercept);   // 1.0000
    Ok(())
}

开源发布

创建开源文件

  • LICENSE.txt: MIT 许可证

  • README.md: 项目说明和使用指南

  • .gitignore: 忽略编译文件

推送到 GitHub

经历了一些 git 冲突,最终用强制推送解决了:

bash

git push -u origin main --force

项目成果

✅ 完整的线性回归实现
✅ 评估指标 (MSE, MAE, R²)
✅ 9个测试用例全部通过
✅ 中文文档支持
✅ 开源在 GitHub

项目地址:https://github.com/wf5440/sklearn-rs

学习收获

通过这个项目,我真正学会了:

  • Rust 模块系统和 trait 设计

  • 错误处理和验证

  • 测试驱动开发

  • 项目发布和开源流程

这是一个真实的初学者项目,没有夸张的技术亮点,但每一步都是亲手实现的!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐