java 科学计算库 Smile

news2024/9/22 0:51:49

官网

https://haifengl.github.io/

github

https://haifengl.github.io/

简介

统计机器智能和学习引擎,或者简称 Smile,是一个有前途的现代机器学习系统,在某些方面类似于 Python 的 scikit-learn。它是用 Java 开发的,也提供了 Scala API。该库将以其快速而广泛的应用程序、高效的内存使用以及大量用于分类、回归、最近邻搜索、特征选择等的机器学习算法让您惊叹不已。(截止2023-07-07,该项目在更新中)

支持算法:

 使用:

还在研究,英文水平一般

其他科学领域的库介绍

2018 年数据科学领域排名前 15 的 Scala 库

机器学习斯卡拉数据科学

在之前的文章中,我们讨论了数据科学的顶级 Python 库。这次我们将重点关注 Scala,它最近已成为数据科学家的另一种重要语言。它之所以受欢迎,主要是由于 Spark 的兴起,Spark 是一种首选的大数据处理引擎,它是用 Scala 编写的,因此在 Scala 中提供了本机 API。

我们不会在这里深入比较 Scala 与 Python,但需要注意的是,与 Python 不同,Scala 是一种编译语言。因此,用它编写的代码执行速度要快得多(与纯 Python 相比,而不是像 NumPy 这样的专用库)。

与 Java 相比,用 Scala 编写要愉快得多,因为通常可以用更少的行数来表达相同的逻辑。Scala的功能丝毫不逊色于Java,甚至有一些更高级的属性。Java 老手可能会在这里提出很多反驳意见,但毫无疑问,Scala 更适合数据科学任务。

目前,Python 和 R 仍然是快速数据分析以及构建、探索和操作强大模型的领先语言,而 Scala 正在成为开发大数据功能产品的关键语言,因为后者需要稳定性、灵活性、高速、可扩展性等。通常,在研究阶段,分析和模型是用Python完成的,然后在生产过程中用Scala实现。

为了您的方便,我们准备了用于在 Scala 中执行机器学习和数据科学任务的最重要库的全面概述。我们将使用相应的 Python 工具进行类比,以便更好地理解一些重要方面。事实上,只有一个顶级的综合工具可以构成 Scala 中数据科学和大数据解决方案开发的基础,即 Apache Spark,并辅以大量用 Scala 和 Scala 编写的库和工具。爪哇。让我们仔细看看它。

数据分析和数学

1. Breeze(提交数:3316,贡献者:84)

Breeze 被认为是 Scala 的主要科学计算库。它从 MATLAB 的数据结构和 Python 的 NumPy 类中汲取灵感。Breeze 提供快速高效的数据数组操作,并支持许多其他操作的实现,包括:

  • 用于创建、转置、填充数字、进行元素运算、求逆、计算行列式以及更多其他选项的矩阵和向量运算,可以满足几乎所有需求

  • 概率和统计函数,从统计分布和计算描述性统计(例如均值、方差和标准差)到马尔可夫链模型。用于统计的主要软件包是 breeze.statsbreeze.stats.distributions

  • 优化,意味着研究函数的局部或全局最小值。优化方法存储在breeze.optimize package. 

  • 线性代数:所有基本运算都依赖于netlib-java库,使得Breeze的代数计算速度极快。

  • 信号处理操作,是处理数字信号所必需的。Breeze 中重要运算的示例是卷积和傅里叶变换,它将给定函数分解为正弦和余弦分量的和。

Breeze 还提供了绘图的可能性,我们将在下面讨论。

2. Saddle(提交数:184,贡献者:10)

Scala 的另一个数据操作工具包是 Saddle。它是 R 和 Python 的 pandas 库的 Scala 类似物。与 pandas 或 R 中的数据帧一样,Saddle 基于 Frame 结构(2D 索引矩阵)。

总共有五种主要的数据结构,分别是: 

  • Vec(一维向量)

  • Mat(二维矩阵)

  • 系列(一维索引矩阵)

  • 帧(二维索引矩阵)

  • 索引(类似哈希图)

Vec 和 Mat 类位于 Series 和 Frame 的基础上。您可以对这些数据结构实施不同的操作,并将它们用于基本的数据分析。Saddle 的另一个优点是它对缺失值的鲁棒性。/跨度>

3.Scalalab(提交数:23,贡献者:1)

ScalaLab 是 Scala 对 MATLAB 计算功能的解释。而且,ScalaLab可以直接调用和访问MATLAB脚本的结果。

