基于PyTorch重写sklearn,《现代大数据算法》

简介:

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个新算法以及一些更新的算法:

86103c1378b6e0f6c2655cd7d8c0ab82c40aa540

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

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

a965e0e22315cf7a097444a6eee9e517dd77ac55

提速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_)一样调用。

71c4273362958accefa77d062b9e0864b7698845

速度/内存的比较

54b55b0a446c3929570c703409f982a315197372

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

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

951a9b8bad2ecbe785e4e1191a79c0b861728560

关键方法和目标

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

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进行贝叶斯深度学习


原文发布时间为:2018-11-19

本文作者:Daniel Han-Chen

本文来自云栖社区合作伙伴新智元,了解相关信息可以关注“AI_era”。

原文链接:基于PyTorch重写sklearn,《现代大数据算法》

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
21天前
|
机器学习/深度学习 存储 算法
sklearn应用线性回归算法
sklearn应用线性回归算法
24 0
|
30天前
|
机器学习/深度学习 算法 Python
请解释Python中的随机森林算法以及如何使用Sklearn库实现它。
【2月更文挑战第28天】【2月更文挑战第101篇】请解释Python中的随机森林算法以及如何使用Sklearn库实现它。
|
3月前
|
算法
sklearn算法
sklearn算法
22 0
|
28天前
|
机器学习/深度学习 算法 数据挖掘
请解释Python中的决策树算法以及如何使用Sklearn库实现它。
决策树是监督学习算法,常用于分类和回归问题。Python的Sklearn库提供了决策树实现。以下是一步步创建决策树模型的简要步骤:导入所需库,加载数据集(如鸢尾花数据集),划分数据集为训练集和测试集,创建`DecisionTreeClassifier`,训练模型,预测测试集结果,最后通过`accuracy_score`评估模型性能。示例代码展示了这一过程。
|
29天前
|
机器学习/深度学习 算法 数据可视化
请解释Python中的K-means聚类算法以及如何使用Sklearn库实现它。
【2月更文挑战第29天】【2月更文挑战第104篇】请解释Python中的K-means聚类算法以及如何使用Sklearn库实现它。
|
4月前
|
机器学习/深度学习 人工智能 算法
【PyTorch深度强化学习】TD3算法(双延迟-确定策略梯度算法)的讲解及实战(超详细 附源码)
【PyTorch深度强化学习】TD3算法(双延迟-确定策略梯度算法)的讲解及实战(超详细 附源码)
400 1
|
25天前
|
机器学习/深度学习 算法 大数据
基于PyTorch对凸函数采用SGD算法优化实例(附源码)
基于PyTorch对凸函数采用SGD算法优化实例(附源码)
29 3
|
4月前
|
机器学习/深度学习 算法 关系型数据库
【PyTorch深度强化学习】DDPG算法的讲解及实战(超详细 附源码)
【PyTorch深度强化学习】DDPG算法的讲解及实战(超详细 附源码)
503 1
|
7月前
|
机器学习/深度学习 算法 数据挖掘
机器学习Sklearn的k近邻算法api初步使用
机器学习Sklearn的k近邻算法api初步使用
39 0
|
8月前
|
机器学习/深度学习 算法 PyTorch
基于Pytorch的LSTM物品移动预测算法
实现了一个多层双向LSTM模型,并用于训练一个时间序列预测任务
64 0