基于PyTorch重写sklearn,《现代大数据算法》电子书下载

来源:github.com

作者:Daniel Han-Chen 编译:肖琴

【新智元导读】基于PyTorch重写的机器学习工具包HyperLearn,速度更快、内存使用更少,效率提高了一倍。

HyperLearn是一个基于PyTorch重写的机器学习工具包Scikit Learn,它的一些模块速度更快、需要内存更少,效率提高了一倍。

专为大数据而设计,HyperLearn可以使用50%以下的内存,并在某些模块上运行速度提高50%以上。将支持GPU,并且所有模块都是并行化的。

项目作者Daniel Han-Chen,毕业于澳大利亚新南威尔士大学,专注于AI、NLP和无监督机器学习的推荐和匹配算法。

基于HyperLearn,作者展示了如何让很多机器学习算法更快、更高效。

其中一些很酷的算法:

  • 最小二乘法/线性回归的拟合时间相比sklearn减少70%,内存使用减少50%
  • 由于新的并行算法,非负矩阵分解的拟合时间相比sklearn减少50%
  • Euclidean算法/余弦相似度算法加快40%
  • LSMR迭代最小二乘法时间减少50%
  • 新的Reconstruction SVD算法——使用SVD来估算丢失的数据,比mean imputation方法好约30% 稀疏矩阵运算速度提高50%——并行化
  • RandomizedSVD,速度加快20%~30%
  • New Incremental SVD和Incremental Eig,RandomizedSVD / Truncated SVD
  • 等等

项目地址:

https://github.com/danielhanchen/hyperlearn

并且,作者写了一本电子书:Modern Big Data Algorithms,介绍了12个新算法以及一些更新的算法:

红色:新算法;绿色:更新的算法;蓝色:即将发布

让我们先大致看一下“奇异值分解”(SVD)这一章,这是最重要的算法之一。SVD将PCA、线性回归、岭回归、QDA、LDA、LSI、推荐系统、压缩算法、L2 distance等多种算法联系在一起,可以说是机器学习中最重要的算法了。

Page on SVD

Page on Reconstruction SVD

Using SVD to reconstruct missing data

提速50%+,RAM使用减少50%+

提速50%+,RAM使用减少50%+,GPU支持的重写Sklearn,使用Statsmodels组合新的算法。

HyperLearn完全用PyTorch, NoGil Numba, Numpy, panda, Scipy 和 LAPACK编写,镜像主要是Scikit Learn。HyperLearn还嵌入了统计推断方法,可以被想Scikit Learn语法(model.confidence_interval_)一样调用。

速度/内存的比较

时间表示Fit + Predict的时间。RAM(mb) = max( RAM(Fit), RAM(Predict) )

以下是N = 5000,P = 6000时的初步结果:

关键方法和目标

  1. 令人尴尬的并行循环
  2. 速度提升50%+,精简50%+
  3. 为什么Statsmodels有时会慢得让人无法忍受?
  4. 使用PyTorch的深度学习模块
  5. 代码量减少20%+,更清晰的代码
  6. 访问旧算法和令人兴奋的新算法

1. 令人尴尬的并行循环

  • 包括内存共享,内存管理
  • 通过PyTorch和Numba的CUDA并行性

2. 50%+ Faster, 50%+ Leaner

  • 矩阵乘法排序: https://en.wikipedia.org/wiki/Matrix_chain_multiplication
  • Element Wise矩阵乘法将复杂度从O(n^3)降低到O(n^2):https://en.wikipedia.org/wiki/Hadamard_product_(matrices)
  • 将矩阵运算简化为Einstein Notation:https://en.wikipedia.org/wiki/Einstein_notation
  • 连续评估一次性矩阵操作以减少RAM开销。
  • 如果p >> n,则可能分解X.T优于分解X.
  • 在某些情况下,应用QR分解SVD可能会更快。
  • 利用矩阵的结构来计算更快(例如三角矩阵,Hermitian矩阵)。
  • 计算 SVD(X),然后获得pinv(X) ,有时比单纯计算pinv(X)更快

