- 人工智能
- 机器学习
- 深度学习
- NLP
- 大模型
- 模型推理服务
- 数据可视化
【免费下载链接】smile
Statistical Machine Intelligence & Learning Engine
导读
SMILE(Statistical Machine Intelligence and Learning Engine)是一个用 Java 与 Scala 实现的机器学习、NLP、线性代数、图计算、插值与可视化引擎。本指南聚焦 SMILE 的 Clojure API:说明其当前维护状态与替代方案、Leiningen 依赖配置方法、BLAS/LAPACK 加速矩阵运算的接入方式,并逐一梳理smile.io、smile.classification、smile.regression、smile.clustering、smile.manifold、smile.association等命名空间提供的函数,帮助你在 Clojure 中直接调用 SMILE 的分类、回归、聚类、流形学习与关联规则挖掘能力。
一、现状说明:Clojure API 已弃用,首选 Java API
根据仓库内 clojure/README.md 的官方声明:
The Clojure API is deprecated due to limited usage. Please use SMILE's Java API directly.
即:Clojure API 因使用量有限已被标记为弃用(deprecated),官方建议直接使用 SMILE 的 Java API。不过该模块仍然保留在仓库中,源码、测试与构建配置完整,仍可作为在 Clojure/Leiningen 工程中集成 SMILE 的参考实现,也可以直接作为依赖使用。如果你正在新项目中评估方案,应优先考虑 Java API;如果你已经依赖 Clojure API,可参照本文内容了解其能力边界与配置方式。
从项目结构看,Clojure 模块包含 clojure/src/smile/ 下的 8 个命名空间源文件 与 clojure/test/smile/ 下的 5 个测试文件,覆盖分类、回归、聚类、流形学习、关联规则与数据读写,功能面相当完整。
二、依赖配置:在 Leiningen / deps.edn 中引入 SMILE
1. 核心依赖坐标
clojure/README.md 给出了标准依赖坐标(当前仓库 README 中记录的版本为 6.2.0):
[org.clojars.haifengl/smile "6.2.0"]需要说明的是,仓库内 clojure/project.clj 当前声明的是 6.3.0,且实际依赖为com.github.haifengl/smile-core "6.3.0"与 Clojure 1.12.5。这说明 Clojure API 发布周期与 README 文案可能略有滞后,具体版本号请以你解析到的 Maven/Clojars 坐标为准。
2. 完整 project.clj 示例
结合 clojure/project.clj 的实际内容,一个典型的 Leiningen 工程配置如下:
(defproject my-smile-project "0.1.0" :description "SMILE via Clojure" :dependencies [[org.clojure/clojure "1.12.5"] [com.github.haifengl/smile-core "6.3.0"]] :jvm-opts ["-XX:MaxRAMPercentage=75.0" "-XX:+UseStringDeduplication" "-XX:+UseG1GC"] :repl-options {:init-ns smile.ai})几点说明:
:repl-options {:init-ns smile.ai}是官方 REPL 入口设定——smile.ai是一个聚合命名空间,会把smile.io、smile.classification、smile.regression、smile.clustering、smile.manifold的公开函数全部引入,便于交互式探索(详见 clojure/src/smile/ai.clj)。- 官方工程在测试 profile 中通过
-Dsmile.home=../base/src/test/resources指定数据集根目录,测试用例直接从仓库共享测试资源读取数据(见 clojure/project.clj 中的:profiles配置)。 - 默认 JVM 参数中启用了
UseG1GC与字符串去重,适合内存中加载较大训练集。
三、BLAS/LAPACK 加速:矩阵密集型算法的前提
SMILE 中部分算法依赖 BLAS 与 LAPACK 进行高性能矩阵运算,例如**流形学习、部分聚类算法、高斯过程回归(Gaussian Process Regression)、多层感知机(MLP)**等。官方建议在依赖中引入 OpenBLAS 以获得优化的矩阵计算:
[org.bytedeco/javacpp-platform "1.5.11"] [org.bytedeco/openblas-platform "0.3.28-1.5.11"] [org.bytedeco/arpack-ng-platform "3.9.1-1.5.11"]其中arpack-ng用于特征值求解(如谱聚类、Isomap 等需要大规模特征分解的算法)。
如果你希望换用其他 BLAS 实现,可以通过两个系统属性指定:
java.library.path:指定本地库搜索路径;org.bytedeco.openblas.load:指定要加载的 BLAS 库名。
README 中给出了在 macOS 上使用 Accelerate 框架 BLAS 库的示例:
-Djava.library.path=/usr/lib/ -Dorg.bytedeco.openblas.load=blas这样无需打包 OpenBLAS 即可复用系统自带的加速库。任何位于java.library.path或 classpath 上的 BLAS 实现都可以通过这种方式接入。
四、命名空间速览:从数据读到模型训练
Clojure API 以函数式薄封装的形式直接代理 Java 实现,以下按命名空间梳理核心入口(均以 clojure/src/smile/ 下源码为准)。
1. smile.io —— 数据读写
定义于 clojure/src/smile/io.clj,统一返回DataFrame:
| 函数 | 用途 |
|---|---|
read-csv | 读取 CSV 文件,可选分隔符与表头([path]、[path delimiter header]两种 arity) |
read-arff | 读取 Weka ARFF 文件 |
read-json | 读取 JSON 文件 |
read-sas | 读取 SAS7BDAT 文件 |
read-arrow | 读取 Apache Arrow 文件 |
read-avro | 读取 Apache Avro 文件(需 schema) |
read-parquet | 读取 Apache Parquet 文件 |
read-libsvm | 读取 libsvm 格式文件 |
read-jdbc | 将 JDBC 查询结果转为 DataFrame |
2. smile.classification —— 分类算法
定义于 clojure/src/smile/classification.clj,包括:
knn:K 近邻分类器(默认 k=1,可传自定义距离度量);logit:逻辑回归,支持正则化参数lambda、收敛容差tol与最大迭代max-iter,默认lambda=0.0, tol=1E-5, max-iter=500;maxent:最大熵分类器,适用于稀疏二元特征(特征以非零索引数组表示),需指定特征空间维度p,默认lambda=0.1;mlp:多层感知机,参数为epochs(默认 10)、学习率eta(默认 0.1)、动量alpha与权重衰减lambda;rbfnet:径向基函数网络,normalized为 true 时训练归一化 RBF 网络;svm:支持向量机,参数为 kernel、正则化参数 C(默认容差 1E-3),训练标签为 +1/-1;cart:分类决策树,默认SplitRule/GINI、最大深度 20、节点最小样本数 5;random-forest:随机森林,默认 500 棵树,mtry=0(自动取floor(sqrt(dim))),subsample=1.0(有放回采样);gbm:梯度提升树,默认 500 棵树、shrinkage=0.05、subsample=0.7;adaboost:多类 AdaBoost(无需分解为二分类问题),默认 500 棵树;fld/lda/qda/rda:Fisher 线性判别、线性/二次/正则化判别分析(RDA 的alpha在 [0,1] 间连续插值于 LDA 与 QDA 之间)。
3. smile.regression —— 回归算法
定义于 clojure/src/smile/regression.clj,包括:
lm:普通最小二乘线性回归,method支持"qr"与"svd",可开启stderr(标准误)与recursive(递推最小二乘);ridge:岭回归,需指定收缩参数lambda;lasso:L1 正则化最小二乘,默认tol=0.001, max-iter=5000;cart/random-forest/gbm:回归树、回归随机森林(默认 500 棵树)、梯度提升回归树(默认损失为Loss/lad,shrinkage=0.05);svm:支持向量回归,需指定 kernel、损失阈值eps与惩罚参数C;gpr/gpr-approx/gpr-nystrom:高斯过程回归及其近似版本(subset of regressors 与 Nyström 近似),noise同时充当正则化参数,max-iter<=0时跳过超参数优化;mlp/rbfnet:回归场景下的神经网络。
4. smile.clustering —— 聚类算法
定义于 clojure/src/smile/clustering.clj,覆盖层次、划分、密度与谱方法:
hclust:凝聚层次聚类,method支持"single"、"complete"、"upgma"(同"average")、"upgmc"(同"centroid")、"wpgma"、"wpgmc"(同"median")、"ward";kmeans:K-Means(k-means++ 初始化 + k-d 树加速),默认max-iter=100, tol=1E-4, runs=10,多次运行取最小失真;xmeans/gmeans:基于 BIC 分数 / 正态性检验自动确定簇数;kmedoids:K-Medoids,对噪声与离群点更稳健;dbscan:密度聚类,参数min-pts与radius,无需预先指定簇数;denclue:基于核密度估计的聚类,参数sigma(高斯核平滑参数)与m(参与迭代的抽样点数);sib:顺序信息瓶颈算法,面向共现数据(如文档-词项矩阵);dac:确定性退火聚类,alpha(降温速率,须在 (0,1))控制温度递减;mec:非参数最小条件熵聚类,k仅为提示,最终簇数可能更少;specc:谱聚类,sigma为高斯核宽度,l为 Nyström 近似抽样数。
5. smile.manifold —— 流形学习与降维
定义于 clojure/src/smile/manifold.clj,包括:
isomap:等距特征映射,基于近邻图上的测地距离做经典 MDS,默认 2 维、c-isomap=true(C-Isomap 可缓解短接误差);lle:局部线性嵌入,默认 2 维;laplacian:拉普拉斯特征映射,t为热核宽度参数(非正值表示离散权重);tsne:t-SNE,默认perplexity=20.0, eta=200.0, iterations=1000,输入为方阵时视为平方距离/相异度矩阵;umap:UMAP,k通常取 2~100,epochs至少 10(大数据约 200、小数据约 500),minDist默认 0.1、spread默认 1.0;mds:经典多维缩放(主坐标分析),positive=true时估计加性常数使核矩阵半正定;isomds:Kruskal 非度量 MDS,基于序关系与等距回归;sammon:Sammon 映射,重点保留小距离,lambda为对角牛顿法的初始步长。
6. smile.association —— 关联规则挖掘
定义于 clojure/src/smile/association.clj:
fptree:构建 FP 树,需min-support(最小支持度频次)与 item set 流;fpgrowth:FP-Growth 频繁项集挖掘;arm:在 FP 树上按min-confidence生成关联规则。
注意:FP 树要求项标识符取值于[0, n)且 item set 内不重复。
五、典型使用示例:一个完整的分类流程
以测试用例 clojure/test/smile/classification_test.clj 为蓝本,从读取数据到训练模型再到评估,一个典型流程如下:
(require '[smile.classification :as cl]) ;; 使用 SMILE 内置 Iris 数据集 (import '[smile.datasets Iris]) (let [data (Iris.) model (cl/cart (.formula data) (.data data)) err (smile.validation.metric.Error/of (.y data) (.predict model (.data data)))] (println "Decision Tree training error =" err))cl/cart与cl/random-forest、cl/gbm、cl/adaboost都接受formula与data(DataFrame)作为参数,与 R/统计建模风格一致;cl/knn、cl/svm、cl/mlp等则接受矩阵x与标签y。模型对象与 Java API 完全一致,可直接调用.predict做推断。
对应的测试文件验证了:决策树与随机森林训练误差 ≤ 10、梯度提升与 AdaBoost 训练误差 ≤ 5(Iris 数据集,固定随机种子 19650218)。聚类侧 clojure/test/smile/clustering_test.clj 使用 Rand Index 验证 K-Means / K-Medoids ≥ 0.7、G-Means ≥ 0.5,可用来复现并验证环境配置是否正确。
六、REPL 交互与聚合命名空间
官方将 REPL 初始命名空间设为smile.ai,该命名空间(见 clojure/src/smile/ai.clj)聚合了smile.io、smile.classification、smile.clustering、smile.manifold的全部公开函数,并将smile.regression以命名空间别名引入以避免与分类命名空间的函数冲突。这样在 REPL 中你可以直接:
;; 读数据 (read-csv "data.csv") ;; 聚类 (kmeans x 3) ;; 流形可视化 (tsne data)七、注意事项与总结
- 弃用状态:Clojure API 已弃用,新项目建议直接使用 Java API;Clojure 模块作为参考实现仍可依赖与运行。
- 矩阵依赖:流形学习、部分聚类、GPR、MLP 等算法依赖 BLAS/LAPACK,需按上文加入 OpenBLAS 与 ARPACK 平台依赖,或通过系统属性指向自定义 BLAS 库。
- 版本差异:README 记录的依赖坐标(6.2.0)与当前
project.clj(6.3.0)存在版本滞后,接入时以实际解析到的版本为准。 - 功能覆盖:尽管 API 已弃用,其功能面仍覆盖分类、回归、聚类、关联规则、特征选择、流形学习、多维缩放、遗传算法、缺失值填补与近邻搜索等 SMILE 核心能力,可作为理解 SMILE 算法封装的简洁函数式入口。
- 人工智能
- 机器学习
- 深度学习
- NLP
- 大模型
- 模型推理服务
- 数据可视化
【免费下载链接】smile
Statistical Machine Intelligence & Learning Engine
相关推荐
如何用Flexbox-Labs实现可视化布局设计:5个实用技巧
如何用Flexbox Labs实现可视化布局设计:5个实用技巧 你是否曾为复杂的CSS Flexbox布局而头疼?Flexbox Labs正是为解决这一痛点而生
前端开发工具终极指南:如何在Windows、Linux、macOS上快速安装配置SMILE机器学习引擎
终极指南:如何在Windows、Linux、macOS上快速安装配置SMILE机器学习引擎 SMILE(Statistical Machine Intellig
人工智能机器学习深度学习NLP大模型模型推理服务数据可视化hexo-theme-solitude主题GitHub Actions部署教程:10步实现自动化CI/CD流程
hexo theme solitude主题GitHub Actions部署教程:10步实现自动化CI/CD流程 欢迎来到hexo theme solitude主
前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考