输入数据源

简介

BML支持两类数据源:CSV/TSV格式的数据、BML专属格式的数据。请根据您的数据特点选择使用数据处理组件处理您的CSV/TSV格式的数据,或准备BML专属格式的数据。百度智能云提供了BML专属格式的样例数据,您可直接使用样例数据。

使用数据处理组件处理CSV/TSV格式的数据

BML支持文件类型为CSV和TSV的数据,可根据您的数据特点选择数据处理组件,可选组件简介如下:

  • 编辑元数据:编辑数据源的meta信息,包括如下内容:
    • 修改列的名称。
    • 修改列的数据类型(目前支持的类型有字符型string,数字型numeric和时间time)。
    • 修改列的角色(目前支持的角色有特征feature,标签label,权重weight,样本标识符identifier和无用unused)。
    • 修改列的其他属性(不同的数据类型和角色所支持的属性不同)。
  • 清理数据:
    • 把用户指定的某一列的值替换为新的值。
    • 如果某列的值等于用户指定的值,则删除该值所在的整行样本。
  • 转换数据:
    • 将numeric类型的数据离散化为string类型。
    • 分解time类型的数据,提取用户指定的部分(如year,mon,day等)。
    • 分组string类型的数据(如将城市:香港、台湾、北京、天津,分组为直辖市与港澳城市)。
    • 剪裁numeric类型的数据,清除异常值。
  • 组合列:组合某些列生成新的特征列,从而扩充特征;组合某些列生成的新的标签列。用于组合的列的数据类型必须是string。用列值连接符连接各个列的值,作为组合的列的值。
  • 采样:对数据随机采样。
  • 选择列:从输入数据源中选择一部分列作为输出。
  • 去重:根据用户指定的列从输入数据源中移除重复的行,重复的行是指用户所指定的列的值都相等的行。
  • 连接:根据用户指定的列,对两个输入数据源执行连接操作。

