Rumale 项目介绍
Rumale 是一个用 Ruby 编写的机器学习库。其名称来源于 "Ruby machine learning" 的缩写。这个库为 Ruby 用户提供了类似于 Python 中 Scikit-Learn 的接口,使得在 Ruby 环境中进行机器学习任务变得更加简单和高效。Rumale 支持多种机器学习算法,包括支持向量机、逻辑回归、岭回归、Lasso、多层感知器、朴素贝叶斯、决策树、梯度提升树、随机森林、K-均值、高斯混合模型、DBSCAN、谱聚类、多维缩放、t-SNE、费舍尔判别分析、邻域成分分析、主成分分析、非负矩阵分解等众多算法。
安装方法
要在 Ruby 项目中使用 Rumale,可以通过添加以下代码到您的 Gemfile
文件来安装:
gem 'rumale'
然后执行以下命令:
$ bundle
或者您也可以直接用以下命令安装:
$ gem install rumale
使用文档
Rumale 提供了详细的 API 文档,帮助用户快速上手和理解其功能。
使用案例
案例 1:数据集分类
以下是使用 Rumale 对一个手写数字数据集(pendigits)进行分类的示例。首先需要下载数据集:
$ wget https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/pendigits
$ wget https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/pendigits.t
然后,可以通过以下代码加载和训练线性支持向量机分类器:
require 'rumale'
samples, labels = Rumale::Dataset.load_libsvm_file('pendigits')
transformer = Rumale::KernelApproximation::RBF.new(gamma: 0.0001, n_components: 1024, random_seed: 1)
transformed = transformer.fit_transform(samples)
classifier = Rumale::LinearModel::SVC.new(reg_param: 0.0001)
classifier.fit(transformed, labels)
File.open('transformer.dat', 'wb') { |f| f.write(Marshal.dump(transformer)) }
File.open('classifier.dat', 'wb') { |f| f.write(Marshal.dump(classifier)) }
测试数据的分类及准确率评估如下:
require 'rumale'
samples, labels = Rumale::Dataset.load_libsvm_file('pendigits.t')
transformer = Marshal.load(File.binread('transformer.dat'))
classifier = Marshal.load(File.binread('classifier.dat'))
transformed = transformer.transform(samples)
puts("Accuracy: %.1f%%" % (100.0 * classifier.score(transformed, labels)))
执行上述脚本后,可以得到如下结果,表示分类准确率达到了 98.5%。
案例 2:交叉验证
以下是如何使用 Rumale 实现五折交叉验证的示例:
require 'rumale'
samples, labels = Rumale::Dataset.load_libsvm_file('pendigits')
lr = Rumale::LinearModel::LogisticRegression.new
ev = Rumale::EvaluationMeasure::Accuracy.new
kf = Rumale::ModelSelection::StratifiedKFold.new(n_splits: 5, shuffle: true, random_seed: 1)
cv = Rumale::ModelSelection::CrossValidation.new(estimator: lr, splitter: kf, evaluator: ev)
report = cv.perform(samples, labels)
mean_accuracy = report[:test_score].sum / kf.n_splits
puts "5-CV mean accuracy: %.1f%%" % (100.0 * mean_accuracy)
执行后,得到的平均准确率为 95.5%。
加速策略
Rumale 可以通过加载某些特定的 Ruby 库来增加计算速度。
- Numo::Linalg:此库用于提升矩阵和向量运算的速度,可与 Rumale 一起使用。
- Numo::TinyLinalg:这是 Numo::Linalg 的一个子集,专注于机器学习算法中常用的方法。
- 并行计算:Rumale 中的多种估计器支持并行处理,可以通过安装并加载 Parallel gem 实现。
相关项目
- Rumale::SVM:为 LIBSVM 和 LIBLINEAR 提供支撑向量机算法。
- Rumale::Torch:通过 torch.rb,为神经网络的学习和推理提供 Rumale 接口。
开源许可
Rumale 在 BSD-3-Clause 许可下作为开源项目提供。