示例代码及相关内容来源于《Alink权威指南(Java版)》

概述

决策树模型再现了人们做决策的过程,该过程由一系列的判断构成,后面的判断基于前面的判断结果,不断缩小范围,最终推出结果。

如下,基于决策树模型预测天气,是最常见的示例。天气的整个预测过程,就是不断地判断推测的过程。

特征分类

特征数据有多种划分,比如连续特征、离散特征、时序特征。决策树对于离散特征与连续特征的处理是有些差异的。

连续特征

以用户属性数据为例,比如身高、年龄、体重等特征数据,可以看作是连续特征数据,因为其分布一般是连续且不均匀的数值数据。

离散数据

以用户属性数据为例,比如性别数据,只有两种取值,是分布均匀,分组清晰的文本数据。



决策树模型处理这两种数据的区别其实也就是需要考虑数据是否分组聚集,以及是否划分数据,如何划分数据。导致其数学形式的表述有差异。

决策树分类与算法

常见决策树算法

目前常用的决策树模型有三种,分别是

  • ID3
  • C4.5
  • CART

虽然这三种算法的区别以及实现初衷不尽相同,但其实可以都是基于三种不同类型的决策树模型来实现的。而这三种类型分别是:

  • GINI:基尼值,CART算法模型
  • INFOGAIN:信息增益,ID3算法模型
  • INFOGAINRATIO:信息增益率,C4.5算法模型

如上所示,不同的决策树算法对应着不同类型的决策树模型。

决策树分类

决策树分为两大类:回归树与分类树,其分别对应解决机器学习领域中的分类和回归问题。分类树预测分类标签值,回归树用于预测数值。

分类树在每次分枝时,会针对当前枝节点的样本,找出最优的分裂特征和分裂方式,从而得到若干新节点;继续分枝,直到所有样本都被分入类别唯一的叶节点。

回归树的建模也差不多,但分裂指标不同,回归树一般以均方差为分裂指标。

Alink实现决策树算法模型

实现概览

在Alink库中,已经封装好了决策树算法的相关细节,使得业务开发及其简单——简单的API调用即可。

实现Demo如下:

/**
* 基于C45决策树算法进行模型训练,并输出模型
* 1. 设置C45决策树模型参数
* 1.1 设置特征列
* 1.2 设置离散特征列
* 1.3 设置标签列
* 1.4 打印输出模型
* */
static void c_2_5() throws Exception {
MemSourceBatchOp source = new MemSourceBatchOp(
new Row[] {
Row.of("sunny", 85.0, 85.0, false, "no"),
Row.of("sunny", 80.0, 90.0, true, "no"),
Row.of("overcast", 83.0, 78.0, false, "yes"),
Row.of("rainy", 70.0, 96.0, false, "yes"),
Row.of("rainy", 68.0, 80.0, false, "yes"),
Row.of("rainy", 65.0, 70.0, true, "no"),
Row.of("overcast", 64.0, 65.0, true, "yes"),
Row.of("sunny", 72.0, 95.0, false, "no"),
Row.of("sunny", 69.0, 70.0, false, "yes"),
Row.of("rainy", 75.0, 80.0, false, "yes"),
Row.of("sunny", 75.0, 70.0, true, "yes"),
Row.of("overcast", 72.0, 90.0, true, "yes"),
Row.of("overcast", 81.0, 75.0, false, "yes"),
Row.of("rainy", 71.0, 80.0, true, "no")
},
new String[] {"Outlook", "Temperature", "Humidity", "Windy", "Play"}
); source.lazyPrint(-1); source
.link(
new C45TrainBatchOp()
.setFeatureCols("Outlook", "Temperature", "Humidity", "Windy") // 设置特征列
.setCategoricalCols("Outlook", "Windy") // 设置离散特征
.setLabelCol("Play") // 设置标签列
.lazyPrintModelInfo()
.lazyCollectModelInfo(new Consumer <DecisionTreeModelInfo>() {
@Override
public void accept(DecisionTreeModelInfo decisionTreeModelInfo) {
try {
decisionTreeModelInfo.saveTreeAsImage(
DATA_DIR + "weather_tree_model.png", true);
} catch (IOException e) {
e.printStackTrace();
}
}
})
); BatchOperator.execute();
}

最终生成一个决策树图

算子函数

C45TrainBatchOp

API说明

简单看看其构造函数


@NameCn("C45决策树分类训练")
@NameEn("C45 Decision Tree Training")
@EstimatorTrainerAnnotation(
estimatorName = "com.alibaba.alink.pipeline.classification.C45"
)
public class C45TrainBatchOp extends BaseRandomForestTrainBatchOp<C45TrainBatchOp> implements C45TrainParams<C45TrainBatchOp>, WithModelInfoBatchOp<DecisionTreeModelInfo, C45TrainBatchOp, C45ModelInfoBatchOp> {
private static final long serialVersionUID = -1894634246411633664L; public C45TrainBatchOp() {
this((Params)null);
} /**
* 主要是这里,构造了决策树模型的类别为INFOGAINRATIO
*/
public C45TrainBatchOp(Params parameter) {
super(parameter);
this.getParams().set(TreeUtil.TREE_TYPE, TreeType.INFOGAINRATIO);
this.getParams().set(HasNumTreesDefaltAs10.NUM_TREES, 1);
this.getParams().set(HasFeatureSubsamplingRatio.FEATURE_SUBSAMPLING_RATIO, 1.0D);
this.getParams().set(HasSubsamplingRatio.SUBSAMPLING_RATIO, 1.0D);
} public C45ModelInfoBatchOp getModelInfoBatchOp() {
return (C45ModelInfoBatchOp)(new C45ModelInfoBatchOp(this.getParams())).linkFrom(new BatchOperator[]{this});
}
}

