墨墨导读:XGBoost是一个高效、可扩展的机器学习算法,用于回归和分类(regression and classification),使得XGBoost Gradient Boosting开源包可用。

Oracle 20c数据库中引入的一个新的机器学习算法叫做XGBoost。XGBoost是一个开源软件库,它在大多数常用的数据科学、机器学习和软件开发语言中提供了一个梯度提升框架。

该算法是在之前的决策树、Bagging、随机森林、Boosting和梯度提升等工作的基础上发展而来。XGBoost 是一个高效、可扩展的机器学习算法,经过多年的研究、开发和验证,XGBoost可以用于分类的典型用例,包括分类、回归和排名问题(regression and classification)。

OML4SQL XGBoost (Oracle Machine Learning for SQL XGBoost) 是一个可扩展的梯度树提升系统,支持分类和回归。它提供了开源的梯度提升框架。通过准备训练数据,调用XGBoost,构建和持久化模型,并应用该模型进行预测,使得XGBoost Gradient Boosting开源包在数据库中可用。

你可以将XGBoost作为一个独立的预测器使用,也可以将其整合到实际的生产流水线中,用于广告点击率预测、危害风险预测、网页文本分类等多种问题。

OML4SQL XGBoost算法需要三种类型的参数:通用参数、助推器参数、任务参数。用户通过模型设置表来设置参数。该算法支持大部分开源项目的设置。

通过XGBoost,OML4SQL支持多种不同的分类和回归规范、排名模型和生存模型。在分类机器学习函数下支持二进制和多类模型,而在回归机器学习函数下支持回归、排名、计数和存活模型。

为什么 XGBoost 如此受到欢迎?

XGBoost 是基于决策树的集成机器学习算法,它以梯度提升(Gradient Boost)为框架。在非结构数据(图像、文本等)的预测问题中,人工神经网络的表现要优于其他算法或框架。但在处理中小型结构数据或表格数据时,现在普遍认为基于决策树的算法是最好的。下图列出了近年来基于树的算法的演变过程:

XGBoost 算法最初是华盛顿大学的一个研究项目。陈天奇和 Carlos Guestrin 在 SIGKDD 2016 大会上发表的论文《XGBoost: A Scalable Tree Boosting System》在整个机器学习领域引起轰动。自发表以来,该算法不仅多次赢得 Kaggle 竞赛,还应用在多个前沿工业应用中,并推动其发展。许多数据科学家合作参与了 XGBoost 开源项目,GitHub 上的这一项目约有 350 个贡献者,以及 3600 多条提交。和其他算法相比,XGBoost 算法的不同之处有以下几点:

  1. 应用范围广泛:该算法可以解决回归、分类、排序以及用户自定义的预测问题;

  2. 可移植性:该算法可以在 Windows、Linux 和 OS X 上流畅地运行;

  3. 语言:支持包括 C++、Python、R、Java、Scala 和 Julia 在内的几乎所有主流编程语言;

  4. 云集成:支持 AWS、Azure 和 Yarn 集群,也可以很好地配合 Flink、 Spark 等其他生态系统。

算法演进过程:

  1. 常规的机器学习模型(例如决策树)仅使用训练数据集来训练单个模型,并且仅将此模型用于预测。尽管决策树的创建非常简单(并且非常快),具有模型可解释性,但其预测能力可能不如大多数其他算法好。

  2. 为了克服此限制,可以使用集成方法创建多个决策树,并将其组合以用于预测目的。

  3. Bagging算法(英语:Bootstrap aggregating,引导聚集算法,又称装袋算法)是一种使用多数表决将来自多个DT模型的预测进行合并的方法。

  4. 在装袋方法的基础上,Random Forest使用功能的不同子集和训练数据的子集,以不同的方式将它们组合以创建DT模型的集合,并作为一个模型呈现给用户。

  5. Boosting通过建立顺序模型与每个后续模型的方式,采用一种更迭代的方法来完善模型,其重点是最大程度地减少先前模型的误差。

  6. 梯度提升使用梯度下降算法来最小化后续模型中的误差。

  7. 借助XGBoost,可以在上述步骤的基础上进行并行处理,树修剪,数据丢失处理,正则化以及实现更好的缓存,内存和硬件优化。通常称为梯度增强。