操作步骤

  1. 将CSV文件或TSV文件上传至BOS。BML目前仅支持从对象存储BOS读取数据,因此,在上传数据前,您需要开通BOS服务,在BOS上创建一个新的Bucket,并把您要训练/测试的数据上传到BOS中,通常可按照目录来组织数据,如每天一个子目录。具体操作请参考上传数据至BOS
  2. 打开“产品服务>百度机器学习BML-实验列表”,点击“创建实验”,进入创建实验页面。
  3. 拖拽左侧导航的“输入数据源”至中间空白处,在右侧“参数配置”区配置如下参数:
    • 数据源路径:输入BOS Bucket路径地址。BML数据集只获得该路径下的非目录的文件作为输入,不会递归处理子目录下的文件。路径支持匹配符格式,如果需要递归的获得目录下子目录输入数据,请在Input参数中添加匹配符表达式(和标准的linux的ls的匹配符一致)。如需要获得所有两层子目录下的part00-part03开头的所有文件,则路径格式为:bos://bucketName/object/*/*/part0[0-3]*。目前支持.gz格式的压缩文件。
    • 数据格式:选择默认项“通用类型”并选择对应的文本文件“CSV”或“TSV”。
    • 列分隔符:指定输入文件的列分隔符。
    • 字符编码:UTF-8。
    • 包含标题行:选择是否包含标题行。
    • 描述:输入描述信息。
  4. 点击“分析数据源”后弹出分析数据源提示框并开始分析数据源,分析结束后对话框自动消失。
  5. 选择某一个或几个数据处理组件并拖拽至中间空白处,连接“输入数据源”与数据处理组件,点击组件可在右侧编辑该数据处理组件,每一数据处理组件对应的配置参数不同,具体如下:

    • 编辑元数据:默认可编辑一列,可通过点击参数配置区的“添加操作”按钮对多个列编辑元数据。
    参数 是否可选 默认值 参数说明
    请选择列 必选 指定要操作的列名,需支持按正则表达式搜索和提供下拉列表。
    数据类型 必选 字符型string 指定列的新数据类型。
    时间格式 可选 %Y-%m-%d %H:%M:%S 指定列的新的时间格式,只有数据类型为“time”时此项才有意义,支持的时间格式为:%Y-%m-%d %H:%M:%S,用户可以指定该格式的子集,其他时间参数暂不支持。
    角色 必选 特征feature 指定列的新角色。
    重命名 可选 指定列的新名称。
    列分隔符 可选 指定输入文件的列分隔符,只有角色为feature并且数据类型为string时才需指定该参数,如果不指定,则默认为空,即只包含一个子特征。
    例如,当一个用户有多个兴趣时,可以使用列分隔符来分隔不同兴趣。
    描述 可选 指定列的新的描述。
    • 清理数据:默认可清理一列,可通过点击参数配置区的“添加操作”按钮对多个列清理数据。
    参数 是否可选 默认值 参数说明
    请选择列 必选 指定要操作的列名,需支持按正则表达式搜索和提供下拉列表。
    清理方法 必选 替换 替换:把用户指定的值替换为新的值。
    删除:如果某列的值等于用户指定的值,则删除该值所在的整行样本。
    列的值 必选 指定列的值,当列的数据类型为字符型时,可以使用正则表达式,且正则表达式是部分匹配,即等价于regex_search。
    误差 必选 1e-08 指定浮点数比较误差,当数据类型为“数值类型”时此项才有意义。即如果a-b的绝对值<误差,则a等于b。
    替换为 必选 指定列的新值,当清理方法为“替换”时此项才有意义。
    • 转换数据:默认可转换一列,可通过点击参数配置区的“添加操作”按钮对多个列转换数据。
    参数 是否可选 默认值 参数说明
    请选择列 必选 指定要操作的列名,需支持按正则表达式搜索和提供下拉列表。
    转换方法 必选 离散化 目前支持:离散化、分解、分组、剪裁四种方法。
    离散化系数a 必选 1.0 指定离散化系数,当转换方法为“离散化”时此项才有意义。离散化公式:对(离散化系数a*列的值+离散化系数b)的结果进行四舍五入。
    离散化系数b 必选 0.0 指定离散化系数,当转换方法为“离散化”时此项才有意义。离散化公式:对(离散化系数a*列的值+离散化系数b)的结果进行四舍五入。
    提取的时间 必选 指定需要提取的时间部分,当转换方法为“分解”时此项才有意义,支持的时间字段为:年、月、日、时、分、秒、星期、一年中的第几天。
    分组后的默认值 必选 指定分组后的值,当转换方法为“分组”时此项才有意义。
    分组规则 可选 指定分组前后值的映射关系,当转换方法为“分组”时此项才有意义。
    下限阈值 必选 -1.79769e+308 指定下限阈值,当转换方法为“剪裁”时此项才有意义。
    上限阈值 必选 1.79769e+308 指定上限阈值,当转换方法为“剪裁”时此项才有意义。
    • 组合列:默认可组合一次列,可通过点击参数配置区的“添加操作”按钮多次组合列数据。
    参数 是否可选 默认值 参数说明
    请选择列 必选 指定要操作的列名,如果指定的列名不存在,则报错。
    组合后列的名称 必选 column0_clolumn1 指定列的新名称,自动填充默认值。
    组合后列的角色 必选 特征feature 指定列的新角色。
    列值连接符 必选 下划线 指定连接各个列的值的连接符。例如,当列值连接符设置为下划线时,组合前列的名称和取值分别是“城市:北京,爱好:足球,电影”,组合后列的名称和取值为“城市爱好:北京足球,北京_电影”。
    组合后列的描述 可选 由列0,列1...组合而成 指定列的新描述。例如,当列值分割符为逗号时,组合前列的名称和取值分别为“城市:北京,爱好:足球,电影”,组合后列的名称和取值为“城市爱好:北京足球,北京_电影”。
    列值分隔符 必选 参与组合的列中定义的第一个分隔符 指定列的新的分隔符。
    • 采样
    参数 是否可选 默认值 参数说明
    采样比例 必选 1.0 指定采样比例,必须是0~1之间的浮点数。
    分层采样的列 可选 指定选择一列做分层采样。
    分层采样的设置 可选 指定分层采样列的取值所对应的采样比例,如未指定,则使用全局采样比例。
    • 选择列
    参数 是否可选 默认值 参数说明
    请选择列 必选 选择需要保留或移除的列。
    处理方法 必选 移除 指定处理方法,支持保留和移除两种处理方法。
    • 去重
    参数 是否可选 默认值 参数说明
    去重依据 必选 指定基于哪些列去重,如果指定的列名不存在,则自动忽略。
    • 连接
    参数 是否可选 默认值 参数说明
    左数据源连接列 必选 指定左数据源用于连接的列,至少指定一列,如果指定的列名不存在,则报错。
    右数据源连接列 必选 指定右数据源用于连接的列,至少指定一列,如果指定的列名不存在,则报错。左右两侧用于连接的列个数必须相等且顺序要一一对应。
    连接方式 必选 内连接 支持内连接、左外连接、全外连接和左半连接。
    内连接:当左右键值匹配时,返回符合条件的组合行。
    左外连接:返回左数据源中的所有行,如果右数据源没有匹配的行,则返回空值。
    全外连接:返回左数据源和右数据源的所有行,如果没有匹配行,则返回空值。
    左半连接:和内连接类似,当左右键值匹配时,仅返回左数据源符合条件的行。
    是否保留右数据源用于连接的列 必选 指定是否在连接后的数据源中保留右数据源中用于连接的列。
  6. 拖拽左侧导航的“输出数据集”至中间空白处,连接数据处理组件与“输出数据集”,创建数据集的具体操作请参考输出数据集