聊聊基于Alink库的决策树模型算法实现的更多相关文章

  1. Python 实现基于信息熵的 ID3 算法决策树模型

    版本说明 Python version: 3.6.6 |Anaconda, Inc.| (default, Jun 28 2018, 11:21:07) [MSC v.1900 32 bit (Int ...

  2. 决策树模型 ID3/C4.5/CART算法比较

    决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...

  3. DNS通道检测 国内学术界研究情况——研究方法:基于特征或者流量,使用机器学习决策树分类算法居多

    http://xuewen.cnki.net/DownloadArticle.aspx?filename=BMKJ201104017&dbtype=CJFD<浅析基于DNS协议的隐蔽通道 ...

  4. 02-25 scikit-learn库之决策树

    目录 scikit-learn库之决策树 一.DecisionTreeClassifier 1.1 使用场景 1.2 代码 1.3 参数详解 1.4 属性 1.5 方法 二.DecisionTreeR ...

  5. Alink漫谈(一) : 从KMeans算法实现不同看Alink设计思想

    Alink漫谈(一) : 从KMeans算法实现不同看Alink设计思想 目录 Alink漫谈(一) : 从KMeans算法实现不同看Alink设计思想 0x00 摘要 0x01 Flink 是什么 ...

  6. Sklearn库例子——决策树分类

    Sklearn上关于决策树算法使用的介绍:http://scikit-learn.org/stable/modules/tree.html 1.关于决策树:决策树是一个非参数的监督式学习方法,主要用于 ...

  7. 决策树模型比较:C4.5,CART,CHAID,QUEST

    (1)C4.5算法的特点为: 输入变量(自变量):为分类型变量或连续型变量. 输出变量(目标变量):为分类型变量. 连续变量处理:N等分离散化. 树分枝类型:多分枝. 分裂指标:信息增益比率gain ...

  8. day-7 一个简单的决策树归纳算法(ID3)python编程实现

    本文介绍如何利用决策树/判定树(decision tree)中决策树归纳算法(ID3)解决机器学习中的回归问题.文中介绍基于有监督的学习方式,如何利用年龄.收入.身份.收入.信用等级等特征值来判定用户 ...

  9. Spark:聚类算法之LDA主题模型算法

    http://blog.csdn.net/pipisorry/article/details/52912179 Spark上实现LDA原理 LDA主题模型算法 [主题模型TopicModel:隐含狄利 ...

  10. 【神经网络篇】--基于数据集cifa10的经典模型实例

    一.前述 本文分享一篇基于数据集cifa10的经典模型架构和代码. 二.代码 import tensorflow as tf import numpy as np import math import ...

随机推荐

  1. 【HarmonyOS】详解低代码端云一体化开发之连接器

    ​[关键字] 元服务.低代码平台.端云一体化开发.连接器.拖拽式UI [1.写在前面] 前面我们写了两篇文章分别介绍了低代码平台的基本使用和端云一体化开发中数据模型的使用,有需要的可以了解一下,文章地 ...

  2. React学习时,outlet配置(token判定,页面path监听)

    尽管写过 outlet 路由的配置. 考虑到 token 判定和 路由页 变更,我不了解v6是不是有更详解的做法. 决定调一下配置,期望 在任何页面异步更新时,token 都可以在跳转前 被检测到,防 ...

  3. Health Kit 新版本功能解析,给你丰富运动体验!

    华为运动健康服务(HUAWEI Health Kit)6.11.0版本新鲜出炉! 开放活力三环数据助力养成运动习惯,新增水肺潜水.户外探险数据开放-- 丰富运动体验,尽在Health Kit,一起来看 ...

  4. LSP协议被劫持,导致无法上网

    QQ无法登录,网页打不开 用火绒的断网修复 说已经修复了 结果屁用没有 然后找的百度经验 管理员打开命令行窗口 输入 netsh winsock reset catalog 重启即生效

  5. 了解web网络基础

    TCP/IP 协议:一种规则,规定不同计算机操作系统,硬件之间怎么通信的一种规则 像这样把互联网相关联的协议集合起来总称为TCP/IP协议. TCP/IP分层管理 按照组层次分为以下四层: 应用层:决 ...

  6. [HUBUCTF 2022 新生赛]simple_RE

    [HUBUCTF 2022 新生赛]simple_RE 查壳,64位 找main函数,F5查看伪代码,简单分析一下 int __cdecl main(int argc, const char **ar ...

  7. Ubutnu 20.04 安装和使用单机版hadoop 3.2 [转载]

    按照此文档操作,可以一次部署成功:Ubutnu 20.04 安装和使用单机版hadoop 3.2 部署之后,提交测试任务报资源问题.原因是yarn还需要配置,如下: $ cat yarn-site.x ...

  8. IOS Safari、微信小程序 img或者其他标签元素出现黑边、黑线阴影

    这个问题最开始出现在小程序上,然后在社区找到一个一样得案例 案例:https://developers.weixin.qq.com/community/develop/doc/000608420706 ...

  9. sudo提权操作

    sudo提权操作 sudo sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等.这样不仅减少了root用户的登录 ...

  10. asp.net core之EfCore

    EF Core(Entity Framework Core)是一个轻量级.跨平台的对象关系映射(ORM)框架,用于在.NET应用程序中访问和操作数据库.它是Entity Framework的下一代版本 ...