与以前的计算库的主要区别在于 ScalaLab 使用自己的领域特定语言,称为 ScalaSci。Scalalab 可以方便地访问各种科学 Java 和 Scala 库,因此您可以轻松导入数据,然后使用不同的方法进行操作和计算。大多数技术与 Breeze 和 Saddle 类似。此外,与微风一样,还有绘图机会可以进一步解释结果数据。

自然语言处理

4. Epic(提交数:1790,贡献者:15)& 5. Puck(提交数:536,贡献者:1)

Scala 有一些很棒的自然语言处理库作为 ScalaNLP 的一部分,包括 Epic 和 Puck。这些库主要用作文本解析器,如果您需要解析数千个句子,由于其高速和 GPU 使用,Puck 会更方便。此外,Epic 还被称为预测框架,它采用结构化预测来构建复杂的系统。

数据科学虚拟机

下载

可视化

6. Breeze-vis(提交数:29,贡献者:3)

顾名思义,Breeze-viz 是 Breeze 为 Scala 开发的绘图库。它基于著名的 Java 图表库 JFreeChart,并具有类似 MATLAB 的语法。尽管 Breeze-viz 的机会比 MATLAB、Python 中的 matplotlib 或 R 少得多,但它在开发和建立新模型的过程中仍然非常有帮助。 

7. Vegas(提交数:210,贡献者:14)

另一个用于数据可视化的 Scala 库是 Vegas。它比 Breeze-viz 功能强大得多,并且允许制定一些绘图规范,例如过滤、转换和聚合。它在结构上与Python的Bokeh和Plotly类似。

Vegas 提供声明性可视化,使您可以主要关注指定需要对数据执行的操作并对可视化进行进一步分析,而不必担心代码实现。

机器学习

8. Smile(提交数:1019,贡献者:21)

统计机器智能和学习引擎,或者简称 Smile,是一个有前途的现代机器学习系统,在某些方面类似于 Python 的 scikit-learn。它是用 Java 开发的,也提供了 Scala API。该库将以其快速而广泛的应用程序、高效的内存使用以及大量用于分类、回归、最近邻搜索、特征选择等的机器学习算法让您惊叹不已。

 

9. Apache Spark MLlib 和 ML 

MLlib 库构建在 Spark 之上,提供了多种机器学习算法。它是用 Scala 编写的,还为 Java、Python 和 R 提供了功能强大的 API,但 Scala 的机会更加灵活。该库由两个独立的包组成:MLlib 和 ML。让我们一一更详细地看看它们。

  • MLlib 是一个基于 RDD 的库,包含用于分类、聚类、无监督学习技术的核心机器学习算法,并由用于实现相关性、假设检验和随机数据生成等基本统计数据的工具支持。

  • ML 是一个较新的库,与 MLlib 不同,它在数据帧和数据集上运行。该库的主要目的是提供对数据构建不同转换的管道的能力。管道可以被视为一系列阶段,其中每个阶段要么是一个 Transformer(将一个数据帧转换为另一个数据帧),要么是一个 Estimator(一种可以适应数据帧以生成 Transformer 的算法)。

每个包都有其优点和缺点,在实践中,事实证明同时应用两者通常更有效。

10.DeepLearning.scala(提交数:1647,贡献者:14)

DeepLearning.scala 是一种替代机器学习工具包,为深度学习提供高效的解决方案。它利用数学公式通过面向对象和函数式编程的组合来创建复杂的动态神经网络。该库使用广泛的类型以及应用类型类。后者允许同时开始多个计算,我们认为这对于数据科学家的处理至关重要。值得一提的是,该库的神经网络是程序,支持所有 Scala 功能。

11. Summing Bird(提交数:1772,贡献者:31)

Summingbird 是一个特定领域的数据处理框架,它允许集成批处理和在线 MapReduce 计算以及混合批处理/在线处理模式。设计该语言的主要催化剂来自 Twitter 开发人员,他们经常需要编写两次相同的代码:第一次用于批处理,然后再次用于在线处理。

Summingbird 消耗并生成两种类型的数据:流(元组的无限序列)和被视为数据集在某个时间点的完整状态的快照。最后,Summingbird 提供了 Storm、Scalding 的平台实现以及用于测试目的的内存执行引擎。

12. PredictionIO(提交数:4343,贡献者:125)

当然,我们不能忽视一个用于构建和部署预测引擎的机器学习服务器,称为PredictionIO。它基于 Apache Spark、MLlib 和 HBase 构建,甚至在 Github 上被评为最受欢迎的基于 Apache Spark 的机器学习产品。它使您能够轻松高效地构建、评估和部署引擎,实现您自己的机器学习模型,并将其合并到您的引擎中。