通过以下几个示意图,我们可以大致了解一下以上提到的各种 ML 算法。

  1. 决策树,以非常快速的、可解释的模型,来进行判断选择,支持决策

  2. 多决策树,用于组合预测,增加准确性

  3. Bagging 算法,也就是所谓的 装袋算法

    Bagging 特点在“随机采样”。随机采样(bootsrap)就是从训练集采集固定个数的样本,但是每采集一个样本后,都将样本放回。也就是说,之前采集到的样本在放回后有可能继续被采集到。

  4. Random Forest ,随机森林 算法
    RF在实际中使用非常频繁,其本质上和bagging并无不同,只是RF更具体一些。一般而言可以将RF理解为bagging和DT(CART)的结合。随机森林是由很多决策树构成的,不同决策树之间没有关联。

    RF中的基学习器使用的是CART树,由于算法本身能降低方差(variance),所以会选择完全生长的CART树。抽样方法使用bootstrap,除此之外,RF认为随机程度越高,算法的效果越好。所以RF中还经常随机选取样本的特征属性、甚至于将样本的特征属性通过映射矩阵映射到随机的子空间来增大子模型的随机性、多样性。RF预测的结果为子树结果的平均值。RF具有很好的降噪性,相比单棵的CART树,RF模型边界更加平滑,置信区间也比较大。一般而言,RF中,树越多模型越稳定。

  5. Boosting
    Boosting 和 bagging 最本质的差别在于他对基础模型不是一致对待的,而是经过不停的考验和筛选来挑选出「精英」,然后给精英更多的投票权,表现不好的基础模型则给较少的投票权,然后综合所有人的投票得到最终结果。大部分情况下,经过 boosting 得到的结果偏差(bias)更小。

  6. 梯度提升树算法
    梯度提升树算法实际上是提升算法的扩展版,在原始的提升算法中,如果损失函数为平方损失或指数损失,求解损失函数的最小值问题会非常简单,但如果损失函数为更一般的函数(如绝对值损失函数或Huber损失函数等),目标值的求解就会相对复杂很多。

    梯度提升算法,是在第????轮基础模型中,利用损失函数的负梯度值作为该轮基础模型损失值的近似,并利用这个近似值构建下一轮基础模型。利用损失函数的负梯度值近似残差的计算就是梯度提升算法在提升算法上的扩展,这样的扩展使得目标函数的求解更为方便。

  7. XGBoost
    就是在上述算法的基础上进行并行处理,树修剪,数据丢失处理,正则化以及实现更好的缓存,内存和硬件优化。因而通常称为梯度增强。

下面的例子使用一组客户的人口统计学和购买数据来预测客户对亲情卡计划的反应。这些数据来自于SH Schema中的基表,展示了 Oracle 数据库在机器学习方面的增强。

这个例子使用了XGBoost算法和CLASSIFICATION机器学习功能。

创建和填充一个设置表

-- Create the setting table xgc_sh_settings.
CREATE TABLE xgc_sh_settings(setting_name VARCHAR2(30), setting_value VARCHAR2(128)); -- Populate the settings table.
BEGININSERT INTO xgc_sh_settings (setting_name, setting_value) VALUES(dbms_data_mining.algo_name, dbms_data_mining.algo_xgboost);-- For 0/1 target, choose binary:logistic as the objective.INSERT INTO xgc_sh_settings (setting_name, setting_value) VALUES(dbms_data_mining.xgboost_objective, 'binary:logistic');INSERT INTO xgc_sh_settings (setting_name, setting_value) VALUES(dbms_data_mining.xgboost_max_depth, '3');INSERT INTO xgc_sh_settings (setting_name, setting_value) VALUES(dbms_data_mining.xgboost_eta, '1');-- Choose error and auc as eval_metric to evaluate the training dataset.INSERT INTO xgc_sh_settings (setting_name, setting_value) VALUES(dbms_data_mining.xgboost_eval_metric, 'error,auc');INSERT INTO xgc_sh_settings (setting_name, setting_value) VALUES(dbms_data_mining.xgboost_num_round, '10');
END;
/

创建一个模型并显示模型设置:

-- Create a model.BEGIN  DBMS_DATA_MINING.CREATE_MODEL(    model_name          => 'XGC_SH_MODEL',    mining_function     => dbms_data_mining.classification,    data_table_name     => 'mining_data_build_v',    case_id_column_name => 'cust_id',    target_column_name  => 'affinity_card',    settings_table_name => 'xgc_sh_settings');END;/
-- Display the model settings.SELECT setting_name, setting_value  FROM user_mining_model_settings  WHERE model_name = 'XGC_SH_MODEL'  ORDER BY setting_name;-- The query produces the following output.
SETTING_NAME                   SETTING_VALUE------------------------------ ------------------------------ALGO_NAME                      ALGO_XGBOOSTCLAS_WEIGHTS_BALANCED          OFFODMS_DETAILS                   ODMS_ENABLEODMS_MISSING_VALUE_TREATMENT   ODMS_MISSING_VALUE_AUTOODMS_SAMPLING                  ODMS_SAMPLING_DISABLEPREP_AUTO                      ONbooster                        gbtreeeta                            1eval_metric                    error,aucmax_depth                      3ntree_limit                    0num_round                      10objective                      binary:logistic
13 rows selected.

