理论+实例,带你入门Greenplum机器学习框架MADlib

本文介绍了如何使用Greenplum数据库和MADlib框架进行机器学习,特别是通过MADlib实现朴素贝叶斯算法,对MNIST手写数字数据集进行训练和识别。详细阐述了数据准备、导入、模型训练和评估的过程,帮助读者入门Greenplum上的机器学习应用。
摘要由CSDN通过智能技术生成

e45b2dd4-549c-4f09-82eb-5829b7a0ab56.jpg

本文由瀚高基础软件社区作者赫庆贺创作贡献


概述


本文介绍Greenplum和MADlib在机器学习方面的基本概念、架构和原理。并结合MNIST数据集完成对0-9阿拉伯数字的图形识别的应用实例。旨在为数据库开发者和DBA提供简单机器学习的了解和入门的方式。

一、知识与软件准备


1.1 Greenplum 


Greenplum是全球首个开源MPP数据库,内核基于PostgreSQL。作为PB级分布式数据库,支持大规模并行数据计算,被广泛应用于企业的OLAP业务场景。Greenplum集群的节点类型主要有master和segment。master提供数据库统一访问入口并协调各计算节点运行,segment作为物理存储和数据计算节点。通过增加segment节点可以实现系统性能的线性扩展。
Greenplum的并行计算能力和线性扩展能力赋能于MADlib,使其有更好的并发度,用更全量的数据和更少的数据移动来做模型训练。


1.2 MADlib


MADlib 是Apache 软件基金会顶级开源项目。作为一个机器学习函数库,MADlib能以扩展插件的形式嵌入到Greenplum和PostgreSQL数据库中,提供SQL层的接口。数据库用户可以直接通过SQL语言调用MADlib的接口完成机器学习的各个过程。
MADlib的架构如下:

6faa31c0-350c-4f23-a2f7-d07b60b77f90.png


为了保证执行效率,MADlib底层算法主要由C++编写,上层接口由python编写。目前已支持超过50种常用算法,并且为开发人员提供了扩展算法的方式。


所有算法都支持在Greenplum各个segment节点上并行运算,并将各个segment上的运算结果汇聚到master节点形成最终结果,计算时的数据仅在数据库内部移动。为了实现这一点,MADlib在数据库内创建一系列的汇聚函数(UDA)和计算函数(UDF)。在MADlib安装时这些函数会被创建在数据库内部。


MADlib支持深度学习算法,集成Keras、Tensorflow、Scipy库,并集成CUDA、CUDNN以支持GPU加速计算。


1.3 机器学习


机器学习是一门多领域交叉学科,涉及概率论、统计学、算法复杂度理论等多门学科。机器学习是人工智能(AI)的核心子领域,机器学习的理论基础是能够让计算机可以自动学习的算法。算法按照学习策略、应用领域、学习形式等方式划分为不同类别。常见机器学习算法有:朴素贝叶斯、线性回归、神经网络、决策树、支持向量机等等。幸运的是,作为一个软件开发者可以不用去了解算法的实现细节,直接调用函数库接口就能使用这些算法。机器学习已在生物特征检测、图像识别、数据挖掘、语义分析等多个领域有广泛应用。


传统方式下,计算机对某一个事物分类的判别方式通常需要一组事先定义好的阈值区间和一系列严格的判断逻辑组合来完成。例如让计算机判断一个物体是不是苹果,要事先告诉计算机苹果的定义是什么。


假设我们定义苹果的属性取值区间为:颜色为红色或青色,直径范围是2cm-10cm,重量范围20g-500g,口感香甜。


计算机判断物体是不是苹果的流程通常如下:


398caeb7-fbc9-43f0-b057-11ee5885cf80.png


机器学习则提供了另一种思路来解决这类问题。我们不需要给计算机预先定义苹果是什么。我们只需要告诉计算机这种东西是苹果、这种东西是苹果、这种东西也是苹果......


所有的苹果样例组成了数据集。通过机器学习算法对数据集的处理(训练)可以产生判断苹果的模型。随着数据集的变化,模型可以通过重复训练来优化调整。有了模型便可以判断一个新的物体是不是苹果了。


4af0ebcb-7974-4d11-a6e5-f5ccbf043a46.png


以上示例,对事务的分类判别方式称之为分类算法,分类算法仅仅是众多机器学习算法中的一种。除了分类算法还有用于预测连续性输出值的回归类算法,用来挖掘事务之间的关联关系的关联规则类算法等等。


1.4 数据集


机器学习中用来训练算法模型和测试算法正确性的数据。针对自身业务的机器学习模型训练最好使用自身应用场景的数据。也有许多不同应用场景下的公开数据集供学习研究使用。本文使用MNIST数据集作为训练和测试用数据。


MNIST来自美国国家标准与技术研究所(NIST),是被经常使用的典型数据集。MNIST由多人手写0-9的阿拉伯数字组成,可以把每个手写阿拉伯数字看做是一个28x28像素的图片,将图片转换成像素值的矩阵再以字节序的形式存储到文件中。


MNIST数据集的下载地址为:http://yann.lecun.com/exdb/mnist/


下载文件列表如图:


7a68586e-daf9-4a4d-8336-06aba762d9ac.png



下载后可以用gunzip工具将每个压缩文件解压。数据集包含60000个训练数据样本,10000个测试数据样本。文件分别以格式存储数据。

62296db0-6d88-4315-9e85-9bd3bf60b92e.png


1.5 数据处理代码</

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值