准备BML专属格式数据

数据格式

数据需符合以下表中的数据格式。

数据格式 英文名 举例 说明
稀疏不带权重值 SparseID No,label,feature1,feature2......featureN sample里出现feature对应的权重为1。
每行sample的feature个数可以不统一
稀疏带权重值 SparseIDWeight No,label,feature1 weight1,feature2 weight2...... featureN weightN sample里出现feature对应的权重为对应的weight值,
每行sample的feature个数可以不统一,
feature和weight之间空格分离
稠密数据 Dense No,label,weight1,weight2......weightN sample里出现feature编号规定为1,2......N,
对应的权重为weight1,weight2......weightN,
每行sample的feature个数统一为N,必须相等

数据格式限制

  • No为每行样本的编号,没有通用的限制,可以为空。样本编号帮助用户定位每一条样本,因此最好保证在该数据集内样本编号唯一,生成数据集过程中,不会对样本编号做任何操作。
  • label为每行sample的标签值,支持离散的数值和字符串,主要在监督算法中作为目标值使用,对于非监督的算法可以为空。
  • featureN为每行sample的具体特征标签,支持离散的数值和字符串。
  • weightN为每行sample的具体特征标签对应的权重,支持离散和连续的数值。
  • 以上为空的情况该字段的位置即对应的分隔符依然要保留,例No为空的情况下,数据格式为,label,feature1,feature2...;label为空的情况下,数据格式为No,,feature1 weight1,.......

注意:

  • No、label、feature中不能有逗号和空格,weight必须是一个合法的数值。若有逗号或空格,请提前转义。
  • 用户数据的每个字段不能超过1000个字符,若超过1000个字符,该字段超过的部分会被忽略。