显示 TOP 10 属性的重要性排列:

-- Show the atribute importance of the top 10 important features.SELECT *   FROM(SELECT attribute_name, attribute_value, gain, cover, frequency         FROM DM$VIXGC_SH_MODEL         ORDER BY gain desc)  WHERE rownum <= 10;The query produces the following output.
ATTRIBUTE_NAME            ATTRIBUTE_VALUE   GAIN  COVER FREQUENCY------------------------- --------------- ------ ------ ---------YRS_RESIDENCE                               .259   .143      .117HOUSEHOLD_SIZE            2                 .110   .044      .033AGE                                         .093   .156      .250HOUSEHOLD_SIZE            9+                .085   .031      .033CUST_MARITAL_STATUS       NeverM            .073   .067      .033BOOKKEEPING_APPLICATION                     .055   .035      .033EDUCATION                 Bach.             .053   .047      .033OCCUPATION                Prof.             .048   .032      .033EDUCATION                 Masters           .045   .052      .050OCCUPATION                Other             .029   .055      .033
10 rows selected.

使用XGBoost进行回归

这个例子使用了XGBoost算法和REGRESSION机器学习函数。

创建和填充一个设置表:

-- Create the setting table xgr_sh_settings.CREATE TABLE xgr_sh_settings(setting_name VARCHAR2(30),                              setting_value VARCHAR2(128));
-- Populate the settings table.BEGIN  INSERT INTO xgr_sh_settings (setting_name, setting_value) VALUES    (dbms_data_mining.algo_name, dbms_data_mining.algo_xgboost);  -- For 0/1 target, choose binary:logistic as the objective.  INSERT INTO xgr_sh_settings (setting_name, setting_value) VALUES    (dbms_data_mining.xgboost_booster, 'gblinear');  INSERT INTO xgr_sh_settings (setting_name, setting_value) VALUES    (dbms_data_mining.xgboost_alpha, '0.0001');  INSERT INTO xgr_sh_settings (setting_name, setting_value) VALUES    (dbms_data_mining.xgboost_lambda, '1');  INSERT INTO xgr_sh_settings (setting_name, setting_value) VALUES    (dbms_data_mining.xgboost_num_round, '100'); END; /

创建一个模型并显示模型设置:

-- Create a model.BEGIN  DBMS_DATA_MINING.CREATE_MODEL(    model_name          => 'XGR_SH_MODEL',    mining_function     => dbms_data_mining.regression,    data_table_name     => 'mining_data_build_v',    case_id_column_name => 'cust_id',    target_column_name  => 'age',    settings_table_name => 'xgr_sh_settings'); END; /
-- Display the model settings.SELECT setting_name, setting_value  FROM user_mining_model_settings  WHERE model_name = 'XGR_SH_MODEL'  ORDER BY setting_name;The query produces the following output.
SETTING_NAME                   SETTING_VALUE------------------------------ ------------------------------ALGO_NAME                      ALGO_XGBOOSTODMS_DETAILS                   ODMS_ENABLEODMS_MISSING_VALUE_TREATMENT   ODMS_MISSING_VALUE_AUTOODMS_SAMPLING                  ODMS_SAMPLING_DISABLEPREP_AUTO                      ONalpha                          0.0001booster                        gblinearlambda                         1ntree_limit                    0num_round                      100
10 rows selected.

显示属性的重要性:

-- Show the atribute importance of the top 5 important features.SSELECT *   FROM(SELECT attribute_name, attribute_value, weight        FROM DM$VIXGR_SH_MODEL        ORDER BY abs(weight) desc)  WHERE rownum <= 5;The query produces the following output.
ATTRIBUTE_NAME         ATTRIBUTE_VALUE WEIGHT---------------------- --------------- ------YRS_RESIDENCE                           3.109HOME_THEATER_PACKAGE                    2.332Y_BOX_GAMES                            -1.804CUST_MARITAL_STATUS    NeverM          -1.131HOUSEHOLD_SIZE         1                -.696
5 rows selected.

参考:https://docs.oracle.com/en/database/oracle/oracle-database/20/dmcon/xgboost.html#GUID-EC483612-5A6F-4B25-867F-562B0AFCD265

墨天轮原文链接:https://www.modb.co/db/24707(复制到浏览器中打开或者点击“阅读原文”)

推荐阅读:144页!分享珍藏已久的数据库技术年刊

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

