Antkillerfarm Hacking V7.0

Machine Learning之Java篇, 稀疏矩阵的存储, Optimizer软件, Zookeeper, 运算加速库

2017-11-11

Machine Learning之Java篇

http://machinelearningmastery.com/java-machine-learning/

这篇文章包含了很多Machine Learning方面的软件和库。

ND4J

numpy的等价物。

http://nd4j.org/

DL4J

TensorFlow的等价物。

https://deeplearning4j.org/

参考:

https://mp.weixin.qq.com/s?__biz=MzU2OTA0NzE2NA==&mid=2247484466&idx=1&sn=9dd7d305f37f6cad8d4ac37ad17f61f8

Deeplearning4j:使用CNN进行文本分类:图文+代码

https://mp.weixin.qq.com/s/geJDbL1eVcJXDtsO_mu4-w

Deeplearning4j手把手深度学习教程系列完整版

DJL

Deep Java Library是AWS开源的Java深度学习框架。和DL4J不同,DJL没有自己的运算层,而必须依靠TF或Pytorch进行计算。

https://github.com/awslabs/djl/

参考:

https://mp.weixin.qq.com/s/-GaxCVUOSe_2lFAeLRaIpQ

用Java训练深度学习模型,原来这么简单

Joinery

Pandas的等价物。

https://github.com/cardillo/joinery

Weka

Weka是一款开源的机器学习以及数据挖掘软件。主要开发者来自新西兰的the University of Waikato。

官网:

http://www.cs.waikato.ac.nz/ml/weka/

Weka不仅有GUI,而且也为开发提供了API,是单机Machine Learning的Java首选。国内的京东用的比较多。

GitHub:

https://github.com/bnjmn/weka

API Doc:

http://weka.sourceforge.net/doc.stable-3-8/

Weka除了基本库之外,还有许多扩展包:

http://weka.sourceforge.net/packageMetaData/

参考:

https://weka.wikispaces.com/Use+Weka+in+your+Java+code

如何在Java代码中使用Weka

ELKI

ELKI是另一个数据挖掘软件,也有GUI和API。ELKI主要专注于聚类和异常检测算法。

官网:

https://elki-project.github.io/algorithms/

GitHub:

https://github.com/elki-project/elki

smile

Statistical Machine Intelligence and Learning Engine虽然没有GUI,但却有一个类似Spark的命令行界面,以及类似Matplotlib的数据可视化接口。这是一个留美华人工程师写的统计和NLP方面的库。

官网:

https://haifengl.github.io/smile/

参考:

https://mp.weixin.qq.com/s/UZWSUUuPWcyv6yUx-woF4g

Smile实战(一)SVM

https://mp.weixin.qq.com/s/WE7afgw1VzvClKdbAaXVnA

Smile一下,轻松用Java玩转机器学习

java-string-similarity

这个库虽然功能有限,但却针对字符处理进行了优化。比如Jaccard距离,weka没有实现,ELKI提供的是通用的集合类实现,用起来没有java-string-similarity方便。

官网:

https://github.com/tdebatty/java-string-similarity

LDA4j

https://github.com/hankcs/LDA4j

YTK

猿题库开源了两个Java的库:

https://github.com/yuantiku/ytk-learn

https://github.com/yuantiku/ytk-mp4j

Apache Zeppelin

Zeppelin是一个让交互式数据分析变得可行的基于网页的开源框架。Zeppelin提供了数据分析、数据可视化等功能。

官网:

https://zeppelin.apache.org/

参考

https://mp.weixin.qq.com/s/WsjZERRkgnReWuDw_z5Hxw

LibRec:一个覆盖70多种算法的推荐系统开源库!

https://mp.weixin.qq.com/s/hn8Es-l1f6raJ_wj5HkqMA

LinkedIn开源Dagli,发布Java机器学习函数库

稀疏矩阵的存储

Dictionary of keys (DOK)

这种方法是最直观,也最容易想到的:将非零元素用{(row, column): value}的形式保存。

List of lists (LIL)

一行数据就是一个list,这样每个数据只需要保存column index和value即可。

Coordinate list (COO)

