Day 15 : 特徵工程 tf.Tramsform 介绍

  • 特徵工程是机械学习相当重要的一环,有处理数据以及实行 ML/DL 任务经验者对特徵工程一定不陌生,一般来说常以 Pandas 及 Sklearn 完成任务,也有用 Excel 打天下,能够善用的就是好工具。
  • 到了用於生产的机械学习情境,前述的工具在使用上就有限制,首先您是在生产过程 Online 进行特徵工程,资料流底层可能是 Apache Spark , Flink 等批次/串流/分散式运算情境,对於不同特徵的特徵工程计算会有时差、等待等情形,您所熟悉的模组恐怕较难因应。
  • 基於前述想法,本篇介绍常用的特徵工程,并介绍用於生产中的机械学习 TFX 中的特徵工程组件 tf.Tramsform

用於生产的特徵工程 tf.Tramsform

  • tf.Tramsform 做 TFX 的其中一个组件,主要任务为特徵工程。

  • tf.Tramsform 为能运用在平行运算可扩展的丛集环境,系基於 Apache Beam 的框架,您所写的TFT特徵工程操作,虽然写起来像 TensorFlow ,底层已转化为用 Beam 计算。

  • 您安排好的特徵工程通常写在preprocessing_fn()自订函式中,譬如某些特徵的资料型态转换、资料清洗、标准化等,甚至可能复数特徵进行Bucketize、Feature Cross 等,把特徵工程的逻辑写入,您也可以设想,现在的工作是在之後部署时面对「未知」资料流的资料工程手段。

  • 接着我们把焦点聚焦到「训练」与「部署」的情形,在 TensorFlow Dev Summit 2018 介绍 tf.Tramsform 用於生产阶段式转化为 tf.Graph 的运作,转换为tf.Graph 最大好处是可以摆脱对 Python 编译器的依赖,可以实现 TensorFlow 并行并在多个设备上高效运行,这样的转换带来训练资料与部署时的特徵工程作业一致,也带来在不同装置环境一致的好处,消逆了Training-Serving Skew

  • 举例有 X, Y, Z 等3个特徵,分别进行特徵工程,并且在分散式的运算情境中进行。

  • 前述的运算在 tf.Tramsform 称之为Analyze,分析出的计算套在tf.Graph 运算,两者情境感受一致。

  • 最後您可以用tft.apply_save_model 储存模型。

特徵工程与 tf.Tramsform 模组常用方法整理

  • 数值范围的特徵工程

    • Scaling
    • Normalizing
    • Standardizing
      tft.scale_to_z_score
      tft.scale_0_to_1
      tft.scale_to_qaussian
      
  • 群组化的特徵工程

    • Bucketizing
      tft.bucketize
      tft.quantiles
      tft.apply_buckets
      
  • 词汇型的特徵工程

    • Bag of words
    • TF-IDF
    • Ngrams
      tft.bag_of_words
      tft.tfidf
      tft.ngrams
      tft.string_to_int
      
  • 降维的特徵工程

    • PCA
      tft.pca
      
  • 特徵编码的特徵工程

    • One-Hot encoding
    • Embedding
      #0-N
      pandas.factorize() 
      sklearn.preprocessing.LabalEncoder() 
      
      #One-Hot
      tf.one_hot
      pandas.get_dummies()
      sklearn.preprocessing.OneHotEncoder()
      
  • 组合特徵的特徵工程

    • Feature crossing
      tf.string_join
      tft.string_to_int
      

小结

  • 特徵工程是机械学习的大事,本篇试图介绍 TFX 的特徵工程组件 tf.Tramsform ,主要是因为网路上特徵不缺乏特徵工程教学,但用於生产的机械学习解决方案考虑比较严谨,可以看到 tf.Tramsform 为了能在生产环境运行,底层采用 Apache Beam,并且转化为 tf.Graph 来实现高速、并行、不局限 Python 环境的特徵工程,这在部署在服务器、web、手机装置有较好的适应能力。
  • 後续将介绍实际运行的程序,会更清晰,我们明天见。

/images/emoticon/emoticon07.gif

参考


<<:  DAY 3 『 RGB调色盘 - 每个物件的功能 』Part2

>>:  [Day15]Prime Gap

[13th][Day10] registry

列出现有的 image docker images 还记得之前在 docker run 时同时进行了...

Day-14 请说明 Ruby 中的 self 是什麽意思?

我们常常会在程序里看到 self 这个字,但是他到底是什麽?初心者一定困惑的一个字。 我觉得在 R...

D18 -「脉冲×宽度×调变」:建立控制组件

再来就是实际建立透过 select 选择的脚位,并建立相关 Firmata 功能。 建立 PWM 控...

进击的软件工程师之路-软件战斗营 第六周

学习进度 游戏专题 Delay 地图编辑器使用 (自学)人物移动&转向 (自学)子弹360度...

第12车厢-table界的神器!DataTables介绍篇(2)

延续上篇<第11车厢-table界的神器!DataTables介绍篇(1)>,今日再介...