算法限制

  • 逻辑回归LR算法目前只支持二分类的应用场景,即训练数据或评估数据中的总label数必须为2,若不满足该情况,提交时会返回失败。
  • 主题模型LDA算法只支持SparseIDWeight格式的数据。
    • 主题模型LDA算法的原始数据为COOC(文档-词语共现信息)。
    • 主题模型LDA算法为非监督算法,label字段没有意义,可以为空。
    • No字段意义为文档编号,feature字段意义为词语原文或id,weight字段为词语权重,可以为原始词频或tfidf化后的词频。
  • 协同过滤CF算法只支持SparseIDWeight格式的数据,并要求原始数据的No字段(数据的第一列),必须存在且为整形数,不要求连续有序。
    • 协同过滤CF算法的原始数据为商品历史评分数据。
    • 协同过滤CF算法为非监督算法,label字段表示商品名或用户名,可以为空。
    • 各字段的意义:
      • 训练数据,No字段为商品ID,feature字段为用户ID,weight字段为用户对这个商品的评分。
      • 批量预测数据,users file。No字段为用户ID,feature字段为商品ID,weight字段为用户对商品的评分。
      • 模型评估数据,有两个原始数据,其中一个是users file和批量预测中说明的一样,另一个真实的评估结果数据,其格式为:No字段为用户ID,feature字段为推荐的商品ID,weight字段为推荐计算的分数。
  • 梯度提升决策树GBDT算法目前只支持二分类的应用场景,训练数据和评估数据中的label只能有两种。数据集固定为Sparse_ID_Weight。

数据格式示例

对于『人』:

  • 使用名字来标识一个单独的人,『张三』,『李四』。
  • 使用『是否是程序员』作为Label,假设『张三』是程序员,『李四』不是程序员。
  • 四个特征:『是否喜欢篮球』,『是否喜欢足球』,『是否喜欢乒乓球』,『是否喜欢动画』

已知,『张三』是程序员,且不喜欢篮球,不喜欢足球,不喜欢乒乓球,喜欢动画。那么『张三』这个sample的数据格式如下表所示:

格式类型 样例 说明
稀疏不带权重 张三,是程序员,喜欢动画 由于张三只有『动画』这一维不为0,所以sample里只有一个『动画』,sample中未出现的特征都视为0
稀疏带权重 张三,是程序员,喜欢动画 1 由于张三只有『动画』这一维不为0,所以sample里只有一个『动画』标注了1,sample中未出现的特征都视为0
稠密数据 张三,是程序员,0,0,0,1 『0,0,0,1』对应着『不喜欢篮球,不喜欢足球,不喜欢乒乓球,喜欢动画』

李四不是程序员,喜欢篮球,喜欢足球,不喜欢乒乓球,喜欢动画,『李四』这个sample的数据格式如下表所示:

格式类型 样例 说明
稀疏不带权重 李四,不是程序员,喜欢篮球,喜欢足球,喜欢动画 /
稀疏带权重 李四,不是程序员,喜欢篮球 1,喜欢足球 1,喜欢动画 1 /
稠密数据 李四,不是程序员,1,1,0,1 『1,1,0,1』对应着『喜欢篮球,喜欢足球,不喜欢乒乓球,喜欢动画』

若将四个特征更换为『喜欢篮球的程度』,『喜欢足球的程度』,『喜欢乒乓球的程度』,『喜欢动画的程度』。

那么『张三』是程序员,喜欢篮球的程度是0,喜欢足球的程度是3,喜欢乒乓球的程度是0,喜欢动画的程度是5。(程度为0代表完全不喜欢,程度为5代表非常喜欢。)这个sample的数据格式如下表所示:

格式类型 样例 说明
稀疏不带权重 张三,是程序员,喜欢足球的程度 3,喜欢动画的程度 5 /
稠密数据 张三,是程序员,0,3,0,5 『0,3,0,5』对应着『喜欢篮球的程度是0,喜欢足球的程度是3,喜欢乒乓球的程度是0,喜欢动画的程度是5』