这个方法在DOK的基础上,给同一行的元素建立行索引,给同一列的元素建立列索引。显然DOK适用于硬盘存储,而LIL和COO更适合内存存储,因为后者更需要元素访问的便利性。

Compressed sparse row (CSR, CRS or Yale format)

[0 0 0 0
5 8 0 0
0 0 3 0
0 6 0 0]

A  = [ 5 8 3 6 ]
JA = [ 0 1 2 1 ]
IA = [ 0 0 2 3 4 ]

其中,A是非零元素的value,JA是非零元素的column index。

IA是每行的非零元素在A的offset(类似于文件操作中的游标)。比如第一行没有非零元素,因此第一行的offset为0,第二行也为0。但是第二行有两个非零元素,因此第三行的offset需要+2。依此类推。

按照这个规则,可以看出A和JA中的元素个数相等,而IA的元素个数=行数+1。由于IA的最后一个元素必然和A中的元素个数相等(矩阵都遍历完了,offset当然到末尾了),因此有时也会把它省略。

Optimizer软件

统计类

在前ML时代,工业界已经有不少Optimizer软件用于求解凸优化问题,这些软件从原理上基本都属于传统统计学的范畴。

比较知名的Optimizer软件有:CPlex, Gurobi, Mosek, cvx, LINGO。

参考:

https://mp.weixin.qq.com/s/kdfGUzY6KnI3tpcDg0GX6w

运筹优化问题求解工具Lingo

https://mp.weixin.qq.com/s/ooYg7-pI9axo8Z_vUwMGzg

离散优化求解器大搜罗

https://mp.weixin.qq.com/s/_uGNwcvsIpzQyH6fI_HIPw

MOSEK,一个专注而卓越的优化求解器(一)

https://mp.weixin.qq.com/s/q0x9pXz7p7OciWqBOIV5JQ

XPROG: 简单实用的鲁棒优化(RO, DRO)编程语言

https://mp.weixin.qq.com/s/wJAt-RqmsoyECLGgdlH6RA

基于数据的分布式鲁棒优化算法及其应用

Zookeeper

http://zookeeper.apache.org/

bin/zkServer.sh status

http://www.cnblogs.com/lpshou/archive/2013/06/14/3136904.html

zookeeper原理

https://mp.weixin.qq.com/s/WPyJC4nyLQGWk-OQylUHHw

Zookeeper简单介绍

http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html

分布式服务框架Zookeeper–管理分布式环境中的数据

https://mp.weixin.qq.com/s/uMj3JEhgyYw4CaIhP1-GTQ

阿里巴巴为什么不用ZooKeeper做服务发现?

https://mp.weixin.qq.com/s/KFzJAxL_xvrrjhubd7zH-Q

Facebook为何放弃ZooKeeper转用自研配置管理系统?

https://mp.weixin.qq.com/s/DigeE4YxuT55cSeyb1q1tQ

ZooKeeper源码和实践揭秘

https://mp.weixin.qq.com/s/Tb670Jdt4s7CKzGZZQRL_A

用大白话给你解释Zookeeper的选举机制

https://mp.weixin.qq.com/s/BejPSfvEe98nSch81WKgAg

Zookeeper九个问题

https://mp.weixin.qq.com/s/03A4LnDqNhNgQ5bSRIgR_Q

一举拿下高可用与分布式协调系统设计

运算加速库

Neon

Neon是个大路货的名字,在数值计算领域ARM和Intel都有叫Neon的硬件或技术。

ARM的Neon是适用于ARM Cortex-A系列处理器的一种128位SIMD扩展结构。它主要聚焦于矩阵运算,当然也可用于DL领域。

官网:

https://developer.arm.com/technologies/neon

Intel的Neon专为DL设计。

官网:

https://ai.intel.com/neon/

GSL

GNU scientific library是一个C/C++写的数值计算库。

官网:

https://www.gnu.org/software/gsl/

OpenACC

官网:

https://www.openacc.org/

PGI

PGI是由The Portland Group开发的并行计算库,但后者已于2013年被NVIDIA收购。

官网:

https://www.pgroup.com/

HSA

HSA(Heterogeneous System Architecture)是AMD推出的异构系统架构。