3. 为什么Statsmodels有时会慢得让人无法忍受?

  • 对线性模型的置信度、预测区间,假设检验和拟合优度检验进行了优化。
  • 尽可能使用 Einstein Notation和Hadamard Products。
  • 仅计算需要计算的内容(计算矩阵对角线,而不是整个矩阵)。
  • 修复Statsmodels在符号、速度、内存方面的问题和变量存储上的缺陷。

4. 使用PyTorch的深度学习模块

  • 使用PyTorch创建Scikit-Learn

5. 代码量减少20%+,更清晰的代码

  • 尽可能使用 Decorators和Functions。
  • 直观的中层函数名称,如(isTensor,isIterable)。
  • 通过hyperlearn.multiprocessing轻松处理并行

6. 访问旧算法和令人兴奋的新算法

  • 矩阵补全算法——非负最小二乘法,NNMF
  • 批相似性隐含狄利克雷分布(BS-LDA)
  • 相关回归(Correlation Regression)
  • 可行的广义最小二乘法FGLS
  • Outlier Tolerant Regression
  • 多维样条回归(Multidimensional Spline Regression)
  • 广义MICE
  • 使用Uber的Pyro进行贝叶斯深度学习

《现代大数据算法》电子书下载地址:

https://github.com/danielhanchen/hyperlearn/blob/master/Modern%20Big%20Data%20Algorithms.pdf

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2018-11-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

自然语言处理全家福:纵览当前NLP中的任务、数据、模型与论文

组合范畴语法(CCG; Steedman, 2000)是一种高度词汇化的形式主义。Clark 和 Curran 2007 年提出的标准解析模型使用了超过 400...

26020
来自专栏媒矿工厂

HDR关键技术:HEVC/H.265编码方案

前文我们对HEVC的HDR编码优化技术做了介绍,侧重编码性能的提升。本章主要阐述HEVC中HDR/WCG相关的整体编码方案,包括不同应用场景下的HEVC扩展编码...

81400
来自专栏AI派

如何为协同过滤选择合适的相似度算法

近邻推荐之基于用户的协同过滤 以及 近邻推荐之基于物品的协同过滤 讲解的都是关于如何使用协同过滤来生成推荐结果,无论是基于用户的协同过滤还是基于物品的协同过滤...

42550
来自专栏ATYUN订阅号

TensorFlow团队:TensorFlow Probability的简单介绍

在2018年TensorFlow开发者峰会上,我们(TensorFlow团队)宣布发布TensorFlow Probability:一种使机器学习研究人员及相关...

14650
来自专栏人工智能

长时间序贯任务结构的演示学习方法及其在手术机器人中的应用

本文总结了最近三篇论文的结果,这些论文提出了一些可以将更长的任务分解成更短子任务的学习算法。

375100
来自专栏人工智能LeadAI

基于协同过滤的推荐引擎(理论部分)

记得原来和朋友猜测过网易云的推荐是怎么实现的,大概的猜测有两种:一种是看你听过的和收藏过的音乐,再看和你一样听过这些音乐的人他们喜欢听什么音乐,把他喜欢的你没听...

34350
来自专栏Python中文社区

PyTorch深度学习框架入门——使用PyTorch实现手写数字识别

Pytorch是目前非常流行的深度学习框架,因为它具备了Python的特性所以极易上手和使用,同时又兼具了NumPy的特性,因此在性能上也并不逊于任何一款深度学...

28830
来自专栏数据派THU

教你用机器学习匹配导师 !(附代码)

作者:Zipporah Polinsky-Nagel, Gregory Brucchieri, Marissa Joy, William Kye, Nan Li...

13520
来自专栏深度学习自然语言处理

【论文笔记】中文词向量论文综述(一)

最近在做中文词向量相关工作,其中看了一些中文词向量的相关论文,在这篇文章,将把近几年的中文词向量进展及其模型结构加以简述,大概要写3-4篇综述,每篇包含2-3篇...

13820
来自专栏AI研习社

利用摇滚乐队学习TensorFlow,Word2Vec模型和TSNE算法

学习“TensorFlow方式”来构建神经网络似乎是开始机器学习的一大障碍。在本教程中,我们将一步一步地介绍使用Kaggle的Pitchfork数据构建Band...

19720

扫码关注云+社区

领取腾讯云代金券