4个版本 (2个重大更新)

0.5.0 2024年8月10日
0.4.1 2023年3月13日
0.4.0 2023年1月23日
0.3.1 2022年12月16日

#141 in 机器学习

Download history 76/week @ 2024-07-26 5/week @ 2024-08-02 123/week @ 2024-08-09

每月204次下载

自定义许可

105KB
2K SLoC

概率主成分分析(PPCA)模型

PyPI version Crates.io version Docs.rs version

该项目使用 pyO3maturin 在 Python 中实现了 PPCA 模型。

安装

此软件包可在 PyPI 上找到!

pip install ppca-rs

并且在 Rust 中也可以原生使用

cargo add ppca

为什么使用 PPCA?

很高兴你问了!

  • PPCA 是 PCA(主成分分析)的一个简单扩展,但整体上在训练过程中可能更稳健。
  • PPCA 是一个 正确的统计模型。它不会只输出均值。你还会得到标准差、协方差,以及来自概率和统计领域的一切好处。
  • PPCA 模型可以处理 缺失值。如果你的数据集中有缺失的数据,它可以使用合理的值进行外推,甚至给出置信区间。
  • 训练快速收敛,并将始终趋向于全局最大值。没有需要调整的超参数,也没有局部最大值。

为什么使用 ppca-rs

这个问题很简单!

  • 它是用 Rust 编写的,只在顶部使用了一点点 Python 粘合剂。你可以期望的性能与 C 代码相当。
  • 它使用 rayon 在你拥有的所有 CPU 上均匀地并行化计算。
  • 它还使用高级线性代数技巧技术来降低关键瓶颈的计算复杂性。
  • 在 Vio.com 的战斗中测试过,使用了一些极其庞大的数据集。

快速示例

import numpy as np
from ppca_rs import Dataset, PPCATrainer, PPCA

samples: np.ndarray

# Create your dataset from a rank 2 np.ndarray, where each line is a sample.
# Use non-finite values (`inf`s and `nan`) to signal masked values
dataset = Dataset(samples)

# Train the model (convenient edition!):
model: PPCAModel = PPCATrainer(dataset).train(state_size=10, n_iters=10)


# And now, here is a free sample of what you can do:

# Extrapolates the missing values with the most probable values:
extrapolated: Dataset = model.extrapolate(dataset)

# Smooths (removes noise from) samples and fills in missing values:
extrapolated: Dataset = model.filter_extrapolate(dataset)

# ... go back to numpy:
eextrapolated_np = extrapolated.numpy()

丰富特性!

  • 厌倦了线性?我们支持 PPCA 混合模型。使用聚类和降维在一个工具中充分利用你的数据!
  • 支持使用 pandaspolars 适配 DataFrame。再次也不要在代码中摆弄那些 df 了。

从源代码构建

先决条件

你需要 Rust,它可以在本地安装(即,无需 sudo),你还需要 maturin,可以通过以下方式安装:

pip install maturin

pipenv 如果你想在本地上进行操作,也是一个不错的选择。至少,你需要一个 venv 环境,否则,maturin 会向你抱怨。

本地安装

检查 Makefile 中的可用命令(或者直接输入 make)。要本地安装,请执行以下操作:

make install    # optional: i=python.version (e.g, `i=3.9`)

摸索和测试

要摸索,请在 虚拟环境 内进行(为 pipenv 爱好者提供了一个 Pipfile),

maturin develop  # use the flag --release to unlock superspeed!

这将直接从源代码本地安装此软件包。

我该如何使用这些功能?

请参阅 examples 文件夹中的示例。所有功能都有类型提示和注释。如果你使用 pylancemypy,应该很容易导航。

它比你自己做的纯 Python 实现更快吗?

当然!

依赖项

~7.5MB
~147K SLoC