Oracle 20c 新特性:XGBoost 机器学习算法和 AutoML 的支持相关推荐

  1. 资源放送丨《 先睹为快!Oracle 20c新特性解析》PPT视频

    前段时间,墨天轮邀请到了云和恩墨CTO.ACDU核心专家."Oracle百科全书" 杨廷琨 老师分享<先睹为快!Oracle 20c新特性解析>,在这里我们共享一下PP ...

  2. Oracle 20c 新特性:表空间缺省加密算法 TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM

    导读:在 Oracle 20c中,新增加的初始化化参数,让我们可以获得设置表空间缺省加密算法的能力,这个新的参数是:TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM . ...

  3. Oracle 20c 新特性知多少?ANSI SQL 全支持之 EXCEPT 运算符增强

    导读:在 Oracle 20c 中,Oracle 增加了对于集合运算符的增强,全部支持了 ANSI SQL 标准的关键字,新增了 EXCEPT 关键字支持. 在 Oracle 20c 中,Oracle ...

  4. Oracle 20c 新特性:数据泵 expdp / impdp 的EXCLUDE和CHECKSUM增强

    墨墨导读:随着 Oracle 的数据泵技术不断增强,这个逻辑数据备份和迁移工具,已经成为了 Oracle 数据库用户的首选工具之一,在 20c 中, expdp / impdp 都获得了大量的特性增强 ...

  5. Oracle 20c 新特性:持久化内存数据库 - Persistent Memory Database

    导读:随着硬件技术的不断进步,PMEM (Persistent Memory)已经足够成熟,开始进入到数据库加速领域,在 DRAM 和 Flash 之间提供能更强的 IO 层支撑.自 Oracle 2 ...

  6. Oracle 20c 新特性:缺省的只读 Oracle HOME 支持

    墨墨导读:在 20c 之前,缺省的 ORACLE_HOME 布局将 ORACLE_HOME.ORACLE_BASE_HOME 和 ORACLE_BASE_CONFIG 合并到一个位置.从 20c 开始 ...

  7. Oracle 20c 新特性:自动的区域图 - Automatic Zone Maps

    导读:Zone Maps 是一个独立的访问结构,可以为表独立建立.在表和索引扫描期间,区块图可以根据表列上的谓词来修剪表的磁盘块和分区表的潜在完整分区.区块映射可以使用 Attribute Clust ...

  8. Oracle 20c 新特性详解:SQL Macro 宏 SCALAR / TABLE 模式带来的敏捷和便利

    导读:在 Oracle 20c 中,SQL的宏支持 - SQL Macro 为 SQL 开发带来了进一步的敏捷和便利,在这篇文章中,我们来详细了解一下 SQL Macro 的特性用法. 以下是概要介绍 ...

  9. Oracle 20c 新特性:SQL 宏支持(SQL Macro)Scalar 和 Table 模式

    SQL宏特性,允许开发人员将复杂的处理通过宏定义实现,随后可以在 SQL 中任何位置调用宏.这个特性的实现类似于12c中实现的 Function in SQL 特性. 在 Oracle Databas ...

最新文章

  1. python中的pass占位语句
  2. PHP环境下配置WebGrind——让你的网站性能看得见
  3. 详细分解Transformer各部件总结
  4. Java并发编程(1):可重入内置锁
  5. 6年Microsoft MVP,是否还能坚持4年?
  6. RPAD()和LPAD()函数进行字符串的填充
  7. springboot 和 mybatis整合:参数查询和动态sql
  8. PHP-代码审计-命令执行
  9. php 百度云 上传,求个PHP版百度云BOS上传文件的dome
  10. 【渝粤题库】陕西师范大学201661英语阅读(二)作业(高起专)
  11. 递归、尾递归、迭代算法【在 斐波拉契数列】上的实现
  12. 平台用户实名认证设计流程
  13. Python获取sklearn库中iris数据写入本地csv文件,可视化展示数据并进行分类、聚类实验以及结果可视化
  14. vue前端跨域解决方案
  15. 关于跨境电商shopee平台,你了解多少?
  16. Android机应用多开分身CK获取ksjsb-jrttjsb-aqc羊毛
  17. 【读书笔记】增长黑客
  18. 夏天泡脚的好处和注意事项
  19. day79_babasport第五天
  20. 传统运维已然淘汰,市场上究竟哪种运维平台适用于变电所场景呢?

热门文章

  1. linux用户名是什么_什么是Linux用户?
  2. 敏捷和devops区别_DevOps转型:小型,中型和大型组织的主要区别
  3. 1:1 人脸比对 开源_打破5个神话:在高等教育中使用开源
  4. 如何使用Python Flask编写Web服务
  5. 微信付费付费链接制作_为什么我编码但不为此付费
  6. python抓资源_python3 抓取网页资源的 N 种方法
  7. mac cad石材填充图案_CAD怎么填充颜色?
  8. loc与iloc函数的使用
  9. python开发之路---第二章之--函数之匿名函数
  10. 获取组织分类后群数据