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 机器学习
每月204次下载
105KB
2K SLoC
概率主成分分析(PPCA)模型
该项目使用 pyO3
和 maturin
在 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 混合模型。使用聚类和降维在一个工具中充分利用你的数据!
- 支持使用
pandas
或polars
适配 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
文件夹中的示例。所有功能都有类型提示和注释。如果你使用 pylance
或 mypy
,应该很容易导航。
它比你自己做的纯 Python 实现更快吗?
当然!
依赖项
~7.5MB
~147K SLoC