Day 14 : 资料验证 TensorFlow Data Validation (TFDV)

资料是机械学习重要的核心,用於生产的机械学习必须考量大量且快速的资料情境,使用自动化、可扩展的资料分析、验证以及监控方法相当重要。 TensorFlow Data Validation (TFDV) 为 Google 开源的资料验证模组,可做为用於生产的机械学习组件之一,也可以融入您在笔记本的研究流程。

什麽是 TensorFlow Data Validation (TFDV)

图片来源 TFX

  • Tensor Flow Data Validation (TFDV) 是个由 Google 开源的模组,平时可以作为 TensorFlow Extended (TFX) 的一个组件,也可以独立运用。
  • TFDV 可帮助开发人员大规模理解、验证和监控 ML 数据,Google 每天都使用这项技术来分析和验证数 PB 的数据(如: Gmail )。能及早捕获数据错误,帮助 TFX 用户保持其 ML 管道的健康。
  • TFDV 可以在 Notebook 环境中执行,方便衔接开发及部署的流程。说到流程,整个 TFX 大架构采用 Apache Beam 的数据处理框架, 如您不熟可以先当目前 Google 采用,类似 Hadoop 具有可水平扩展的框架理解。
  • TFDV 结合开源的 Facets ,是可以帮助理解和分析机器学习数据集的开源可视化工具,在 Google AI Blog 中展示了透过 Facets 视觉化抓出 CIFAR-10 资料集中一个错误分为猫咪的青蛙的图片。
  • TFDV 容许两个资料及之间的分布对照,例如训练资料与测试资料,迅速抓出资料飘移与偏斜情形,而 TFDV 更进一步可以做到修正与纳入新特徵,以及整合在笔记本及 TFX 之中。
  • 本篇先聚焦 TFDV ,大架构 TFX 後续再用专文介绍。

TFDV 可以做什麽

  • TFDV 可以分析训练和服务数据,并可在 Notebook 使用,用途包含:
    • 描述性统计分析、探索式资料分析 EDA。
    • 推断 Schema 。
    • 检测数据异常。
    • 修正数据异常。

从 TFDV API 认识功能

功能介绍引用 TFDV官方教学文件,也提供 Colab 实作范例 可直接执行,您可以相互参照。

建立环境

  • 引入tensorflow-data-validation 模组。
    !pip install tensorflow-data-validation
    
  • 如您使用 Colab ,有更动TensorFlow或安装TFX,请依指示安装完重新启动(Runtime > Restart runtime)。

TFDV 吃什麽

  • 输入为 csvDataFrameTF Record,变成可用统计数据。
    tfdv.generate_statistics_from_csv
    tfdv.generate_statistics_from_dataframe
    tfdv.generate_statistics_from_tfrecord
    

统计讯息视觉化

  • 直观呈现从数据生成的统计信息。
  • 红字表示 TFDV 觉得异常供您判断,下图为芝加哥计程车资料集里小费为 0 的有 68% ,相当直观。
    tfdv.visualize_statistics()
    

推断及显示资料的 Schema

  • 推断并建议初始 Schema,以及显示。
  • TFDV 自行推断 Schema,其中 Domain 的各文字属性也表列呈现。
    tfdv.infer_schema
    tfdv.display_schema
    

资料验证

  • 将新旧不同版本统计与Schema对照来检测异常。
  • statisticsserving_stats可检测训练服务偏差,previous_statistics可检测偏移。
    tfdv.validate_statistics
    
  • 以官方范本举例2版本统计对照写法与输出
    tfdv.visualize_statistics(
        lhs_statistics=eval_stats, 
        rhs_statistics=train_stats,
        lhs_name='EVAL_DATASET', 
        rhs_name='TRAIN_DATASET'
        )
    
    • 对照训练与评估资料集,有些分布不一致,会不会影响模型结果?