额外的

13.Akka(提交数:21430,贡献者:467)

Akka 由 Scala 的创建者公司开发,是一个用于在 JVM 上构建分布式应用程序的并发框架。它使用基于参与者的模型,其中参与者代表接收消息并采取适当操作的对象。Akka 取代了以前 Scala 版本中提供的 Actor 类的功能。

主要区别(也被认为是最重要的改进)是参与者和底层系统之间的附加层,它只需要参与者处理消息,而框架处理所有其他复杂情况。所有参与者都是分层排列的,从而创建一个参与者系统,帮助参与者更有效地相互交互,并通过将它们划分为更小的任务来解决复杂的问题。

14. Spray(提交数:2663,贡献者:74)

现在让我们看一下 Spray - 一套 Scala 库,用于构建基于 Akka 的 REST/HTTP Web 服务。它确保异步、非阻塞的基于 Actor 的高性能请求处理,而内部 Scala DSL 提供定义的 Web 服务行为以及高效、便捷的测试功能。

UPD:Spray 不再维护,并已被 Akka HTTP 暂停。虽然大部分库功能仍然存在,但与此位移相关的流、模块结构、路由 DSL 等方面发生了一些变化和改进。迁移指南将帮助您了解所有进展。

15. Slick(提交数:1940,贡献者:92)

我们列表中最后但并非最不重要的是 Slick,它代表 Scala 语言集成连接工具包。它是一个用于创建和执行数据库查询的库,提供各种受支持的数据库,例如 H2、MySQL、PostgreSQL 等。某些数据库可通过 slick-extensions 获得。

为了构建查询,Slick 提供了强大的 DSL,这使得代码看起来就像您在使用 Scala 集合一样。Slick 支持简单的 SQL 查询和多个表的强类型连接。此外,简单的子查询可用于构造更复杂的子查询。

结论

在本文中,我们概述了一些在执行主要数据科学任务时非常有用的 Scala 库。事实证明,它们对于实现最佳结果非常有帮助和有效。您还可以查看从 GitHub 获取的每个提供的库的活动统计信息。

资料来源:谷歌电子表格

请注意,上面提到的列表并不全面,市场上还有许多适合不同用例的其他工具。如果您对任何其他有用的 Scala 库或框架有一些值得添加到此列表中的积极经验,请随时在下面的评论部分分享。

非常感谢您的关注与配合!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/729234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

私域账号防范手册

微信为什么要养号吗?为什么会被封?是什么原理,怎么解封,这些你的了解吗? 来看看这篇文章,这些都能给你解答。

向日葵远程命令执行漏洞(CNVD-2022-10270) 漏洞复现

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 漏洞描述02 影响范围03 利用方式05 实战案例06 修复方案 01 漏洞描述 向日葵远程控制是一款面向企业和专业人员的远程pc管理和控制的服务软件。可以在任何有网络的情况下,轻松访问并控制…

Linux命令之nc命令

一、命令简介 nc是netcat的简写,是一个功能强大的网络工具,有着网络界的瑞士军刀美誉。nc命令在linux系统中实际命令是ncat,nc是软连接到ncat。nc命令的主要作用如下: 实现任意TCP/UDP端口的侦听,nc可以作为server以T…

vue3中的包装响应式数据ref、reactive、toRef、toRefs

一、ref Vue 3中拥有一个新的特性叫做ref,它是一个函数,用于包装响应式数据。与Vue 2的data选项不同,ref可以在普通JavaScript中使用,而不仅仅是在Vue组件中。ref可以将普通的JavaScript数据变成响应式的,这意味着当被…

Python接口自动化测试post请求和get请求,获取请求返回值

引言 我们在做python接口自动化测试时,接口的请求方法有get,post等;get和post请求传参,和获取接口响应数据的方法; 请求接口为Post时,传参方法 我们在使用python中requests库做接口测试时,在做post接口测试…

Go语言-数组和切片有什么异同?

slice 的底层数据是数组,slice 是对数组的封装,它描述一个数组的片段。两者都可以通过下标来访问单个元素。 数组是定长的,长度定义好之后,不能再更改。在 Go 中,数组是不常见的,因为其长度是类型的一部分…

2023年第一届证券基金行业先进计算峰会在沪成功召开

2023年7月7日,在中国计算机学会集成电路设计专委会、中国通信学会金融科技发展促进中心、中国电子工业标准化技术协会新一代计算标准工作委员会和证券基金信息技术创新联盟WG1工作组的指导下,由中科驭数主办的2023年第一届证券基金行业先进计算峰会在上海…

