# 可视化建模 可视化建模是通过在画布中拖拽节点、添加连线的方式,快捷地实现数据处理、特征工程、数据挖掘等各类任务。 ## 建模任务管理 在菜单栏点击“可视化建模”,首先进入的是所有建模任务的管理页面。页面左侧是存储建模任务的目录结构。页面右侧是当前目录里包含的全部建模任务,可以根据任务名称和创建日期等条件筛选建模任务。 ![task-list](../images/task-list.png) 鼠标移动到列表上,显示出操作选项。操作选项从左至右分别是: * 释放资源 当按钮为灰色时,表示未启动计算资源;而按钮为蓝色时,表示已经为该任务启动了计算资源。可以通过单击这个按钮,快速停止并释放计算资源的占用。 * 运行任务 运行画布中的全部算子,当画布为运行状态时;这个按钮将变为停止任务 * 设置权限 设置画布的访问权限 * 复制画布 使用当前任务的全部节点和配置,另存为一个配置相同的新任务。点击复制按钮后,只需要在弹出窗口中选择另存的位置,就可以完成复制并自动跳转到复制任务的画布中。 * 导出画布 常用于不同系统之间的迁移。点击导出按钮,会弹出保存文件对话框,系统会将当前任务转换为JSON文件格式,并保存到用户指定的本地目录。 * 运行记录 “运行记录”的使用方法参见下文中的“画布介绍”——“画布运行历史”章节。 * 删除画布 鼠标移动到目录最右边的`···`,可以在弹出的菜单里进行新建节点、删除节点、修改节点、修改节点权限等操作。 ![task-rightclick](../images/task-rightclick.png) 点击添加子目录,可以看到新建子目录的弹出框,在该弹出框中填写目录名称。 ![task-create-folder](../images/task-create-folder.png) 点击添加之后,可以看到左侧出现了我们刚刚添加的目录结构。可以用拖拽的方式整理各个文件夹和任务的排布 若要删除目录,那么会将该目录下面的任务也将一并删除,系统会弹出提示框提醒。 点击任务管理页面右侧的“新建任务”按钮,将弹出为新任务命名的窗口,系统以"任务"+下划线+当前时间的格式给出了一个默认的建模任务名称,用户可以自行修改名称。 此外,新建任务时还要为其分配一定的计算资源,要选择画布运行时使用的资源队列,并设置本任务的资源使用量,如CPU核数、执行器内存大小等,也可以打开“高级配置”开关,为提交Spark运算任务添加更多自定义配置。 ![task-new-model](../images/task-new-model.png) 点击添加按钮,就进入到了模型工厂的画布,我们将在这里打造一个新的建模任务。 ## 画布介绍 如图是一个执行完成的建模任务画布,本节将对其布局和主要操作做出概括性的介绍。 ![graph_overview_finished](../images/graph-overview.png) ### 页面布局 可视化建模的画布页面主要由以下几个部分组成: ![graph-overview-labeled](../images/graph-overview-labeled.png) 区域①位于页面右上角,是信息栏及快捷功能按键。最左侧展示了当前画布与计算资源的连接情况。如果连接失败,画布则无法正常执行。中央区域是当前任务的运行时长。偏右侧是操作单个节点的快捷菜单,可以根据名称搜索节点,或是对选中的节点进行复制、删除等操作。最右侧是对画布进行操作的按钮,功能分别是![btn-history](../images/btn-history.png)“查看运行历史”,![btn-start](../images/btn-start.png)“开始\停止运行”,![btn-cp](../images/btn-cp.png)“复制当前画布”,![btn-prop](../images/btn-prop.png)“配置画布属性”,![btn-restart](../images/btn-restart.png)重启计算资源。 区域②是位于最右侧的菜单,菜单中列出了可视化建模时所有可用到的节点,包括当前用户可以操作的数据对象,已经训练好的模型,及各种动作节点。用按住鼠标拖动的方式可以直接把需要用到的节点拖动到画布当中。 区域③处于页面中心,是主要的画图区域。 区域④位于页面右下角,是当前画布的缩略图,用于辅助用户快速定位。 ### 画布属性配置 点击右上角“配置画布属性”按钮可以打开配置窗口。主要配置项目与新建画布时相似,可以修改画布运行时使用的资源队列,或改变本任务的资源使用量,如CPU核数、执行器内存大小等,也可以通过“高级配置”,为提交Spark运算任务添加更多自定义配置。 ![canvas-prop](../images/task-new-model.png) ### 画布运行历史 点击右上角的![btn-history](../images/btn-history.png)“查看运行历史”按钮,将进入运行记录页面。运行记录分为两个标签页。“节点日志”页面记录了每一次画布运行的历史,如运行时长,所属用户等。点击“查看详情”按钮,可以展示出当次运行的所有节点的日志,按照节点运行的先后顺序排列,展示了每个节点的运行时长,执行了什么SQL指令(若有),以及报错信息(若有)。 ![history-nodes](../images/history-nodes.png) 第二个标签页“资源占用”则记录了画布历次连接计算资源的情况,包括每次使用的资源量,当前的资源状态等等。可以点击“释放资源”,断开与计算资源的连接并释放占用的资源。也可以点击“输出日志”或“错误日志”,查看计算资源处的日志。此处的日志比节点日志更加详细,有助于发现运行时更深层次的异常。 ![history-rsc](../images/history-rsc.png) ### 节点的样式 画布中每个节点的样式基本一致。节点的主体部分,最左侧是节点的图标,中间是节点名称,右侧是状态图标。鼠标停留在状态图标上,可以显示状态的文字说明,如“已配置”,“运行成功”,“中止运行”等,如果节点是运行出错的状态,则会显示具体错误信息。 ![basic_node_raw](../images/basic_node_raw.png) 节点上下方的圆圈是用来连线的端口。位于上方的一定是输入端,下方一定是输出端。鼠标停留在端口上,会提示具体的端口类型,如图所示。常见的端口类型有“数据输入\输出”, “流数据输入\输出”,“流数据输入\输出[结构化]”(经过“解析”节点后的流数据),只有相匹配的输入、输出端口之间才能创建连线。 ![basic_node](../images/basic_node.png) 画布中的一部分动作节点还会出现如图所示的表格状的图标,这表示该节点被配置成“物化节点”。物化节点存储了运算产生的中间结果,能避免上游已经固定的计算流程被反复运行,在构建一个比较长的建模流程时,可以节省很多的调试时间。物化节点的详细使用方法将在下文中介绍。 ![node_material](../images/node_material.png) ### 画布快捷操作 - 按住画布空白位置并拖动可以移动画布。在缩略图中拖动也能起到同样效果。 - 滚轮上下滚动可以调节画布缩放。 - 按住```ctrl```键并在画布中拖动,可以框选多个节点,便于进行批量的移动或删除操作。 ![graph_multi_sel](../images/graph_multi_sel.png) ### 节点快捷操作 - 双击一个节点,会弹出新窗口。不同的节点会在弹出的窗口中展示不同的配置项,如填写判断条件,配置算法参数等。各个节点的原理和配置方法将在接下来的章节中详细介绍。 ![node_viewconfig](../images/node_viewconfig.png) - 下图中的选择组件在可视化建模系统中经常会用到:左侧的表格列出了全部的可选字段,而右侧记录当前已经选中的字段。单击左侧的复选框选中一个字段,被选中的字段就会即时出现在右侧表格中。右侧字段的排列顺序取决于选择的顺序,先选中的会排在前面。也可以拖动字段右侧的按钮进行重新排序。如果源数据字段数量很多,可以通过按关键字筛选、按类型筛选、全选等功能快速定位和选择所需要的字段。 ![columntable](../images/columntable.png) - 如果双击一个存储着数据的节点,则会直接展示其中的数据,如下图: ![node_viewdata](../images/node_viewdata.png) - 在节点的输出端口处拖动鼠标,拖出一条连线并在画布空白处松手,会弹出如图所示的快捷菜单用来快速建立下游节点。与页面右侧的菜单中包含全部功能节点相比,快捷菜单会会排除掉无法建立连接的节点,更方便找到要用到的节点。 ![create_connection_2](../images/create_connection_2.png) - 右键点击节点,会弹出当前节点的操作菜单。顾名思义,菜单中“重命名”,“删除”功能可以对当前节点做重命名和删除操作。而“运行至此”、“从此运行”功能用来控制画布的执行逻辑,不是执行整张画布,而是仅执行于当前节点有关系的一部分节点。 ![node_rightmenu](../images/node_rightmenu.png) ​ ​ 运行子图的示例如下图所示。“主成分分析”的下游有左右两个分支。如果点击“运行至此”,则运行到“主成分分析”节点处就会停止,不会执行任何下游。如果像图中所示,点击“从此运行”,则左右两个分支都会被执行;但如果在左侧分支的“预览”节点处,选择“运行至此”,就会单独执行左侧分支,不会运行右侧的训练、预测等步骤。 ![node_part_run](../images/node_part_run.png) - 如果已经选中了节点或连线,可以通过退格键(Backspace)快捷键删除节点 ## “数据源”功能 “数据源”菜单展示了用户有权限使用的所有“数据集”。“数据集”功能的使用方法在前文已经详细介绍。“数据源”菜单中会将当前用户有权限操作的数据集按照数据集——数据对象这样的多层目录展示出来,如图所示: ![dataset-menu](../images/dataset-menu.png) ## “数据处理”功能 本节中将介绍“数据处理”菜单中的各节点功能和配置方法。 ### 预览 在运行时,预览节点会存储输入数据的前100条留作预览。若预览节点处于“运行完成”状态时,双击该节点,会弹出数据预览窗口。 预览节点常用于临时观察运行结果,确认流程正确性和数据有效性等。 ### 筛选 筛选节点是配置一定的逻辑规则,从输入数据中舍弃掉无关的数据,只保留满足逻辑判断条件的感兴趣的相关条目。 窗体上半部分可以配置筛选条件,可根据需要增减筛选条件及增删分组。以下图中配置的筛选方法为例:条件```marriage等于1```和条件```marriage等于2```被一个矩形框包围,表示两个条件属于同一个分组,两者之间是“或”的关系;而条件```age大于20```,条件```age小于50```,分组```marriage```三者并列,三者之间是“且”的关系。这一系列组合说明:我们想筛选出来“年龄大于20岁”,“年龄小于50岁”,并且“婚姻状况代码为1或2”的样本。 下一个部分“选择显示字段”,用来选择生成的数据中需要保留的数据列。在这个组件中,只有进入右侧表格的字段才会被传给下游。 ![filter-node](../images/filter-node.png) 如果输入数据来源于SQL平台,“筛选”节点还会支持一个额外的配置项:可以指定筛选后保留前多少条数据。可以在下拉菜单中选择保留全部数据,或是手动输入任意的数值,下游的输出数据条数不会超出设定好的值。 ![filter-node-limit](../images/filter-node-limit.png) 对于SQL平台的数据,在筛选条件中除了可以填写具体值之外,也可以使用转义字符 "&&" 开头,接着填写自定义的SQL语句。举例来说,如果一个名为record_date的字段存储了一个时间信息,我们在每次查询时,都想筛选出距离当前系统时间不超过30天的所有数据,可以如下图所示填写: ![filter-custom-sql](../images/filter-custom-sql.png) 实际应用筛选节点时,除了按条件筛选数据之外,还可以用来去除上游数据中不需要的数据列。如下图:我们有一个几十个列的数据表,但是我们目前只需要其中5个列,那么可以如下配置,清除窗体上半部分的所有"筛选条件",并在下半部分选择需要的字段,这样下游只会接收到选中的5个数据字段。 ![filter-node-selectrow](../images/filter-node-selectrow.png) 配置好“筛选”节点后,点击窗口右下角的“保存”按钮,会保存配置并弹出“保存成功”的提示气泡,节点状态也会更新成“已配置”。 ![filter-node-configed](../images/filter-node-configed.png) 如果在筛选下游再连接“预览”节点并执行画布,可以看到只有5个列的"清爽版"数据。 ![sort-data](../images/sort-data.png) ### 合并 合并的作用是:当拥有两个或多个结构基本相同的数据时,可以用合并节点,把他们相同的字段一一对应,拼接成一个数据对象。 合并节点支持多个上游数据输入。当连接的输入数据少于两个时,无法正常使用这个节点,而是会提示错误。当接入一个数据输入时,合并节点会生成一个新的输入端口,保证能够继续连接更多的数据输入。 ![union_node_connect](../images/union_node_connect.png) 在“匹配所选表的字段”部分,我们点击“智能匹配”,就可以自动匹配出两个源头表里名称和数据类型都相同的字段,并且添加到这个栏目中。如果需要修改的话,可以点击已经添加的列上面的叉号来删除列,或者点击添加新列按钮,增加一个合并用的列。 ![union_node](../images/union_node.png) “合并重复数据”这一栏目指的是在合并过程中,如果遇到重复的数据条目,我们既可以选择只保留一条,也可以选择全部保留。 ### 连接 连接同样是接受多个输入数据的节点。它的作用是连接两张或者多张数据表。在连接的时候我们首先需要选择"连接方式": 1. 自然连接:连接后,只有在两个表中都存在的数据才会保留。 2. 左连接:连接后,主表的数据全部保留,用来与主表做连接的表中数据,只有与主表重合的部分才保留。 3. 右连接:连接后,用来与主表做连接的表中数据全部保留,主表中数据只有与对方表重合的部分才保留。 4. 全连接:连接后,两个表中的数据全部保留。 注:以上情况不只适用于两张表,也适用于多张表。数据在表中存在与否,依据所配置的连接字段来判断。 第二步需要设置连接条件,如下图例子中,第一个下拉框默认选中当前表,此时第二个下拉框中会呈现出所选表的所有字段。我们选择需要用来连接的字段 中间的下拉框用来选择逻辑连接符,一般情况下我们会用默认的"等于"。 第四,五个下拉框是用来配置对方表的字段,从而形成一个连接条件。至此,我们就完成了一个连接条件的设置。 点击右侧“添加连接条件”按钮,可以新加一个连接,也可以点击连接条件右侧的“减号”按钮来删除当前条件 最后配置每个参与连接的表中,在连接结果表中需要保留的列 ![join-conf](../images/join-conf.png) 举另一个例子说明连接: A表中数据如下, | 身份证号 | 姓名 | 年龄 | | -------- | ---- | ---- | | 123 | 小张 | 20 | | 234 | 小王 | 21 | | 345 | 小李 | 22 | B表中数据如下, | 身份证号 | 购买物品 | 数量 | | -------- | -------- | ---- | | 123 | 铅笔 | 1 | | 234 | 橡皮 | 2 | | 101 | 尺子 | 1 | | 567 | 铅笔 | 3 | | 123 | 剪刀 | 2 | 我们可以将连接条件配置为"A表.身份证号 = B表.身份证号"。 显示列,A表全部选择,B表选择后两个列即可。 那么,不同的连接方式会产生不同的结果,如下: 1. 自然连接 | 身份证号 | 姓名 | 年龄 | 购买物品 | 数量 | | -------- | ---- | ---- | -------- | ---- | | 123 | 小张 | 20 | 铅笔 | 1 | | 123 | 小张 | 20 | 剪刀 | 2 | | 234 | 小王 | 21 | 橡皮 | 2 | 2. 左连接 | 身份证号 | 姓名 | 年龄 | 购买物品 | 数量 | | -------- | ---- | ---- | -------- | ---- | | 123 | 小张 | 20 | 铅笔 | 1 | | 123 | 小张 | 20 | 剪刀 | 2 | | 234 | 小王 | 21 | 橡皮 | 2 | | 345 | 小李 | 22 | | | 3. 右连接 | 身份证号 | 姓名 | 年龄 | 购买物品 | 数量 | | -------- | ---- | ---- | -------- | ---- | | 123 | 小张 | 20 | 铅笔 | 1 | | 123 | 小张 | 20 | 剪刀 | 2 | | 234 | 小王 | 21 | 橡皮 | 2 | | | | | 尺子 | 1 | | | | | 剪刀 | 3 | 4. 全连接 | 身份证号 | 姓名 | 年龄 | 购买物品 | 数量 | | -------- | ---- | ---- | -------- | ---- | | 123 | 小张 | 20 | 铅笔 | 1 | | 123 | 小张 | 20 | 剪刀 | 2 | | 234 | 小王 | 21 | 橡皮 | 2 | | 345 | 小李 | 22 | | | | | | | 剪刀 | 3 | | | | | 尺子 | 1 | ### 数据清洗 数据清洗是数据处理过程的常用操作。现实中的数据往往存在数据质量差,不符合标准规范等等问题,可以借助数据清洗节点配置一系列的操作,将原本的不规范数据转换成内容完整、结构一致、格式合法的数据。 如图是数据清洗节点的主界面,通过双击数据清洗节点进入。其中,最顶部的一排展示已经配置好的数据清洗规则,包括规则的方法名,具体操作,涉及到的字段等。 页面中间的“保留原始字段”用来选择保留上游的哪些原始字段;下方的“数据物化”选择框用来确定本节点是否进行物化操作。 ![cleaning-home](../images/cleaning-home.png) 点击右上角的“新建清洗规则”,或者点击任意一个已配置好规则右侧的“编辑”按钮,可以进入单条规则的编辑界面,如下图所示。 界面左侧列出了所有可用的规则,在左侧选中规则后,右侧会显示出该规则的配置框,展示所有用户可配置的条目。 ![cleaning-edit](../images/cleaning-edit.png) 按照执行的操作不同,清洗规则按类别展示,分别有填充、替换、删除、空值处理、重命名、日期类型处理、英文字母大小写转换等。 以下逐条介绍每个具体操作的使用说明: | 清洗操作 | 说明 | | ------------------- | ------------------------------------------------------------ | | 字符串长度填充 | 使用指定的内容或随机生成的内容,将原字段填充至指定长度 | | 指定位置填充字符串 | 在原字段的指定位置(字段前方、字段后方、指定起始位数)填充内容 | | 搜索并填充字符串 | 在原字段中搜索子串或正则表达式,如果找到,则在子串的前方或后方填充内容 | | 字符串替换 | 在原字段中搜索子串或正则表达式,并将搜索出的子串替换成新的字符串。可以强制要求匹配结果必须位于指定位置 | | 删除指定位数 | 从头向后,或是从尾向前在原字段中删除指定位数的字符 | | 搜索并删除子串 | 在原字段中搜索子串或正则表达式,并删除匹配结果。可以强制要求匹配结果必须位于指定位置 | | 搜索并删除指定位数 | 在原字段中搜索子串或正则表达式,并以匹配结果为锚点,删除其前后指定位数的字符 | | 修剪前后缀 | 清除原字段前/后的多余字符(例如空格) | | 空值填充 | 当原字段为空时,使用指定值填充 | | 指定数值转空值 | 当原字段等于设定的值时,将其替换为空值 | | 列重命名 | 将字段名称改成指定值 | | 转换成timestamp类型 | 将字符串、数值等类型的字段转换成timestamp时间戳类型 | | 转换成date类型 | 将字符串、数值等类型的字段转换成date类型 | | 日期转换成字符串 | 将日期类型的数据,用指定的日期形式转换成字符串 | | 日期转换成数值 | 将日期类型的数据转换成Unix时间戳的数值 | | 全部转换成小写 | 将原字段中的英文字母全部转换成小写 | | 全部转换成大写 | 将原字段中的英文字母全部转换成大写 | | 单词首字母大写 | 将原字段中的每个英文单词转换成首字母大写、其余字母小写的格式(将空格与标点符号分隔的英文字母视为一个单词) | | 字符串长度填充 | 使用指定的内容或随机生成的内容,将原字段填充至指定长度 | | 指定位置填充字符串 | 在原字段的指定位置(字段前方、字段后方、指定起始位数)填充内容 | | 搜索并填充字符串 | 在原字段中搜索子串或正则表达式,如果找到,则在子串的前方或后方填充内容 | | 字符串替换 | 在原字段中搜索子串或正则表达式,并将搜索出的子串替换成新的字符串。可以强制要求匹配结果必须位于指定位置 | | 删除指定位数 | 从头向后,或是从尾向前在原字段中删除指定位数的字符 | | 搜索并删除子串 | 在原字段中搜索子串或正则表达式,并删除匹配结果。可以强制要求匹配结果必须位于指定位置 | | 搜索并删除指定位数 | 在原字段中搜索子串或正则表达式,并以匹配结果为锚点,删除其前后指定位数的字符 | | 修剪前后缀 | 清除原字段前/后的多余字符(例如空格) | | 空值填充 | 当原字段为空时,使用指定值填充 | | 指定数值转空值 | 当原字段等于设定的值时,将其替换为空值 | | 列重命名 | 将字段名称改成指定值 | | 转换成timestamp类型 | 将字符串、数值等类型的字段转换成timestamp时间戳类型 | | 转换成date类型 | 将字符串、数值等类型的字段转换成date类型 | | 日期转换成字符串 | 将日期类型的数据,用指定的日期形式转换成字符串 | | 日期转换成数值 | 将日期类型的数据转换成Unix时间戳的数值 | | 全部转换成小写 | 将原字段中的英文字母全部转换成小写 | | 全部转换成大写 | 将原字段中的英文字母全部转换成大写 | | 单词首字母大写 | 将原字段中的每个英文单词转换成首字母大写、其余字母小写的格式(将空格与标点符号分隔的英文字母视为一个单词) | ### 数据脱敏 数据脱敏节点用于应对使用数据时的安全性、隐私性需求,可以对敏感数据做加密保护,避免关键信息的泄露。数据脱敏节点的使用方法与上文介绍的“数据清洗节点”类似:在页面上方管理配置好的脱敏规则,下方选择保留的原始字段和是否进行物化操作,如图所示。 ![cleaning-desens-home](../images/cleaning-desens-home.png) 不同的是,脱敏节点提供了更多进行脱敏操作时的专用规则: ![cleaning-desens-edit](../images/cleaning-desens-edit.png) 数据脱敏各项操作的介绍如下: | 脱敏操作 | 说明 | | ---------- | ------------------------------------------------------------ | | 数据模糊化 | 用星号(*)替换原字段内指定位数的字符 | | 替换固定值 | 在原字段中搜索子串或正则表达式,并将搜索出的子串替换成新的字符串可以强制要求匹配结果必须位于指定位置 | | 增补前后缀 | 在原字段中搜索子串或正则表达式,如果找到,则在子串的前方或后方填充内容 | | 数据裁切 | 在原字段中搜索子串或正则表达式,并以匹配结果为锚点,删除其前后指定位数的字符 | | MD5加密 | 对原字段进行MD5转换 | ### 字段衍生 字段衍生节点与“数据清洗”节点使用方法非常类似,不同之处在于,清洗是用来对原字段做规范化操作,一般是在原字段上做修改;而衍生则更加灵活,可以使用一个或多个原字段的信息,通过一定的逻辑操作生成一个全新的字段。字段衍生节点的主要页面如图所示: ![cleaning-derive-home](../images/cleaning-derive-home.png) 点击“添加衍生规则”或“编辑”按钮,进入编辑页面,可以看到种类丰富的衍生操作 ![cleaning-derive-edit](../images/cleaning-derive-edit.png) 下面逐条介绍支持的衍生操作: | 衍生操作 | 说明 | | ---------------- | ------------------------------------------------------------ | | 按位取字符串 | 提取原字段的指定位数的子串 | | 正则匹配子字符串 | 提取原字段中与正则表达式匹配的子串 | | 生成固定值 | 生成一个新列,填充固定的字符串 | | 字段比较 | 比较两个字段的取值是否相同,并生成一个新字段。若相同则新字段取值为1;若不同,取值为0 | | 拆分成多列 | 使用指定的分隔符,将原字段拆分成多个新字段 | | 合并多列 | 将多个原字段,通过连接符拼接成一个新的字符串类型字段 | | SQL衍生 | 使用自定义SQL语句,生成一个新字段 | 各项衍生方法中,**SQL衍生**方法支持非常灵活的自定义操作。通过SQL衍生的配置方法如图:在左侧列出了上游数据中所有可以操作的列和他们的数据类型。可以通过点击右键呼出菜单,把相应的列名复制到SQL输入框中。 ![cleaning-derive-sql](../images/cleaning-derive-sql.png) SQL输入框中可以输入任何符合SQL语法的指令,可以通过一个或者多个原表字段自由生成新的衍生字段。例如,转换一个字段的数据类型,或是几个字段做加减乘除等数值运算。图中给出的例子是通过一个CASE...WHEN...ELSE条件判断语句,根据age这一年龄字段衍生出一个包含“成年”、“未成年”等字样的新列。 为了便于操作,SQL衍生方法还预置了多个SQL模板,包括条件判断,字符串拼接,字符串分割,离散数据分桶等。 ![derive-template](../images/derive-template.png) 编辑好SQL语句后,还必须要先点击“测试衍生字段”按钮,系统对SQL的语义语法进行判断。需要提示“测试成功”之后,才可以点击“保存”按钮存储将当前的SQL衍生规则。 ### 分组 分组的作用是在一个数据表上,通过某一个或几个字段进行分组,在各个组内应用聚合函数将整个数据表聚合成若干行。 比如,我们有以下数据表,每一行代表一朵花的样本,最后一列"y"表示这朵花属于三类花中的一类。 ![group-iris](../images/group-iris.png) 我们想统计每一种类型的花对应的数据有什么特点,那么我们就要在第一栏中选择以"y"字段来分组。如果在这里选择了多个分组字段的话,可以用拖动的方法改变字段的前后顺序,从而改变结果表里分组字段的排序。 在第二个栏目中选择分组后,每组需要生成哪些聚合字段。我们的目的是计算每组中样本的个数,此外,还要计算sepallength(花萼长)这一列的一些统计信息,如最大、最小值,中位数,标准差等。可以点击“添加聚合字段”添加并选择需要的筛选字段和筛选条件。 如果不想使用自动生成的结果列名,还可以给每个聚合字段单独设置自定义的列名。 此外,在“聚合结果的顺序”栏目中,可以选择在聚合时保留原顺序(不排序),或是按升序、降序排列。 ![group-conf](../images/group-conf.png) 执行并查看结果时,可以看到已经得出我们想要的数据。 ![group-prev](../images/group-prev.png) 当选择完聚合的列之后,根据该列的数据类型,会给出不同的可选用聚合函数。一些复杂的聚合函数的用法有更多不同。 ![group-configs](../images/group-configs.png) 比如说图中的“相关系数”,计算的是两个数值类型的样本列之间的相关系数,这里聚合列和聚合条件之间多出来的一列就是计算相关系数的另一个目标列,需要手动选择。 而“拼接字符串”这一聚合函数,是将分组里所有字段合并成一个完整的字符串。这里多出来的配置项中可以填入合并字符串时使用的分隔符。 ![group-dual-input](../images/group-dual-input.png) 用以上两个条件聚合出的结果如图所示: ![group-dual-prev](../images/group-dual-prev.png) ### 去重 去重节点主要用来清除重复数据。节点中有三个配置项:“以哪些字段去重”,”按什么顺序保留重复样本“和”结果表显示哪些字段“。如果单纯地想去除重复字段,只保留一列,可以按下图的方式配置:“以哪些字段去重”和“结果表显示哪些字段”都全选,其他设置为空。这样,源数据中所有完全相同的两列会被认为是重复数据,重复的数据会被舍弃,只保留一列。 ![dedup-easy](../images/dedup-easy.png) 除了简单地去除重复数据之外,去重节点还有更多灵活的做法。如图所示,首先我们只选择了按“gender”字段去重,意思是只要性别相同的数据都会视为重复,只保留一条。而“按什么顺序保留重复样本”这里配置了按“age”升序,按“education”降序,则是在遇到性别相同重复数据时,会保留年龄最小,且受教育程度最高的第一条。 ![dedup-2](../images/dedup-2.png) 建立好上述去重流程,执行并预览结果时,我们可以看到,每个独立的性别都保留了1个样本,并且这个样本是年龄最小,受教育程度最高的。这种配置方法有利于按照具体需求保留样本。 ![dedup-2-prev](../images/dedup-2-prev.png) ### 排序 排序节点有着和去重节点类似的页面布局,配置项也更加地简单。 为了对某个数据表进行排序操作,需要选择使用哪些字段进行排序。可以通过拖拽来排列选中字段的顺序,决定排序的优先级。每个字段可以单独配置是升序还是降序排列。 在第二个栏目中,选择结果表保留哪些字段。和筛选节点类似,也可以通过拖动来改变每个显示字段的位置,从而改变结果表数据列的排列顺序。 点击确认按钮,即可完成排序节点的配置操作。 ![sort1](../images/sort1.png) ### SQL节点 SQL节点是一个扩展性强的节点,它允许用户任意编辑节点里执行的SQL语句。平台上的大部分其他节点都有规范的图形化界面,使用起来比较便利,但是每个节点只能完成单一的动作;SQL节点则不同,没有了图形化界面的引导,要求用户需具备充足的SQL知识,但是能实现任何想要的功能,灵活性高。 SQL节点编辑页面的左侧列出了所有上游节点和它们传递下来的字段信息。在下图的例子中,总共选择了两个上游节点,可以点击上方的按钮切换显示它们的输入信息。 编辑页面的右侧是SQL语句的编辑框。编辑框上方提示了各个输入节点的别名。在编写SQL语句时,上游的输入分别用T0、T1、T2...等名称指代,格式如```SELECT * FROM T0```。下方是输入框,有语法高亮,智能提示补全等功能。 SQL节点填写的SQL语句,必须是单一一句```SELECT```语句,不接收```CREATE``` ```INSERT``` ```DELETE```等命令,也不能同时输入多条语句。如图中的示例,就是依据两个上游节点输入的特定字段做关联的操作。当有多个输入时,所有的输入数据必须来源于同一个OushuDB数据库。 ![sql-1](../images/sql-1.png) 下图中的例子则是一个用窗口函数对每个账户的交易额进行排序并输出编号的任务。 ![sql-3](../images/sql-3.png) 在SQL编辑完成之后,按页面右下角的“确认”,会自动开始对SQL进行分析和测试。如果分析出错,则会在编辑框的上方通过起泡展示出错信息,如图所示。 ![sql-3-error](../images/sql-3-error.png) ### 目标表 目标表节点提供了将数据运算结果保存成OushuDB中的数据表的方法。保存目标表分为创建新表和选择已有表两种方法。创建新表需要选择保存的数据库、Schema,并填写一个不重复的表名。初次执行时,会根据传入的数据结构创建目标表。一旦执行完成建表行为,表名、落表位置等配置便无法修改。 ![target-table](../images/target-table.png) 唯一可以随时更改的配置是“写入模式”,默认的追加模式表示在执行到本节点时,不会清除表中原本的数据,而是向表中继续追加数据。 一旦改为“覆写”模式,则是会先清空这个表里的所有数据,再把本次执行的数据写入进去。在设置为“覆写”模式时,一定要确认好目标表的历史数据是否不需要保留,避免丢失重要数据 ![target-table-overwrite](../images/target-table-overwrite.png) 打开“存储格式”,”是否分区“的开关,还可以配置目标表的存储格式、压缩格式、分区方法等等。 ![target-table-partition](../images/target-table-partition.png) 目标表的另一种保存方式是”选择已有表“,可以在列出的所有数据源里选择一个已经建好的目标表。需要保证这个表的结构和画布中的数据结构一致,才能正常地向其中写入数据。 ![target-table2](../images/target-table2.png) 在保存目标表的同时,还可以打开“保存成数据对象”开关,指定一个数据对象名称,将目标表作为数据对象存储到建模平台的“数据集”里。目标表节点运行完成时,数据对象也会立刻创建完成,能够直接在可视化建模、导航式建模过程中直接使用。 ![target-table-dsobj](../images/target-table-dsobj.png) ### 采样 采样节点是在上游数据中,按比例或按一定规则抽取出小部分数据并传给下游。面对原数据的数据量很大的情况,使用合理的抽样可以有效减少分析数据所需要的运算量。 采样节点提供了两种采样方法:随机采样和分层抽样。 随机采样是一种直观的采样方法,用户指定一个采样比例p,对于上游的每一条数据,都有p的概率保留,1-p的概率舍弃。 分层抽样则适合于分类数据里样本极度不均衡的情况。除了采样比例外,还需要指定一个离散类型的标签列,标签列中有多少个独特的标签值,原数据就会被分为多少组,在每个组里分别进行抽样的操作。这种采样方法有助于保证即使一种标签值出现很少,但这类样本也能被采集到。 ![sample](../images/sample-1.png) ### 分割 分割节点是保持输入数据的结构不变,将其中的数据拆成多份,分别由不同的输出端口传出。如果把这些份数据合并在一起,会和拆分前的数据是同一个数据集(每条数据的顺序可能会变化)。分割节点可以用于在机器学习过程中,划分训练集、评估集和测试集等。 分割节点中提供了三种分割方法: 按比例分割是一种随机分割方法。例如设置分割比例为50,30,10,则会将输入数据随机分割成5:3:1的三份。 ![split-1](../images/split-1.png) 点击“确认”后,画布中的节点也会有三个输出端口。 ![split-1-con](../images/split-1-con.png) 在按比例分割时,还可以指定分割时使用的随机数种子,相同的种子能确保重新执行分割操作时得到同样的结果。 按阈值分割则是按照确定规则进行拆分。如图中所示,选择“age”列作为阈值列,设置了三个切分阈值18,40,65,则数据会分为四份。分割时会判断每条数据的年龄字段,小于18的数据由第一个输出端口输出,大于等于18且小于40的为第二个输出,大于等于40且小于60的为第三个输出,大于60的为第四个输出。 ![split-2](../images/split-2.png) 点击“确认”后,画布中的节点也会有四个输出端口。 ![split-2-con](../images/split-2-con.png) 第三种方法为“分层分割”,这个方法和“采样”算子介绍的“分层抽样”原理一致,都是选择一个标签列,在标签划分的组里进行随机分割操作。注意在分层分割时,若:```某个标签下的数据总数 * 某份分割占全体的百分比 < 1```,可能会导致这份分割内部没有该标签的数据 ![split-3](../images/split-3.png) 在使用按比例分割、分层分割时,一般推荐选中“数据物化”选项,将分割结果存储下来,可以避免分割操作反复地遍历数据,节省运算时间;也更容易确保每次运行时得到数据的一致性。“数据物化”的详细说明参加下文“物化功能”小节。 ### 统计 统计功能能用来快速对原始数据进行统计分析,计算出描述数据分布特征的若干指标并给出报告,可以辅助用户便捷地了解数据的分布情况及异常情况,辅助用户对数据进行进一步的清洗处理。 建立统计节点后,首先要选择进行统计分析时的采样条数,这里可以任意输入条数限制,或者选择分析全部数据。其次要选择要分析上游数据中的哪些特定的字段。 ![statistics](../images/statistics.png) 选择完成后点击确认按钮保存配置,运行这个节点,就可以在配置页面的另一个标签页”统计结果“中看到统计结果。 ![statistics-result](../images/statistics-result.png) 可以看到,除了都统计了数据的总条数和空值数之外,结果中对于离散和连续数据有着不同的处理:在”类型“列,离散数据标记为”category“,重点统计了该列中有多少个不同的分类类别,以及出现频率最高的类别的频率;而连续数据则标记为”numeric“,其中统计了均值、方差、若干分位数、异常值(离群值)等信息。 可以点击结果页右上角的“导出统计信息”按钮,将这份报告以CSV文件的格式导出,并下载到本地。 ### 类型转换 类型转换节点用于转换上游数据里任意字段的数据类型。可以看到,类型转换节点的配置页面列出了所有上游数据列,用户可以在”转换类型“这一栏的下拉菜单中选择一个适当的数据类型。如果转换类型和原始类型不一致,在运行时会转换该列的数据类型。用户还可以指定转换后生成字段的别名。 ![type-cast](../images/type-cast.png) ### 物化功能 在“数据处理”章节中使用“筛选”等节点时,可以注意到节点配置页面最下方有一个”数据物化“选项。大部分”数据处理“类型的节点都包含这项配置,包括上文介绍的筛选、合并、连接、衍生、去重、分组、排序等。 ![materialize](../images/materialize.png) 当选定这一项并保存时,画布上节点会多出一个表格状的指示图标,如下图所示。当执行完这个节点后,就完成了物化动作。 ![materialize-node](../images/materialize-node.png) 物化功能用来帮助用户临时存储运算的中间结果。一个节点完成物化之后,会存储上游的执行结果,相当于在流程中建立了一个中继点,在下游某个节点进行“运行至此”或“从此运行”时,会从上游取最近的物化后节点,以该点作为数据源,执行部分。设置物化节点能有效避免一个很长的流程图每次都从源头数据开始执行。 例如下图中的例子,是两个数据量比较大的表做连接操作,执行起来耗时长,消耗资源大。可以设置“连接”节点处物化,储存中间结果。这样,在执行下游时,”连接“节点就可以视作一个新的数据源。 ![materialize-flow](../images/materialize-flow.png) 具体执行时,可以在”多层感知机“节点处点击右键菜单并选择”运行至此“,可以通过画布的动画效果观察到,“连接”节点的上游没有重复执行,只有下游的去重、建模等节点参与了这次运行。 ![materialize-flow-start](../images/materialize-flow-start.png) ## “特征工程”功能 特征工程相关节点是为了训练机器学习模型准备数据,所做的一系列数据清洗、特征创建、特征筛选等操作。 ### 独热编码 独热(One-Hot)编码节点用来对指定的数据列执行One-Hot编码操作。一个包含N个类别的特征字段,经过One-Hot编码后会转换为N列,并且同一条数据中只有其中一列为1,其他列为0。例如,一个4类的特征会转化成如下格式 ![onehot-meaning](../images/onehot-meaning.png) 第一部分选择编码字段。配置一个独热编码节点可选择多个列,并将对这些列分别进行编码操作,还可以在后面的输入框中修改结果字段的名称。 第二部分还可以筛选下游的保留字段。如图中所示,如果认为独热编码的原字段"workclass","native_country"不会再用到,可以在“选择显示字段”中手动去除这两列,让下游输出更加简洁。 ![onehot](../images/onehot.png) 预览执行结果如图所示,可以看到”workclass“由于总共有9种不同的类别,而One-Hot后的字段是一个9-1=8维的向量。这是因为One-Hot默认使用了哑编码(Dummy),舍弃掉了编码后信息冗余的一列。 ![onehot-out](../images/onehot-out.png) ### 字符串索引 字符串索引(String Indexing)节点用于将字符串类型的输入数据转换成用序号表示的数值特征。它与独热编码节点类似,但是更倾向于转换那些认为存在逻辑上的先后顺序的特征,例如成绩评分有A、B、C、D、E五种,可以确认按字母顺序排序,顺序靠前的一定优于靠后的,两两之间可以比较优劣,因此可以将这五类转换成1、2、3、4、5五个数值。 在配置时,字符串索引也与独热编码类似,选中多个列时,每个列都是独立进行转换的。此外字符串索引多出了有一个“序列化方式”的配置,是指在觉得每个类别的序号时,排序的逻辑是按照这个类别的出现频率高低,还是按照字母表顺序来进行。 ![stringindexer](../images/stringindexer.png) 节点执行结果如图所示,可见education字段被转换为序号类型。 ![stringindexer-prev](../images/stringindexer-prev.png) ### 主成分分析 中文名为主成分分析(PCA, Principal Component Analysis),是一种常见的数据降维方法,将原数据中的众多指标转化为少数的几个综合指标。 如图中示例所示,该PCA节点选择了7个字段进行降维操作,这些字段将会被降至3维,并且以”income_features“作为输出列名。 ![pca](../images/pca.png) 预览PCA节点的执行结果如图,可见降维后字段是一个3维的向量。 ![pca-prev](../images/pca-prev.png) ### 归一化 归一化(Normalization),是针对数值类型的特征数据,进行数据缩放的一种方法。 一次训练中的多个特征值,由于收集方法各异,量纲不同,数量级和数据分布很可能存在区别。数据缩放就是将这些特征指标缩放到相同的数量级上,有助于训练时的收敛更加平缓。 归一化节点提供的方法是“最大最小值归一化”(Min-Max Scale),用户设定好归一化之后数据的上下限,归一化后的数据一定会落在这个范围之内。一般来说,常见的范围上下界为[0, 1]和[-1,1]。 ![minmaxscaler](../images/minmaxscaler.png) ### 标准化 标准化(Standardization)和上一小节“归一化”类似,是数据缩放的一种方法。 标准化提供了两个选项:将数据的均值缩放到0和将方差缩放到1。和最大最小值归一化不同的是,标准化不会限制数据的取值范围,如果对处理后的数据取值有严格要求,应使用归一化。否则,标准化在数据不稳定时效果更好,不容易受到数据中的极端值影响。此外,在一些用距离度量相似性的分类、聚类算法中更适合使用标准化;在缩放后需要用主成分分析对数据降维时,也推荐使用标准化节点。 ![standardscaler](../images/standardscaler.png) ### 正则化 正则化(Regularization)节点与归一化、标准化不同,是对输入特征的每一行数据进行处理。处理后,每一行的向量的模被正则化为1。 用户可设置正则化的范数,如设置为1是绝对值范数,正则化后的向量绝对值之和为1;设置为2为欧氏范数,正则化后的向量平方和为1。 ![regularization](../images/regularization.png) ### 离散化 离散化是将连续的特征转换为离散的方法,也可以叫做特征分箱、特征分桶。离散化节点提供了三种方式: 手动分箱(二值化)是最简单的方法,也可以叫做二元分箱、阈值化。需要指定一个阈值,该字段的取值大于这个值,就会被转换为1;小于这个值则变为0。 手动分箱是二值化的扩展,允许指定多个阈值,并将特征转换为0,1,2,3...多个分箱。如果不确定数据一定分布在指定的分箱阈值范围之内,可以勾选“将正负无穷设为边界”,平台会自动在分箱阈值前后增加-inf,+inf两个阈值上下限,保证运行时不会有数据落在分桶边界之外。 第三种方法是等频分箱,也叫做分位数离散化。这种方法只需要指定分箱的份数,平台会自动计算分箱阈值,保证特征会被离散化成相应的份数,并且每份内的样本数近似相等。用户还可以指定计算阈值的精度。 ![discretizer](../images/discretizer.png) 此外,在设置离散化参数时,还可以打开“批量处理”开关。开启后,所有选中进行离散化操作的列都会使用相同的分箱配置进行处理。 ![discretizer-2](../images/discretizer-2.png) ### 空值填充 空值填充是自动化处理特征里的空数据的方法。空值填充节点中提供了四种填充方法: 均值和中位数填充适用于数值类型特征,是计算训练数据整体的平均值或中位数,遇到空值时自动填充的方法。 填充指定值则允许用户自行指定填充内容,如对缺失的数值填0,对缺失的字符串填"Unknown"等等。 舍弃空值是指遇到该特征为空值时,直接舍弃整条样本的方法。 每种空值填充方法后面都支持“指定空值”,即是人为规定什么样的数值为空,对符合条件的值也应用相应的空值处理方法。例如,数值为-1时视为空值,字符串等于"?"时视为空值等。 ![imputer](../images/imputer.png) 也可以打开“批量处理”开关,对节点内所有已选字段做统一的空值处理。 ## “机器学习”功能 “机器学习”目录按照机器学习建模流程,大致可分为训练模型、评估模型、使用进行预测这三个步骤。而训练模型时,按照模型的预测目标,大致可以分为二分类、多分类、回归、聚类、关联规则等类别,在菜单中这样排布: ![ml-menu](../images/ml-menu.png) ### 训练节点 “机器学习”目录下的“二分类”,“多分类”,“回归”,“聚类”,“关联规则”是使用不同的算法,根据输入数据训练出机器学习模型的功能节点。这种训练节点的上游是“数据输入”,下游是“模型输出”。根据训练目标不同,分为以下几类: **分类算法** 分类算法包含: - 决策树 - 随机森林 - 分布式随机森林 - 梯度提升树 - 多层感知机 - 线性SVM - 朴素贝叶斯 - 逻辑回归 - AutoML分类* - XGBoost - DeepLearning “二分类”,“多分类”都属于分类算法,训练出的模型是输入若干特征数据字段,判断这条数据属于哪一类别。例如,根据银行每条交易流水的交易特征,预测这条交易是否是违法交易。上述例子的预测结果只有“是”和“否”这两种类别,因此属于“二分类”;若分类结果多于两个,则属于“多分类”。 配置分类算法训练节点时,需要指定不少于一个的特征字段,也需要指定唯一一个分类的目标字段(目前只支持单个分类目标)。这个目标字段一般为字符串形、整形等。 ![ml-train-bin](../images/ml-train-bin.png) 选择完特征和目标字段之后,根据选择的算法不同,还需填写不同的超参,如图所示。鼠标划过参数旁边的图标时,会显示参数的详细解释。根据训练数据配置合适的超参有助于提升训练出的模型的表现。 ![ml-rf-conf](../images/ml-rf-conf.png) *注:与其他算法只训练单一模型不同,AutoML分类算法是进行自动化机器学习、自动参数调优的方法。AutoML在搜索模型结构时,搜索范围包含了如下算法: - 广义线性回归 - 分布式随机森林 - 梯度提升树 - 深度学习 - 集成方法 - XGBoost 在训练过程中,分布式AutoML引擎会对这些算法进行算法选择,并对每个算法的超参进行自动化调优。 在配置AutoML节点时,合理设置其中的一些参数可以有助于合理地限制AutoML训练消耗的时间和内存空间,例如: max_models: 限定训练过程中最多建立多少个模型 max_runtime_sec: 限制模型训练的最长持续时长 save_model_limit: 训练完成后保存评分最高的多少个模型(TopN)。训练完成后,可以在模型的详情页面中查看这N个保存下来的模型的详细历史记录,也可以自由切换当前激活使用的是哪个模型。 **回归算法** 回归算法包含: - 决策树 - 随机森林 - 分布式随机森林 - 梯度提升树 - 线性回归 - AutoML回归* - XGBoost - DeepLearning 回归算法与分类算法不同,是输入若干特征数据字段,根据这些特征给出一个预测数值。例如,给出一系列的房屋属性,预测这个房屋的成交价格。配置训练节点时,目标字段一般选择浮点类型。 ![ml-train-reg](../images/ml-train-reg.png) 回归节点根据算法不同,也需要配置不同的超参 ![ml-rf-conf2](../images/ml-rf-conf2.png) **聚类算法** 聚类算法包括Kmeans、二分Kmeans、DBScan、孤立森林等算法 聚类算法与上述分类、回归算法不同,属于无监督学习的方法,在配置时只指定特征列,不选择标签字段,而是靠模型自行寻找数据分布规律,并给出对类型的判断。例如,提供若干条对花朵尺寸的描述特征,将这些花按相似性聚集成三组。 聚类算法同样有需要配置的参数。其中最重要的是n_cluster聚类中心的个数,直接决定了模型会将数据划分成几组,应按照实际情况来调整。 ![ml-train-clu](../images/ml-train-clu.png) ### 预测节点 所有分类、回归模型共用同一种预测节点。预测节点有两个输入,左侧输入模型,右侧输入被预测的数据。预测节点会将预测结果数据输出给下游。 ![pred-node](../images/pred-node.png) 连接好预测输入并开始编辑时,预测节点会首先检测输入的数据是否符合模型输入的要求,若有字段名称或类型不匹配的情况,会报错并无法进行下一步配置。 预测节点中可以配置数据输出的形式。首先需要选择将预测数据中的那些字段原样输出。原样输出字段有助于对应上相关数据的ID值,以及帮助下游评估预测结果等。 此外,分类模型预测结果会输出三条预测字段:分类名称、置信度和详细信息,如图所示,“income”是真实字段,“classes”是模型预测的分类名称,其形式和原字段相同。”probability“是置信度,是一个0~1之间的数值,表给出当前预测值的确信程度。”probabilities“是详细信息,记录了每一个分类各自的置信度。 ![pred-node-cls](../images/pred-node-cls.png) 而回归模型、聚类模型预测则会输出一列预测结果,一般为一个浮点型数据。 ![pred-node-reg](../images/pred-node-reg.png) 如果在训练节点中选择了with_contributions,那么在进行预测的时候,可以设置“特征SHAP值”的输出列名,这样,在预测节点的每条输出数据中,都会附带有一个SHAP值的列,来表示每个特征在预测结果中的贡献程度,从而有效地对模型的预测过程做出解释。 ### 评估节点 评估节点用来评价模型训练的好坏,不同类型的模型需要使用不同的评估节点。 **二分类评估** 首先,二分类和多分类模型的评估就有根本上的不同。以下是一个二分类模型从训练到评估的常见流程,可以看到,评估节点是查看预测节点的预测结果表,将模型给出的预测值和真实值做对比的。 ![eval-bin](../images/eval-bin.png) 配置二分类评估时,只需要用到“评估参数”这一个标签页,首先,选择评估数据中真实的标签字段,再选择模型输出预测标签字段(默认名称为"classes"),在选择模型输出的预测的置信度字段(默认名称为"probability") ![eval-bin-conf](../images/eval-bin-conf.png) 当二分类评估节点的状态为“执行完成”时,就可以重新打开二分类评估节点,查看评估结果。在“结果总览”页面,展示了所有计算出来的评估参数。可以点击右上角的“导出评估信息”按钮,导出评估报告文件并下载到本地。 ![eval-bin-rst3](../images/eval-bin-rst3.png) 而在二分类评估特有的“混淆矩阵”,“比例矩阵”页面中,可以查看二分类评估得到的混淆矩阵和p-r曲线,并且可以用拖动的方式调整阈值,寻找最优的查全率、查准率配置。 ![eval-bin-rst2](../images/eval-bin-rst2.png) **多分类评估** 一个基本的多分类训练和评估的流程如图: ![eval-multi](../images/eval-multi.png) 多分类评估时,不选择预测结果的置信度,而是选择真实的类别,和模型输出的预测类别,评估节点将会对比这两个字段。 ![eval-multi-conf](../images/eval-multi-conf.png) 当多分类评估执行完成后,双击节点查看执行结果。在总览里,评估节点给出了整体的准确度和各个分类类别各自的precision、recall。可以点击右上角的“导出评估信息”按钮,导出评估报告文件并下载到本地。 ![eval-multi-rst](../images/eval-multi-rst.png) ![eval-multi-rst2](../images/eval-multi-rst2.png) **回归评估** 回归模型训练和评估的流程如图: ![eval-regre](../images/eval-regre.png) 回归评估时,选择样本的真实值和模型输出的预测值做 对比。 ![eval-regre-conf](../images/eval-regre-conf.png) 当回归评估执行完成后,双击节点查看执行结果。这里给出了回归结果的R^2、MAE、RMSE等指标。可以点击右上角的“导出评估信息”按钮,导出评估报告文件并下载到本地。 ![eval-regre-rst](../images/eval-regre-rst.png) **聚类评估** 如图所示,“聚类”算子的下方有两个输出端口,左侧是数据输出,输出了训练数据的聚类结果,可以直接接“聚类评估”节点进行训练效果的评估。右侧输出了聚类模型,也可以接“预测”算子,在评估数据上进行预测,预测结果同样可以接“聚类评估”算子,评价模型的聚类效果。 ![eval-clus](../images/eval-clus.png) 聚类评估的配置如图所示,分别要选择所有参与聚类的特征列,及聚类的结果列。 ![eval-clus-conf](../images/eval-clus-conf.png) 聚类模型的评估使用了轮廓系数作为评估指标,评估结果如图所示。可以点击右上角的“导出评估信息”按钮,导出评估报告文件并下载到本地。 ![eval-clus-rst](../images/eval-clus-rst.png) ## “已训练模型”功能 “已训练模型”菜单中按照建模任务名的方式组织并展示当前用户的所有模型。例如,图中可见用户在名为“bin_eval”的任务中训练过2个模型。菜单中还包含两个特殊的文件夹:“当前任务”文件夹保存目前正在操作的任务里训练过的模型,而一些已经删除的任务中遗留的模型可以在“其他”文件夹中找到。 ![trained_model](../images/trained_model.png) 将某个“已训练模型”拖到图中可以建立起相应的模型节点,它的输出是模型输出,可以用来做预测节点的模型输入,相当于直接调用历史训练好的模型进行预测。 ![trained_model_node](../images/trained_model_node.png) 双击创建好的“已训练模型”节点,可以查看模型的信息和配置的超参。 ![model-detail](../images/model-detail.png) 如果使用过该模型进行评估操作,那么最近一次的评估结果也会显示在模型页面中。例如图中的例子,可以看到该二分类模型上次评估的K-S评价,混淆矩阵和P-R曲线,也可以在页面上更新模型使用的阈值。 ![model-detail2](../images/model-detail2.png) ![model-detail3](../images/model-detail3.png) ## "数据可视化"功能 “数据可视化”菜单中展示出所有可用的图表类型。若可视化节点的上游直接是数据集中的表时,那么可以直接对其进行可视化。若可视化节点的上游时数据操作节点,那么需要点击画布右上角的“运行”按钮,在可视化节点内部生成一个可供查询的表来进行可视化操作。下面简单展示3种图表类型,其它类型也是类似的操作。 ### 直方图 首先将数据表和直方图拖入画布中,然后双击点开直方图节点。如图所示,会展示出直方图的具体的配置方式。第一部分展示当前要分析的数据集,包含数据表名称,数据列以及类型,同时可以搜索该列。第二部分需要填写一些生成“直方图”所需要填写的参数,这里对于不同的图表类型来说,参数是不同的。填写好我们想要分析的列之后,点击运行按钮,可以在第三部分看到生成的图表。 ![zhifangtu](../images/zhifangtu.png) 第一次打开可视化节点的时候,当前图表是未保存状态。我们生成图表之后,点击保存按钮,会出现如下弹框。填写对应的图表名称并保存,下一次打开该节点的时候,就可以看到上一次保存的参数。 ![save_chart](../images/save_chart.png) ### 桑基图 本小节简单介绍一下桑基图的配置方式。桑基图最明显的特征就是,始末端的分支宽度总和相等,即所有主支宽度的总和应与所有分出去的分支宽度的总和相等,保持能量的平衡。如图所示,选择性别/是否少数民族这两个字段,即可显示出能量对比。 ![sangji](../images/sangji.png) ### 箱线图 本小节简单介绍一下箱线图的配置方式。箱线图主要利用一组数据的上边缘、下边缘、中位数和两个四分位数;然后, 连接两个四分位数画出箱体;再将上边缘和下边缘与箱体相连接,中位数在箱体中间。如图所示,选择某个字段的SUM值分析,运行即可展示出箱线图。 ![box_plot](../images/box_plot.png)