1 GBMLlib简介
1.1 GBMLlib简介
GBMLlib是GBase8a的数据挖掘和机器学习扩展库,以插件的形式添加到GBase8a中。通过其提供的机器学习算法,GBase8a可以对用户数据进行深层次的分析和挖掘,将用户数据转化为用户价值,
GBMLlib提供了基于SQL的机器学习算法,目前包括的算法有:回归算法(线性回归)、分类算法(Logistic回归、支持向量机)和聚类算法(K-Means)。同时也提供了一些数组操作和线性代数计算的基本函数。
1.2 技术特点
GBMLlib具备以下技术特征:
1) SQL接口:GBMLlib提供了SQL方式的数据挖掘算法,模型的训练、评估和预测都通过SQL语句来执行,使得数据分析师非常容易掌握,并与其现有技能结合,充分发挥其创造力、提高工作效率。
2) In-database分析:不同于其他分析工具需要通过api或odbc把数据从数据库搬移到分析节点进行处理的方式,GBMLlib的分析算法以数据库udf/udaf的形式运行在GBase8a的线程内部,通过GBase8a的执行计划进行调度,最大程度的减少数据的搬移、提升运行速度。
3) 方便扩展:GBMLlib以插件的形式添加到GBase8a中,并采用弹性灵活的软件架构,方便后续添加新的数据挖掘和机器学习算法。
1.3 产品功能简介
GBMLlib支持的数据挖掘功能如下表所示:
类 别 |
算 法 |
描 述 |
回归 |
线性回归 |
利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法 |
分类 |
Logistic回归 |
二类分类模型,根据现有数据对分类边界建立回归公式,以此进行分类 |
支撑向量机(SVM) |
二类分类模型,模型定义为特征空间上的间隔最大的线性分类器,学习策略为间隔最大化,最终可转化为一个凸二次规划问题的求解。 |
|
聚类 |
K-Means聚类 |
把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。 |
1.4 名词解释
特征属性:
在关系型数据库中,是指参与到数据挖掘的表字段,也可以称为特征属性,特征字段,特征因子,特征变量等等。
自变量(Independent Variable):
指可以独立发挥作用,一般不可改变的特征指标,比如用户的年龄,性别,职业等等。又可以称为驱动因子,驱动变量,被依赖变量等。大数据挖掘一般通过自变量的不同值的变化发现因变量的变化规律。
因变量(Dependent Variable):
指依赖于一个或多个自变量而变化的特征属性。又可以称为被驱动因子,依赖变量,目标变量,分类变量(class)等等。因变量通常表现为一个主体的行为模式,如是否购买某种产品,是否具有贷款偿还能力等等。大数据挖掘一般着重于发现因变量的变化规律
挖掘算法(Data Mining Algorithm):
一种用数学语言描述的使用数学方法的数据操作过程,也可以称为机器学习算法
2 用法概述
GBMLlib以GBase8a数据库插件形式提供,提供的一系列进行数据挖掘和机器学习的SQL函数。数据分析师在GBase8a的客户端,通过执行SQL命令,就可以进行机器学习建模、模型评估和数据预测等工作。
2.1 数据挖掘流程
- 准备数据GBMLlib直接对GBase8a的数据表进行分析、挖掘,在数据准备阶段,用户把要挖掘的数据组织成数据表,存储到GBase8a中即可。
- 调用GBMLlib挖掘方法对训练数据进行挖掘,挖掘结果存在结果表中。GBMLlib的挖掘函数基本上都会遵循train-predict的命名规则。对于一个挖掘算法,会提供algorithm_train()的训练函数和algorithm_predict()的预测函数,通过train函数训练出的模型保存在结果表中;利用结果表中保存的模型,通过predict函数进行预测。
如下面语句是logistic回归的训练函数调用方法,后面章节详细说明:
SELECT mllib.logregr_train(
'test.patients', -- source table
'test.patients_logregr', -- result table
'second_attack', -- dependent variable
'array double[1, treatment, trait_anxiety]',
-- independent variable
NULL, -- group-by column
20, -- max_iter
0.0001 -- tolerance
);
- 查询结果表查看挖掘结果训练结果保存在用户指定的结果表中(如上例的patients_logregr),同时还会生成一个摘要表,记录训练的摘要信息,摘要表的表名是结果表加上“_summary”,如上例会生成patients_logregr_summary的摘要表。通过查询结果表和摘要表可以查看挖掘结果和模型信息。
- 调用预测函数对新数据进行预测
对新数据预测通过predict()函数完成,函数的输入通常是结果表中保存的模型系数(coefficients)和新数据的数据表因变量。如下面的logistic回归的预测语句:
SELECT p.id,
logregr_predict(
coef, -- coefficients
array double[1, treatment, trait_anxiety] -- independent variable
) as predict,
p.second_attack
FROM patients p, patients_logregr m
ORDER BY p.id;
2.2 数组类型用法说明
GBMLlib提供的数据挖掘算法涉及大量的线性代数运算,需要处理向量和矩阵。向量和矩阵在GBase8a中通过BLOB类型进行存储,同时提供函数把整数和浮点数类型的数据组装成数组和显示数组的内容
- 组装数组
语法:
ARRAY type[ expr1 [, expr2 …] ]
type指定保存到数组中的数据的类型。目前支持double和bigint
示例:
创建t1表,插入数组类型的数据
gbase> create table t1(a int, b blob);
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
gbase> insert into t1 values(1, ARRAY BIGINT[1,2]);
Query OK, 1 row affected (Elapsed: 00:00:00.01)
gbase> insert into t1 values(2, ARRAY BIGINT[3,4]);
Query OK, 1 row affected (Elapsed: 00:00:00.00)
- 显示数组中的数据
语法:
ARRAY_TEXT(expr)
示例:
显示t1表中数组的内容
gbase> select a, ARRAY_TEXT(b) from t1;
+------+---------------+
| a | ARRAY_TEXT(b) |
+------+---------------+
| 1 | {1,2} |
| 2 | {3,4} |
+------+---------------+
2 rows in set (Elapsed: 00:00:00.00)
可以参考下面各个挖掘算法的示例获取更多数组类型使用的信息。
3 回归算法
3.1 线性回归
线性回归模型用来发现一个纯量的因变量与一个或者多个自变量之间的线性关系,并通过此回归公式进行结果预测。
线性回归的示意图如上图,通过训练找到一组系数以便达到对数据的最佳拟合,并将系数在结果表中保存,用于新数据的预测。
3.1.1 训练函数
线性回归的训练函数的语法如下:
linregr_train( source_table,
out_table,
dependent_varname,
independent_varname)
参数说明:
source_table: 含训练数据的输入表
out_table: 保存训练结果的结果表
dependent_varname: 因变量的列名
independent_varname: 自变量的列名,数组类型
结果表说明:
训练函数成功执行后,会创建保存模型信息的结果表,结果表包含如下字段用来表示模型信息:
coef: 相关系数,用于预测
3.1.2 预测函数
Linear回归的预测函数的语法如下:
linregr_predict(coefficients,
ndependent_varname
)
参数说明:
coefficients: 模型结果表中保存的相关系数
independent_varname: 自变量的列名,数组类型
3.1.3 示例
<