官网:

http://www.amd.com/zh-cn/innovations/software-technologies/hsa

NetLib

NetLib是一个数学方面的网站,收集了大量的数学软件和论文。官网:

http://www.netlib.org/

知名软件LAPACK(Linear Algebra PACKage)和BLAS (Basic Linear Algebra Subprograms)的官网就在NetLib:

http://www.netlib.org/lapack/index.html

http://www.netlib.org/blas/index.html

LAPACK和BLAS的历史非常悠久,是用Fortran语言编写的。

GMP

GMP是一个C/C++的大整数计算库。

官网:

https://gmplib.org/

TensorFlow参考+

https://mp.weixin.qq.com/s/eX3LWYiSH-KObH_7F_3QCA

TensorFlow 1.11.0发布,一键多GPU

https://mp.weixin.qq.com/s/316VVXLQfeIsKNk4ld-VRw

TensorFlow语义分割套件开源了ECCV18旷视科技BiSeNet实时分割算法

https://mp.weixin.qq.com/s/XI1J4ardEWKP4UQ4IXZGTQ

TensorFlow Hub,给您带来全新的Web体验

http://www.jianshu.com/p/1da012a83b74

利用TensorFlow实现排序和搜索算法

https://mp.weixin.qq.com/s/oEqMjOTj8xpd3sg60ZUhqA

TensorFlow的c++实践及各种坑

https://mp.weixin.qq.com/s/-5RCRl9ztQ2dQmX00QvfvQ

在Python和TensorFlow上构建Word2Vec词嵌入模型

https://mp.weixin.qq.com/s/Nyjp0mZxcn04vLKjJXLSaw

如何用TensorFlow在安卓设备上实现深度学习推断

https://mp.weixin.qq.com/s/kEowgNPVS1nAGBPbzkatlQ

如何构建高可读性和高可重用的TensorFlow模型

https://mp.weixin.qq.com/s/O_IN39FBVPeD5fRYBsPuZQ

用TensorFlow开发问答系统

https://mp.weixin.qq.com/s/8Hrq_z8s_5ms6Q_6OOaU-g

如何使用TensorFlow和自编码器模型生成手写数字

https://mp.weixin.qq.com/s/nnjyR4XGVZQ1zXCIPzTNlg

基于TensorFlow的变分自编码器实现

https://mp.weixin.qq.com/s/iMgesGmdb7Jq4muCxb-nFA

Tensorflow实战:Discuz验证码识别

https://mp.weixin.qq.com/s/4aJUGBpPG_6Oc5EqOmM0Iw

作为TensorFlow的底层语言,你会用C++构建深度神经网络吗?

https://github.com/yahoo/TensorFlowOnSpark

TensorFlow On Spark

https://mp.weixin.qq.com/s/7er3wNV_IhxhFDOIwNMpww

深度强化学习入门:用TensorFlow构建你的第一个游戏AI

https://mp.weixin.qq.com/s/UbBJYOmWtUXPFliRMyzDrg

最新TensorFlow专业深度学习实战书籍和代码《Pro Deep Learning with TensorFlow》

https://mp.weixin.qq.com/s/zeZs48XbYJGhvOoIysZ8QA

Docker Compose+GPU+TensorFlow所产生的奇妙火花

https://mp.weixin.qq.com/s/sOggiB57D-ekWOsbL6TY_A

TensorFlow中那些鲜为人知却又极其实用的知识

https://mp.weixin.qq.com/s/gW_KX6eF9XEsSUO1UzJ3WQ

基于LSTM的情感分析

https://mp.weixin.qq.com/s/KZhL477ApHgQfmM2xFrYJw

Tensorlang:基于TensorFlow的可微编程语言

https://mp.weixin.qq.com/s/_9NJ6QLQArUAD1DKb0KRfA

如何使用TensorFlow mobile部署模型到移动设备

https://mp.weixin.qq.com/s/e_TzQxFLAonLMyYAhte6Cg

face-api.js:在浏览器中进行人脸识别的JavaScript接口

https://zhuanlan.zhihu.com/p/347599203

TFRT的开源代码分析

Fork me on GitHub