概述环境部署使用指导最佳实践常见问题处理
概述
环境部署
使用指导
最佳实践
常见问题处理
一、概述
DeepSQL是对openGauss DB4AI能力的增强,让对MADLib比较熟悉的数据分析师或开发者可以轻松迁移到openGauss上进行工作。DeepSQL将常用的机器学习算法封装为SQL语句,支持60多个常用算法。其中包括回归算法(例如线性回归,逻辑回归,随机森林等)、分类算法(比如KNN等)、聚类算法(比如K-means)等。除了基础的机器学习算法之外,还包括图相关的算法,比如最短路径,图形直径等等算法;此外还支持数据处理(比如PCA),稀疏向量,统计学常用算法(比如协方差,Pearson系数计算等),训练集测试集分割方法,交叉验证方法等。
表 1 支持的机器学习算法 - 回归类算法
算法中文名称
算法英文名称
应用场景
逻辑回归
Logistic Regression
例如寻找某疾病的危险因素,金融商业机构需要对企业进行评估等。 预测:根据模型预测同的自变量情况下某病或某情况的发生概率。 判别:实际上跟预测类似,也是根据模型判断某人属于某病或属于某种情况的概率有多大,即判断某有多大可能是属于某病。
Cox比例风险回归
Cox Proportional Hazards Regression
该模型以生存结局和生存时间为因变量,可同时分析众多因素对生存期的影响,能分析带有截尾生存时间的资料,且不要求估计资料的生存分布类型。由于上述优良性质,该模型自问世以来,在医学类研究中得到广泛的应用,是迄今生存分析中应用最多的多因素分析方法。
弹性网络回归
Elastic Net Regularization
弹性回归是岭回归和套索回归的混合技术,它同时使用 L2 和 L1 正则化。当有多个相关的特征时,套索回归很可能随机选择其中一个,而弹性回归很可能都会选择。
广义线性模型
Generalized Linear Models
在一些实际问题中,变量间的关系并不都是线性的,这种情况就应该用曲线去进行拟合。
边际效应
Marginal Effects
提供边际效应的计算。
多类回归
Multinomial Regression
如果目标类别数超过两个,这时就需要使用多类回归,如疗效可能是“无效”,“显效”,“痊愈”三类。
序数回归
Ordinal Regression
在统计学中,序数回归是一种用于预测序数变量的回归分析,即其值存在于任意范围内的变量,不同值之间的度量距离也不同。它可以被认为是介于回归和分类之间的一类问题。例如,病情的分级(1、2、3、4级),症状的感觉分级(不痛、微痛、较痛和剧痛),对药物剂量反应的分级(无效、微效、中效和高效)等等。不同级别之间的差异不一定相等,如不痛与微痛的差值不一定等于较痛与剧痛的差值。
聚类方差
Clustered Variance
Clustered Variance模块调整聚类的标准误差。例如,将一个数据集合复制100次,不应该增加参数估计的精度,但是在符合独立同分布假设(Independent Identically Distributed,IID)下执行这个过程实际上会提高精度。
稳健方差
Robust Variance
Robust Variance模块中的函数用于计算线性回归、逻辑回归、多类逻辑回归和Cox比例风险回归的稳健方差(Huber-White估计)。它们可用于计算具有潜在噪声异常值的数据集中数据的差异。
支持向量机
Support Vector Machines(SVM)
用于文本和超文本的分类、图像分类,比起传统的查询优化方案,支持向量机能够获取明显更高的搜索准确度。这同样也适用于图像分割系统。
线性回归
Linear Regression
应用广泛,例如经济学、金融学等。
表 2 支持的机器学习算法 - 其他监督学习
算法名称(中文)
算法名称(英文)
应用场景
决策树
Decision Tree
最为广泛的归纳推理算法之一,处理类别型或连续型变量的分类预测问题,可以用图形和if-then的规则表示模型,可读性较高。
随机森林
Random Forest
随机森林是一类专门为决策树分类器设计的组合方法。它组合多棵决策树作出的预测。
条件随机场
Conditional Random Field (CRF)
条件随机场(CRF)是一种判别的,无向概率的图形模型。线性链CRF是一种特殊类型的CRF,它假定当前状态仅取决于先前的状态。在分词、词性标注和命名实体识别等序列标注任务中取得了很好的效果。
朴素贝叶斯
Naive Bayes
通过计算概率来进行分类,可以用来处理多分类问题,比如:垃圾邮件过滤器。
神经网络
Neural Networks
拥有广泛的应用场景,譬如语音识别、图像识别、机器翻译等等。在模式识别的领域中算是标准监督学习算法,并在计算神经学中,持续成为被研究的课题。MLP已被证明是一种通用的函数近似方法,可以被用来拟合复杂的函数或解决分类问题。
k临近算法
k-Nearest Neighbors
K近邻分类方法通过计算每个训练样例到待分类样品的距离,取和待分类样品距离最近的K个训练样例,K个样品中哪个类别的训练样例占多数,则待分类元组就属于哪个类别。 可用于:文字识别,面部识别,基因模式识别,客户流失预测、欺诈侦测。
表 3 支持的机器学习算法 - 数据处理类算法
应用场景
数组操作
Array Operations
数组、向量操作运算,包括基础的加减乘除、幂运算、开方、cos、sin、绝对值、方差等。
主成成分分析
Dimensionality Reduction (PCA)
降维,计算主成分。
变量编码
Encoding Categorical Variables
当前支持one-hot和dummy编码技术。 当需要用一组特定的预测变量与其它预测变量组作比较时,通常使用哑编码(dummy coding),与之比较的变量组称为参照组。One-hot编码与哑编码类似,两者的区别是前者为每种分类值建立数字类型的0/1指示列。在每行数据中(对应一个数据点),只有一个分类编码列的值可以为1。
矩阵操作
Matrix Operations
1 | |
规范化和距离函数
Norms and Distance Functions
求范数,余弦相似度,向量间距离。
稀疏向量
Sparse Vectors
实现稀疏向量类型,如果向量中重复值较多,可以用来压缩储存节省空间。
透视图
Pivot
透视表或枢轴表,通常用来实现OLAP或报表系统中一类常见的行列转置需求。pivot函数能够对一个表中存储的数据执行基本行转列操作,并将汇总后的结果输出到另一个表中。使行列转置操作变得更为简单与灵活。
模式匹配
Path
是在一系列行上执行常规模式匹配,并提取有关模式匹配的有用信息。有用的信息可以是简单的匹配计数或更多涉及的内容,如聚合或窗口函数。
会话
Sessionize
会话化功能对包括事件序列的数据集执行面向时间的会话重建。定义的不活动时段表示一个会话结束和下一个会话的开始。 可以用于:网络分析,网络安全,制造,财务和运营分析。
共轭梯度法
Conjugate gradient
求解系数矩阵为对称正定矩阵的线性方程组的数值解的方法。
词干提取
Stemming
词干提取简单说就是找出单词中的词干部分,场景比如:搜索引擎建立网页主题概念。 在英文网站优化作用明显,对其他语言有借鉴意义。
训练集测试集分割
Train-Test Split
分割数据集,把一份数据集划分成训练集和测试集,train的部分用于训练,test部分用于验证。
交叉验证
Cross Validation
交叉验证。
预测指标
Prediction Metrics
用于评估模型预测的质量,包括均方误差,AUC值、混淆矩阵、修正R方等用于评价模型的函数。
小批量预处理
Mini-Batch Preprocessor
把数据打包成小份进行训练,优点是它可以比随机梯度下降(默认MADlib优化器)表现更好,会更快更平滑的收敛。
表 4 支持的机器学习算法 - 图类
应用场景
所有对间最短路径
All Pairs Shortest Path (APSP)
所有对最短路径(APSP)算法找到所有顶点对之间的最短路径的长度(总和权重),使得路径边缘的权重之和最小化。
广度优先算法
Breadth-First Search
广度优先算法遍历路径。
超链接诱导主题搜索
Hyperlink-Induced Topic Search (HITS)
HITS算法输出每个节点的authority评分和hub评分,其中authority评分给出页面内容的分数,hub评估出连接到其他页面的分数。
平均路径长度
Average Path Length
此函数计算每对顶点之间的最短路径的平均值。平均路径长度基于“可到达的目标顶点”,因此它忽略了未连接的顶点之间的无限长度路径。
中心性
Closeness Centrality
接近度度量是和的倒数,平均值的倒数,以及到所有可到达目标顶点(不包括源顶点)的最短距离的倒数之和。
图表直径
Graph Diameter
直径被定义为图中所有最短路径中最长的。
入度出度
In-Out Degree
计算图中每个点的入度出度,入度指指向此点的边的数量,出度指此点指向其他点的边的数量。
网页排名
PageRank
给定图形,给定图形,PageRank算法输出概率分布,该概率分布表示随机遍历图形的人将到达任何特定顶点的可能性。
单源最短路径
Single Source Shortest Path (SSSP)
给定图形和源顶点,单源最短路径(SSSP)算法找到从源顶点到图中的每个其他顶点的路径,使得路径边缘的权重之和最小化(每条边权值非负)。
弱连通分量
Weakly Connected Component
给定有向图,弱连通分量(WCC)是原始图的子图,其中所有顶点通过某个路径彼此连接,忽略边的方向。在无向图的情况下,弱连通分量也是强连通分量。该模块还包括许多在WCC输出上运行的辅助函数。
表 5 支持的机器学习算法 - 时间序列
应用场景
差分整合移动平均自回归模型
Autoregressive Integrated Moving Average model(ARIMA)
时间序列预测,用于理解和预测一系列数据的未来值。 比如:国际航空旅客数据,预测旅客人数。
表 6 支持的机器学习算法 - 采样
应用场景
采样函数
sample
抽样。
分层抽样
Stratified Sampling
分层随机抽样,又称类型随机抽样,它是先将总体各单位按一定标准分成各种类型(或层);然后根据各类型单位数与总体单位数的比例,确定从各类型中抽取样本单位的数量;最后,按照随机原则从各类型中抽取样本。
对称抽样
Balanced Sampling
一些分类算法仅在每个类中的样本数大致相同时才最佳地执行。高度偏斜的数据集在许多领域中是常见的(例如,欺诈检测),因此重新采样以抵消这种不平衡可以产生更好的决策边界。
表 7 支持的机器学习算法 - 统计学
应用场景
汇总统计函数
Summary
生成任何数据表的摘要统计信息。
协方差和相关系数
Correlation and Covariance
描述性统计,求Pearson系数,相关系数,另一个输出协方差。了解数据从统计学上反映的量的特征,以便我们更好地认识这些将要被挖掘的数据。
统计频率算法
CountMin (Cormode-Muthukrishnan)
统计一个实时的数据流中元素出现的频率,并且准备随时回答某个元素出现的频率,不需要的精确的计数。
基数估计算法
FM (Flajolet-Martin)
获取指定列中的不同值的数量。 找出这个数字集合中不重复的数字的个数。
最频繁值
MFV (Most Frequent Values)
计算频繁值的场景。
假设检验
Hypothesis Tests
包含F-test,chi2-test等。
概率函数
Probability Functions
概率函数模块为各种概率分布提供累积分布,密度、质量和分位数函数。
表 8 支持的机器学习算法 - 其他算法
应用场景
k-聚类算法
K-means
聚类场景。
隐含狄利克雷分布
1 | |
LDA 在主题模型中占有非常重要的地位,常用来文本分类。
关联规则算法
Apriori Algorithm
关联规则算法,关联规则挖掘的目标是发现数据项集之间的关联关系。比如经典的“啤酒和尿布”。
二、环境部署
DeepSQL环境包括编译数据库和安装算法库两个部分。
2.1 前提条件
环境中安装python2.7.12以上版本Python。
数据库需要开启对PL/Python存储过程的支持。
安装算法库需要拥有管理员权限的用户。
2.2 操作步骤
检查部署Python环境。 安装前,请查看系统安装的python版本,当前DeepSQL需要python2.7.12以上版本的环境。
如果当前系统python2版本高于2.7.12,可以直接安装python-devel包。
如果版本过低,或者无法安装python-devel包,可以下载最新python2源码,手动配置编译python2,并配置环境变量。
算法库中,部分算法调用了python包,如numpy,pandas等。用户可以安装以下python库:
1 | |
编译部署数据库。 数据库需要开启对PL/Python存储过程的支持。默认编译数据库,不包含此模块。因此需要编译数据库时,在configure阶段,加入–with-python参数; 其他编译保持步骤不变; 编译完成后,需要重新gs_initdb; 默认PL/Python存储过程模块不被加载,请执行“CREATE EXTENSION plpythonu”来加载模块。
算法库编译和安装。 算法库使用开源的MADlib机器学习框架。源码包和相应patch可以从第三方库的代码仓库里获取。安装命令如下:
1 | |
./configure -DCMAKE_INSTALL_PREFIX={YOUR_MADLIB_INSTALL_FOLDER} -DPOSTGRESQL_EXECUTABLE=$GAUSSHOME/bin/ -DPOSTGRESQL_9_2_EXECUTABLE=$GAUSSHOME/bin/ -DPOSTGRESQL_9_2_CLIENT_INCLUDE_DIR=$GAUSSHOME/bin/ -DPOSTGRESQL_9_2_SERVER_INCLUDE_DIR=$GAUSSHOME/bin/ # 以上均为configure命令。 make make install
其中, {YOUR_MADLIB_INSTALL_FOLDER}需要改为用户的实际安装路径。
1 | |
a。进入{YOUR_MADLIB_INSTALL_FOLDER}路径。
1 | |
./madpack -s
命令中参数说明如下:
-s:schema的名称。
-p:数据库平台,使用opengauss即可。
-c:连接数据库的参数。包括用户名、‘@’、IP地址、端口号和目标数据库名称。
install为安装的命令,除此之外,还有reinstall(重新安装),uninstall(卸载)等命令可用。
三、使用指导
3.1 PL/Python存储过程
当前PL/Python存储过程优先支持python2;默认版本也是python2。
PL/Python中的函数通过标准的CREATE FUNCTION声明:
CREATE FUNCTION funcname (argument-list)
1 | |
$$ LANGUAGE plpythonu;
函数体是一个简单的Python脚本,当函数被调用的时候,它的参数作为列表args的元素传递;命名参数也会被当做普通的变量传递到Python脚本中。命名参数的使用通常更易读。 结果将使用return或yield(结果集语句的情况) 照常从Python代码中返回。如果没有提供返回值,Python返回缺省的None。 PL/Python将Python中的None认为SQL空值。
例如,返回两个整数中较大者的函数定义如下。
CREATE FUNCTION pymax(a integer, b integer) RETURNS integer AS $$
if a > b:
return a
return b
1 | |
CREATE FUNCTION quote(t text, how text) RETURNS text AS $$
if how == “literal”:
return plpy.quote_literal(t)
elif how == “nullable”:
return plpy.quote_nullable(t)
elif how == “ident”:
return plpy.quote_ident(t)
else
raise plpy.Error("unrecognized quote type %s" % how)
1 | |
referenced column: quote
兼容性为B时,返回结果如下:
1 | |
可以看到,在兼容性“A”中,空串被当为NULL了。
3.3 触发器
当前PL/Python存储过程中,不支持触发器功能。
3.4 匿名代码块
PL/Python也支持DO声明的匿名代码块:
DO $$
PL/Python code
1 | |
pip install xgboost
pip install scikit-learn
1 | |
CREATE database test1 dbcompatibility=’B’;
1 | |
4.1 分类算法
以svm分类房价为例子:
数据集准备。
DROP TABLE IF EXISTS houses;
CREATE TABLE houses (id INT, tax INT, bedroom INT, bath FLOAT, price INT, size INT, lot INT);
INSERT INTO houses VALUES
(1 , 590 , 2 , 1 , 50000 , 770 , 22100),
(2 , 1050 , 3 , 2 , 85000 , 1410 , 12000),
(3 , 20 , 3 , 1 , 22500 , 1060 , 3500),
(4 , 870 , 2 , 2 , 90000 , 1300 , 17500),
(5 , 1320 , 3 , 2 , 133000 , 1500 , 30000),
(6 , 1350 , 2 , 1 , 90500 , 820 , 25700),
(7 , 2790 , 3 , 2.5 , 260000 , 2130 , 25000),
(8 , 680 , 2 , 1 , 142500 , 1170 , 22000),
(9 , 1840 , 3 , 2 , 160000 , 1500 , 19000),
(10 , 3680 , 4 , 2 , 240000 , 2790 , 20000),
(11 , 1660 , 3 , 1 , 87000 , 1030 , 17500),
(12 , 1620 , 3 , 2 , 118600 , 1250 , 20000),
(13 , 3100 , 3 , 2 , 140000 , 1760 , 38000),
(14 , 2070 , 2 , 3 , 148000 , 1550 , 14000),
(15 , 650 , 3 , 1.5 , 65000 , 1450 , 12000);
模型训练。 训练前配置相应schema和兼容性参数:
1 | |
DROP TABLE IF EXISTS houses_svm, houses_svm_summary;
SELECT madlib.svm_classification(‘public.houses’,’public.houses_svm’,’price < 100000’,’ARRAY[1, tax, bath, size]’);
查看模型。
1 | |
-[ RECORD 1 ]——+—————————————————————–
coef | {.113989576847,-.00226133300602,-.0676303607996,.00179440841072}
loss | .614496714256667
norm_of_gradient | 108.171180769224
num_iterations | 100
num_rows_processed | 15
num_rows_skipped | 0
dep_var_mapping | {f,t}
进行预测。
1 | |
SELECT *, price < 100000 AS actual FROM houses JOIN houses_pred USING (id) ORDER BY id;
id | tax | bedroom | bath | price | size | lot | prediction | decision_function | actual
—-+——+———+——+——–+——+——-+————+——————-+——–
1 | 590 | 2 | 1 | 50000 | 770 | 22100 | t | .09386721875 | t
2 | 1050 | 3 | 2 | 85000 | 1410 | 12000 | t | .134445058042 | t
3 | 20 | 3 | 1 | 22500 | 1060 | 3500 | t | 1.9032054712902 | t
4 | 870 | 2 | 2 | 90000 | 1300 | 17500 | t | .3441000739464 | t
5 | 1320 | 3 | 2 | 133000 | 1500 | 30000 | f | -.3146180966186 | f
6 | 1350 | 2 | 1 | 90500 | 820 | 25700 | f | -1.5350254452892 | t
7 | 2790 | 3 | 2.5 | 260000 | 2130 | 25000 | f | -2.5421154971142 | f
8 | 680 | 2 | 1 | 142500 | 1170 | 22000 | t | .6081106124962 | f
9 | 1840 | 3 | 2 | 160000 | 1500 | 19000 | f | -1.490511259749 | f
10 | 3680 | 4 | 2 | 240000 | 2790 | 20000 | f | -3.336577140997 | f
11 | 1660 | 3 | 1 | 87000 | 1030 | 17500 | f | -1.8592129109042 | t
12 | 1620 | 3 | 2 | 118600 | 1250 | 20000 | f | -1.4416201011046 | f
13 | 3100 | 3 | 2 | 140000 | 1760 | 38000 | f | -3.873244660547 | f
14 | 2070 | 2 | 3 | 148000 | 1550 | 14000 | f | -1.9885277913972 | f
15 | 650 | 3 | 1.5 | 65000 | 1450 | 12000 | t | 1.1445697772786 | t
(15 rows)
查看误分率
1 | |
DROP TABLE IF EXISTS houses_svm_gaussian, houses_svm_gaussian_summary, houses_svm_gaussian_random;
SELECT madlib.svm_classification( ‘public.houses’,’public.houses_svm_gaussian’,’price < 100000’,’ARRAY[1, tax, bath, size]’,’gaussian’,’n_components=10’, ‘’, ‘init_stepsize=1, max_iter=200’ );
进行预测,并查看训练结果。
1 | |
count
——-+
0
1 | |
DROP TABLE IF EXISTS houses_linregr, houses_linregr_summary;
SELECT madlib.linregr_train( ‘public.houses’, ‘public.houses_linregr’, ‘price’, ‘ARRAY[1, tax, bath, size]’);
1 | |
\x ON
1 | |
\x OFF
返回结果如下。
1 | |
coef | {-12849.4168959872,28.9613922651775,10181.6290712649,50.516894915353}
1 | |
std_err | {33453.0344331377,15.8992104963991,19437.7710925915,32.9280231740856}
t_stats | {-.384103179688204,1.82156166004197,.523806408809163,1.53416118083608}
p_values | {.708223134615411,.0958005827189556,.610804093526516,.153235085548177}
1 | |
variance_covariance | {
{1119105512.7847,217782.067878005,-283344228.394538,-616679.693190829},{217782.067878005,252.784894408806,-46373.1796964038,-369.864520095145},{-283344228.394538,-46373.1796964038,377826945.047986,-209088.217319699},{-616679.693190829,-369.864520095145,-209088.217319699,1084.25471015312}}
1 | |
id | tax | bedroom | bath | price | size | lot | predict | residual
—-+——+———+——+——–+——+——-+——————+——————-
1 | 590 | 2 | 1 | 50000 | 770 | 22100 | 53317.4426965543 | -3317.44269655428
2 | 1050 | 3 | 2 | 85000 | 1410 | 12000 | 109152.124955627 | -24152.1249556268
3 | 20 | 3 | 1 | 22500 | 1060 | 3500 | 51459.3486308555 | -28959.3486308555
4 | 870 | 2 | 2 | 90000 | 1300 | 17500 | 98382.215907206 | -8382.21590720599
5 | 1320 | 3 | 2 | 133000 | 1500 | 30000 | 121518.221409606 | 11481.7785903935
6 | 1350 | 2 | 1 | 90500 | 820 | 25700 | 77853.9455638568 | 12646.0544361432
7 | 2790 | 3 | 2.5 | 260000 | 2130 | 25000 | 201007.926371722 | 58992.0736282778
8 | 680 | 2 | 1 | 142500 | 1170 | 22000 | 76130.7259665615 | 66369.2740334385
9 | 1840 | 3 | 2 | 160000 | 1500 | 19000 | 136578.145387499 | 23421.8546125013
10 | 3680 | 4 | 2 | 240000 | 2790 | 20000 | 255033.901596231 | -15033.9015962306
11 | 1660 | 3 | 1 | 87000 | 1030 | 17500 | 97440.5250982859 | -10440.5250982859
12 | 1620 | 3 | 2 | 118600 | 1250 | 20000 | 117577.415360321 | 1022.58463967856
13 | 3100 | 3 | 2 | 140000 | 1760 | 38000 | 186203.892319614 | -46203.8923196141
14 | 2070 | 2 | 3 | 148000 | 1550 | 14000 | 155946.739425522 | -7946.73942552213
15 | 650 | 3 | 1.5 | 65000 | 1450 | 12000 | 94497.4293105374 | -29497.4293105374
1 | |
DROP TABLE IF EXISTS km_result;
CREATE TABLE km_result AS SELECT * FROM madlib.kmeanspp( ‘public.km_sample’, – Table of source data
‘points’, – Column containing point co-ordinates
2, – Number of centroids to calculate
‘madlib.squared_dist_norm2’, – Distance function
‘madlib.avg’, – Aggregate function
20, – Number of iterations
0.001 – Fraction of centroids reassigned to keep iterating
);
kmeans执行完后,不会自动创建表保存内容,所以需要用户自行创建table。
1 | |
DROP TABLE IF EXISTS km_points_silh;
SELECT * FROM madlib.simple_silhouette_points(‘public.km_sample’, – Input points table
‘public.km_points_silh’, – Output table
‘pid’, – Point ID column in input table
‘points’, – Points column in input table
‘public.km_result’, – Centroids table
‘centroids’, – Column in centroids table containing centroids
‘madlib.squared_dist_norm2’ – Distance function
);
SELECT * FROM km_points_silh ORDER BY pid;
pid | centroid_id | neighbor_centroid_id | silh
—–+————-+———————-+——————
1 | 0 | 1 | .793983543638996
2 | 0 | 1 | .688301735667703
3 | 0 | 1 | .996324103148159
4 | 0 | 1 | .869765755931474
5 | 1 | 0 | 1
6 | 0 | 1 | .888416176253661
7 | 0 | 1 | .980107240092519
8 | 0 | 1 | .975880363039906
9 | 0 | 1 | .712384473959954
10 | 0 | 1 | .712198411442872
(10 rows)
1 | |
DROPTABLEIFEXISTS dt_golf CASCADE;
DROPTABLEIFEXISTS train_output,train_output_summary;
CREATETABLE dt_golf (
1 | |
“Cont_features”double precision[],
cat_features text[],
1 | |
class integer
) ;
INSERTINTO dt_golf (id,”OUTLOOK”,temperature,humidity,”Cont_features”,cat_features, windy,class) VALUES
(1, ‘sunny’, 85, 85,ARRAY[85, 85], ARRAY[‘a’, ‘b’], false, 0),
(2, ‘sunny’, 80, 90, ARRAY[80, 90], ARRAY[‘a’, ‘b’], true, 0),
(3, ‘overcast’, 83, 78, ARRAY[83, 78], ARRAY[‘a’, ‘b’], false, 1),
(4, ‘rain’, 70, NULL, ARRAY[70, 96], ARRAY[‘a’, ‘b’], false, 1),
(5, ‘rain’, 68, 80, ARRAY[68, 80], ARRAY[‘a’, ‘b’], false, 1),
(6, ‘rain’, NULL, 70, ARRAY[65, 70], ARRAY[‘a’, ‘b’], true, 0),
(7, ‘overcast’, 64, 65, ARRAY[64, 65], ARRAY[‘c’, ‘b’], NULL , 1),
(8, ‘sunny’, 72, 95, ARRAY[72, 95], ARRAY[‘a’, ‘b’], false, 0),
(9, ‘sunny’, 69, 70, ARRAY[69, 70], ARRAY[‘a’, ‘b’], false, 1),
(10, ‘rain’, 75, 80, ARRAY[75, 80], ARRAY[‘a’, ‘b’], false, 1),
(11, ‘sunny’, 75, 70, ARRAY[75, 70], ARRAY[‘a’, ‘d’], true, 1),
(12, ‘overcast’, 72, 90, ARRAY[72, 90], ARRAY[‘c’, ‘b’], NULL, 1),
(13, ‘overcast’, 81, 75, ARRAY[81, 75], ARRAY[‘a’, ‘b’], false, 1),
(15, NULL, 81, 75, ARRAY[81, 75], ARRAY[‘a’, ‘b’], false, 1),
(16, ‘overcast’, NULL, 75, ARRAY[81, 75], ARRAY[‘a’, ‘d’], false,1),
(14, ‘rain’, 71, 80, ARRAY[71, 80], ARRAY[‘c’, ‘b’], true, 0);
1 | |
'train_output', -- output model table
'id' , -- id column
'class', -- response
'"OUTLOOK", temperature', -- features
NULL, -- exclude columns
1, --weight
10, -- num of trees
NULL, -- num of random features
10, -- max depth
1, -- min split
1, -- min bucket
8, -- number of bins per continuous variable
1 | |
TRUE
);
1 | |
iteration | cat_levels_in_text | cat_n_levels | tree_depth
———–+———————–+————–+————
1 | |
另一张表train_output_summary,内容是对gdbt训练的整体描述:
SELECT * from train_output_summary;
1 | |
id | test_prediction | class
—-+—————–+——-
1 | 1.0 | 0
2 | 1.0 | 0
3 | 1.0 | 1
4 | 1.0 | 1
5 | 1.0 | 1
6 | 1.0 | 0
7 | 1.0 | 1
8 | 0.0 | 0
9 | 1.0 | 1
10 | 1.0 | 1
11 | 1.0 | 1
12 | 1.0 | 1
13 | 1.0 | 1
15 | 0.0 | 1
16 | 1.0 | 1
14 | 0.0 | 0
(16 rows)
1 | |
当is_clasification设为FALSE时,模型为回归任务。默认状态下gbdt提供回归计算支持。方法生成两个表,其中一张表记录每棵树的集体信息和模型的二进制,一张表记录方法的参数信息。
预测。
1 | |
4.6 xgboost算法
新增的xgboost支持分类和回归两种操作。下面以分类iris花为例,展示xgboost算法。
xgboost支持grid search方式,可以同时训练多组参数。
准备数据。
1 | |
执行分类训练操作。
select madlib.xgboost_sk_Classifier(‘public.iris’, ‘public.iris_model_xgbc’, ‘id’, ‘label’, ‘a,b,c,d’, NULL,
$${‘booster’: [‘gbtree’], ‘eta’: (0.1, 0.9), ‘max_depth’: (5,1), ‘objective’: (‘multi:softmax’,)}$$, – 训练参数组合,如果有多个参数,请用元组或者列表的方式传入
TRUE); – 是否评估模型,多分类评价为精确度和kappa值;二分类评价指标为precision, recall, fscore和support;回归评价指标为mae, mse, R2squared和rmse
1 | |
查看模型结果如下。
1 | |
1 | 2020-12-14 20:15:05.904184+08 | public.iris | integer | {‘acc’: 1.0, ‘kappa’: 1.0} | {a,b,c,d} | (‘objective = multi:softmax’, ‘eta = 0.1’, ‘max_depth = 5’, ‘booster = gbtree’)
2 | 2020-12-14 20:15:05.904184+08 | public.iris | integer | {‘acc’: 1.0, ‘kappa’: 1.0} | {a,b,c,d} | (‘objective = multi:softmax’, ‘eta = 0.1’, ‘max_depth = 1’, ‘booster = gbtree’)
3 | 2020-12-14 20:15:05.904184+08 | public.iris | integer | {‘acc’: 1.0, ‘kappa’: 1.0} | {a,b,c,d} | (‘objective = multi:softmax’, ‘eta = 0.9’, ‘max_depth = 5’, ‘booster = gbtree’)
4 | 2020-12-14 20:15:05.904184+08 | public.iris | integer | {‘acc’: 1.0, ‘kappa’: 1.0} | {a,b,c,d} | (‘objective = multi:softmax’, ‘eta = 0.9’, ‘max_depth = 1’, ‘booster = gbtree’)
(4 rows)
结果表中,记录着训练时间,特征,结果类型,所用参数等。 在本示例函数输入中,eta选择为2种,max_depth选择为2种,总共4种参数组合。所以在结果中,有4行结果;在metrics列中,记录4种参数组合的训练后的评价结果。用户可以输入多种参数组合,训练后,用户可以选择合适的模型留下。
预测结果。
SELECT madlib.xgboost_sk_predict(‘public.iris’, ‘public.iris_model_xgbc’, ‘public.iris_xgbc_out’, ‘id’);
select t1.id, prediction, label from iris as t1, iris_xgbc_out as t2 where t1.id = t2.id and prediction <> label;
查看结果,预测和训练结果的对比,当前不匹配的行数为0,证明分类准确性较高。
1 | |
4.7 prophet算法
新增facebook的prophet时序预测算法。下面以时序数据为例,展示prophet算法使用。
准备数据。
1 | |
执行训练操作:
select madlib.prophet_fit(‘public.ts_data’, ‘public.prophet_model’,
$${‘ds’: ‘date’, ‘y’: ‘value’}$$, – 列名映射, prophet要求时间列名必须为’ds’, 时序值列名’y’
$${‘growth’: ‘linear’, ‘changepoints’: [‘2016-11-30 05:40:00’]}$$ – 训练参数组合,如果有多个参数,请用元组方式传入
1 | |
id | y_type | params
—-+——————+—————————————————————
1 | |
ds | yhat | yhat_lower | yhat_upper
————+—————+—————+—————
2016-12-02 | 20.6943848045 | 17.7671496048 | 23.4160694837
2016-12-02 | 20.7408355633 | 17.9264413164 | 23.6426403933
2016-12-02 | 20.7872863221 | 17.9298207895 | 23.4548814727
2016-12-02 | 20.833737081 | 18.234443228 | 23.5317342873
2016-12-02 | 20.8801878398 | 18.2471709649 | 23.8345735574
2016-12-02 | 20.9266385986 | 18.1780101465 | 23.696087927
2016-12-02 | 20.9730893575 | 18.4292088648 | 23.7209823631
2016-12-02 | 21.0195401163 | 18.2623494126 | 23.7341427068
2016-12-02 | 21.0659908751 | 18.1173966769 | 23.7919478206
2016-12-02 | 21.112441634 | 18.5018042056 | 23.9508963879
1 | |
本文标题: 前沿科技探究DeepSQL库
发布时间: 2019年05月22日 00:00
最后更新: 2026年09月16日 05:40
原始链接: https://haoxiang.eu.org/fc9dcd4a/
版权声明: 本文著作权归作者所有,均采用CC BY-NC-SA 4.0许可协议,转载请注明出处!

