scicloj.ml
一个惯用的Clojure机器学习库。
主要特点:
- 各种分类、回归和无监督模型的协调和惯用使用
- 支持以数据形式创建机器学习流水线
- 包含易于使用的、复杂的流水线交叉验证
- 包含数据预处理的最重要数据转换
- 用户可以通过回调机制添加实验跟踪
- 开放架构,允许插入任何潜在的机器学习模型,甚至包括非JVM语言的模型,包括深度学习
- 基于成熟的Clojure/Java数据科学库
- tech.ml.dataset 用于高效的底层数据存储
- Smile 用于机器学习模型
- metamorph.ml 作为高级机器学习函数的基础 (前身: tech.ml )
快速入门
依赖项:
{:deps
{scicloj/scicloj.ml {:mvn/version "0.3"}}}
代码:
(require '[scicloj.ml.core :as ml]
'[scicloj.ml.metamorph :as mm]
'[scicloj.ml.dataset :as ds])
;; 读取训练和测试数据集
(def titanic-train
(ds/dataset "https://github.com/scicloj/metamorph-examples/raw/main/data/titanic/train.csv" {:key-fn keyword :parser-fn :string}))
(def titanic-test
(-> "https://github.com/scicloj/metamorph-examples/raw/main/data/titanic/test.csv"
(ds/dataset {:key-fn keyword :parser-fn :string})
(ds/add-column :Survived [""] :cycle)))
;; 构建包含逻辑回归模型的流水线函数
(def pipe-fn
(ml/pipeline
(mm/select-columns [:Survived :Pclass ])
(mm/add-column :Survived (fn [ds] (map #(case % "1" "yes" "0" "no" nil "") (:Survived ds))))
(mm/categorical->number [:Survived :Pclass])
(mm/set-inference-target :Survived)
{:metamorph/id :model}
(mm/model {:model-type :smile.classification/logistic-regression})))
;; 以:fit模式执行流水线,使用训练数据包括模型
(def trained-ctx
(pipe-fn {:metamorph/data titanic-train
:metamorph/mode :fit}))
;; 以:transform模式执行流水线,使用测试数据进行预测
(def test-ctx
(pipe-fn
(assoc trained-ctx
:metamorph/data titanic-test
:metamorph/mode :transform)))
;; 从管道函数结果中提取预测
(-> test-ctx :metamorph/data
(ds/column-values->categorical :Survived))
;; => #tech.v3.dataset.column<string>[418]
;; :Survived
;; [no, no, yes, no, no, no, no, yes, no, no, no, no, no, yes, no, yes, yes, no, no, no...]
社区
获取支持请使用Zulip上的Clojurians:
或在Clojurians Slack上:
文档
完整文档作为用户指南在这里
API文档: https://scicloj.github.io/scicloj.ml
scicloj.ml使用/基于的项目参考:
这个库本身是一个薄层,不包含任何函数。
代码存在于以下仓库中,这些函数被重新导出到scicloj.ml
中的少数几个命名空间中,以方便用户使用。
- https://github.com/techascent/tech.ml
- https://github.com/scicloj/tablecloth
- https://github.com/scicloj/metamorph
- https://github.com/scicloj/metamorph.ml
- https://github.com/techascent/tech.ml.dataset
- https://github.com/scicloj/scicloj.ml.smile
- https://github.com/scicloj/scicloj.ml.xgboost
- https://github.com/haifengl/smile
Scicloj.ml将现有代码组织到3个命名空间中,如下所示:
命名空间 scicloj.ml.core
函数从以下位置重新导出:
- scicloj.metamorph.ml.*
- scicloj.metamorph.core
命名空间 scicloj.ml.dataset
此命名空间中的所有函数都将数据集作为第一个参数。 这些函数从以下位置重新导出:
- tabecloth.api
- tech.v3.dataset.modelling
- tech.v3.dataset.column-filters
命名空间 scicloj.ml.metamorph
此命名空间中的所有函数都将metamorph上下文作为第一个参数, 因此可以直接在metamorph管道中使用。 这些函数从以下位置重新导出:
- tablecloth.pipeline
- tech.v3.libs.smile.metamorph
- scicloj.metamorph.ml
- tech.v3.dataset.metamorph
如果你已经熟悉任何原始命名空间,当然也可以直接使用它们:
(require '[tablecloth.api :as tc])
(tc/add-column ...)
插件
scicloj.ml可以通过贡献模型或其他算法的插件轻松扩展。 目前存在以下插件:
- 内置:scicloj.ml.smile
- 内置:scicloj.ml.xgboost
- 所有sklearn模型:sklearn.clj
- top2vec模型:scicloj.ml.top2vec
- crf 来自
standfortNLP
的NER模型 - clj-djl 使用来自djl的fasttext模型