以太网电子产品高低温循环测试

参考标准:《GB/T 2423.22-2012 环境试验 第2部分:试验方法 试验N:温度变化》:试验用来确定元器件、设备或其他产品耐受环境温度快速变化的能力。 1、测试影响因素 温度变化试验用来确定一次或连续多次的温度变化对试验样品的影响…

linux报错 /bin/bash^M:解释器错误:没有那个文件或目录

在Linux中运行脚本时,会出现linux报错 /bin/bash^M:解释器错误:没有那个文件或目录。这是因为我们将在Windows下编写的脚本拷贝到Linux环境中运行时会出现运行不了的情况。主要还是Windows的换行符为\r\n,而Linux环境中的换行符号为\n。 解决方法有:  …

Java安全——基于密码的加密

Java安全 基于密码的加密 基于密码加密和SSL加密的区别 密码加密可以数据和密码分离传输SSL只限于在套接字空间传输的数据进行加密 SSL和密码加密 密码加密是指通过算法将原始信息转换成密文,只有知道相应密钥的人才能解密。Java中常用的密码加密算法包括MD5、SHA、…

Buffer Overflow缓冲区溢出和保护措施

缓冲区溢出是指当数据写入某个缓冲区(buffer)时,超出了为该缓冲区分配的内存空间,从而导致覆盖了相邻内存区域的情况。这种现象可能导致程序崩溃、数据损坏,甚至引发安全漏洞,允许攻击者利用这一漏洞执行恶…

Python程序开发——第十一章 图形用户页面编程

目录 一、图形用户界面与tkinter二、tkinter的根窗口(一)根窗口的创建(二)根窗口的基本方法 三、几何布局管理器(一)pack布局(二)grid布局(三)place布局 四、…

【Android】将手机屏幕投屏到电脑上控制的解决方案

有没有听说scrcpy呢,是投屏工具,通过它就可以实现把手机屏幕投屏到电脑上了,有此帮助,离实现目标更近了一步。 首先,去开源站点GitHub那里下载获取scrcpy 压缩包,根据自己的电脑系统选择下载即可&#xff…

NginxTomcat架构的动静分离和负载均衡

目录 一、Tomcat的多实例部署 1.创建 kgc 和 benet 项目目录和文件 2.修改 Tomcat 主配置文件 3.客户端浏览器访问验证 二、NginxTomcat负载均衡架构原理 2.1 Nginx负载均衡的主要配置 2.2 NginxTomcat负载均衡的优点 三、NginxTomcat负载均衡实验 1.部署Nginx 负载…

SNP受邀参加“赛意力量·全国行”相聚合肥,RISE with SAP

伴随着全球数字化程度的不断加深,IT和OT逐步走向原生融合,以价值链重构倒逼产业转型的结构升级趋势已日益明显。在旺盛的市场需求与机遇下,企业的IT投入涌现出爆发式增长态势,对于IT系统“高效支撑以保障业务先赢”的能力要求已不…

Linux——权限

1.Linux权限的概念 Linux权限是指用于限制对文件和目录的访问的安全机制。文件和目录的权限由三个部分组成:所有者权限、同组用户权限和其他用户权限。每个部分又包括读、写、执行三种权限。这些权限决定了用户能否对文件或目录进行读、写、执行等操作。 2.Linux…

MinGW编译OpenCV 过程记录

1.下载源码opencv-3.4.10.zip ,可以在OpenCV官网下载Releases - OpenCV 解压缩如下: 2.下载Mingw64工具,需要支持posix 并设置系统环境目录,下载的文件名x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0.7z (可以在网上找) 3.使用Cmake工具构建…

Linux学习之分区和挂载磁盘配额

先分区然后格式化。 fdisk /dev/sdb开始分区。 输入p,然后按下Enter,可以查看当前设备的分区情况。 输入d,然后按下Enter,就可以删除上边的分区,要是有多个分区,会让你选择删除哪个分区。 输入n&…

MySQL注入-SQLi-Less3笔记

起手?id1给个参数看看反应 产生报错,关注后面的内容 //从报错信息中的1)就可以推断出SQL语句应该是WHERE XX(id)//那就需要考虑如何将 单引号和括号,提前关闭并且执行我们想要的语句就可以了 知道了语句,直接拼接 ?id1) and 12 union sel…

1。解释型语言和编译型语言

1、解释: 在计算机编程中,编译型语言和解释型语言是两种不同的语言类型。它们的主要区别在于代码的执行方式。编译型语言(Compiled Language)是指在程序运行之前需要经过编译器编译成可执行文件的语言。编译器会将编写好的代码转换…