操作步骤

  1. 将BML专属格式数据上传至BOS。BML目前仅支持从对象存储BOS读取数据,因此,在上传数据前,您需要开通BOS服务,在BOS上创建一个新的Bucket,并把您要训练/测试的数据上传到BOS中,通常可按照目录来组织数据,如每天一个子目录。具体操作请参考上传数据至BOS
  2. 打开“产品服务>百度机器学习BML-实验列表”,点击“创建实验”,进入创建实验页面。
  3. 拖拽左侧导航的“输入数据源”至中间空白处,在右侧“参数配置”区配置如下参数:
    • 数据源路径:输入BOS Bucket路径地址。BML数据集只获得该路径下的非目录的文件作为输入,不会递归处理子目录下的文件。路径支持匹配符格式,如果需要递归的获得目录下子目录输入数据,请在Input参数中添加匹配符表达式(和标准的linux的ls的匹配符一致)。如需要获得所有两层子目录下的part00-part03开头的所有文件,则路径格式为:bos://bucketName/object/*/*/part0[0-3]*。目前支持.gz格式的压缩文件。
    • 数据格式:选择“BML专属”,并选择数据特征“稀疏特征”,“稀疏带权特征”,或“稠密特征”。
    • 描述:输入描述内容。
  4. 点击“分析数据源”后开始分析数据源。
  5. 拖拽左侧导航的“输出数据集”至中间空白处,具体操作请参考输出数据集

BML专属格式数据样例

某电商平台的广告展现点击数据

样例数据公共可读,您可通过如下地址访问:

  • 训练模型的数据路径:bos://bml-sample-data/ctr/train_data
  • 评估模型/预测的数据路径:bos://bml-sample-data/ctr/test_data(评估和预测均可用这份数据)

数据样例如下:

1,0,6526 1,120954 1,148848 1,211353 1,272299 1,53068 0.333333,181083 1,66374 1,243630 0,25606 0,162749 1,14810 1,125722 0,183122 1,87335 0,164481 0,272402 0,251866 0,192599 0.110535,169065 0.15,272878 0,40318 0.543478,178379 0.172668,2414 0.90092,144282 1,60875 1
1,0,6526 1,120954 1,148848 1,211353 1,272299 1,53068 0.37037,181083 1,66374 1,243630 0,25606 0,162749 1,14810 1,125722 0,183122 1,87335 0,164481 0,272402 0,251866 0,192599 0.110535,169065 0.15,272878 0,40318 0.543478,178379 0.172668,2414 0.90092,144282 1,60875 1

格式说明:

  • 每一行样本为一个广告展现场景,各列间以半角逗号分离。
  • 第一列为每个场景的样本id,第二列为该广告展现后是否被点击(0为未点击,1为已经点击),后续每列为提取的特征和对应的权重,以空格分离。(示例里展现的特征都是id化后的数字id)

电影的用户评分数据

样例数据公共可读,您可通过如下地址访问:

  • 训练模型的数据路径:bos://bml-sample-data/movie_recommendation/train_data
  • 预测的数据路径:bos://bml-sample-data/movie_recommendation/users_file
  • 评估模型的数据路径:
    • bos://bml-sample-data/movie_recommendation/users_file
    • bos://bml-sample-data/movie_recommendation/real_commendation_file

数据样例:

299,item_299,2173336 4,1392773 4,716091 2,2473170 4,2256305 5,1214457 3,1402412 5,1601783 3,...,1987434 4,1331154 4,765331
15762,item_15762,1648765 4,1296163 3,1109700 4,1945809 2,1696725 3,989704 5,2044720 5,749620 3,...,2027763 2,1977959
....
4372,item_4372,671513 5,551423 4,2460625 4,25382 3,348969 1,1079762 3,1588143 4,1109700 5,767012 5,...,719234 3,147748

格式说明:

  • 每一行代表一条样本,即每部影片所对应的所有用户评分(评分范围为1~5分)。用半角逗号“,”隔开。
  • 第1列代表影片ID,第2列代表影片名,第3列以后代表用户(ID,空格前)给影片的评分(空格后的数值)。