显示异常

  • 将徵测到的异常呈现及说明,轻松写意。

    tfdv.display_anomalies
    
    # Check eval data for errors by validating the eval data stats using the previously inferred schema.
    anomalies = tfdv.validate_statistics(statistics=eval_stats, schema=schema)
    tfdv.display_anomalies(anomalies)
    

  • Google TFDV 说明简报中,您可以看到左方为 资料与 Schema,右方红字为对照 Schema 的差异。

修复异常

  • 您可以依您的 Domain Knowledge 决定对异常采取的措施。如果异常表明数据错误,则应修复底层数据。否则,您可以更新纳入 Schema 以纳入。

  • TFDV 的异常处理参数请见官方文件,异常可能归类於资料型态的问题、未知 Domain 出现、超过数值边界值范围。

  • 如果已经发现异常 Domain 处理,官方范例可以参考,其一是放宽异常特徵的看法,其二将该特徵纳入Domain。

    # Relax the minimum fraction of values that must come from the domain for feature company.
    company = tfdv.get_feature(schema, 'company')
    company.distribution_constraints.min_domain_mass = 0.9
    
    # Add new value to the domain of feature payment_type.
    payment_type_domain = tfdv.get_domain(schema, 'payment_type')
    payment_type_domain.value.append('Prcard')
    
  • 另外您也可以透过Pandas操作DataFrame的方式整理资料,像是df.dropna()df=df[df['some_column']<100]进行筛选与过滤。Pandas 快速指引可以参阅10分钟的Pandas入门-繁中版

  • 再次检视异常处理情形:

    # Validate eval stats after updating the schema 
    updated_anomalies = tfdv.validate_statistics(eval_stats, schema)
    tfdv.display_anomalies(updated_anomalies)
    

    • 修正过关。

监测 Skew

  • TFDV 可以检测 Schema 偏斜、特徵偏斜和分布偏斜。
    # 对 payment_type 特徵加入 skew 比对
    payment_type = tfdv.get_feature(
        schema, 
        'payment_type'
        )
    payment_type.skew_comparator.infinity_norm.threshold = 0.01
    
    # 对 company 特徵增加 drift 比对
    company=tfdv.get_feature(
        schema, 
        'company'
        )
    company.drift_comparator.infinity_norm.threshold = 0.001
    
    skew_anomalies = tfdv.validate_statistics(
        train_stats, 
        schema,
        previous_statistics=eval_stats,
        serving_statistics=serving_stats
        )
    
    tfdv.display_anomalies(skew_anomalies)
    

储存 Schema

  • 设定好储存档案位置schema_file,将schema存为*.pbtxt,完整程序参见官方范例。
    tfdv.write_schema_text(schema, schema_file)
    

用於生产流程中的 TFDV

小结

  • TFDV 开源可独立作为模组运用,您可以输入 CSV,产生 Schema 用来验证後续的资料流有无异常,修正异常,建立检测门槛。视觉化的介面也可以胜任 EDA 用途,这麽香不应该只有我知道。
  • TFX 是端对端完整的资料工作流程,TFDV 可以融入其中,也基於中文文件缺乏故会多些篇幅介绍。
    /images/emoticon/emoticon34.gif

参考


<<:  30天零负担轻松学会制作APP介面及设计【DAY 05】

>>:  [Day14] 测试与迭代

Day30 下拉式选单小实作2

接着点选六个按钮(不要点选整个stack view),设定每个按钮的长宽和按钮与按钮的距离。 而後我...

从 JavaScript 角度学 Python(30) - 爬虫

前言 前面我们也已经学了不少的知识点,而这边也进入了铁人赛的最後一天,所以就来试着写一个简单的 it...

追求JS小姊姊系列 Day28 -- 工具人给不完的Promise,`你`都不要

前情提要: 简单介绍了很厉害的青梅竹马 工具人们:所以说人帅又强真好啊....你有看过昨天吵很凶的网...

[day 18] 自动布局

介绍 简单来说使用自动布局可能就是为了适配不同 iPhone 机型所发展的一个方法或框架? 总之我觉...

Day32 ATT&CK for ICS - Inhibit Response Function(4)

T0838 Modify Alarm Settings 攻击者修改设备的警告功能设定(如直接停止警告...