การเปลี่ยนแปลงทั่วไป

ในเอกสารนี้ เราจะอธิบายวิธีการแปลงทั่วไปด้วย tf.transform

เราถือว่าคุณได้สร้างคานไปป์ไลน์ตามตัวอย่างแล้ว และอธิบายเฉพาะสิ่งที่จำเป็นต้องเพิ่มใน preprocessing_fn และโมเดลที่เป็นไปได้เท่านั้น

การใช้ข้อมูลสตริง/หมวดหมู่

preprocessing_fn ต่อไปนี้จะคำนวณคำศัพท์เหนือค่าของคุณลักษณะ x ด้วยโทเค็นตามลำดับความถี่จากมากไปน้อย แปลงค่าคุณลักษณะ x เป็นดัชนีในคำศัพท์ และสุดท้ายทำการเข้ารหัสแบบร้อนแรงเดียวสำหรับเอาต์พุต

นี่เป็นเรื่องปกติ เช่น ในกรณีที่ฟีเจอร์ป้ายกำกับเป็นสตริงหมวดหมู่ การเข้ารหัสแบบร้อนแรงเดียวที่เกิดขึ้นนั้นพร้อมสำหรับการฝึกแล้ว

def preprocessing_fn(inputs):
  integerized = tft.compute_and_apply_vocabulary(
      inputs['x'],
      num_oov_buckets=1,
      vocab_filename='x_vocab')
  one_hot_encoded = tf.one_hot(
      integerized,
      depth=tf.cast(tft.experimental.get_vocabulary_size_by_name('x_vocab') + 1,
                    tf.int32),
      on_value=1.0,
      off_value=0.0)
  return {
    'x_out': one_hot_encoded,
  }

การใส่ร้ายเฉลี่ยสำหรับข้อมูลที่ขาดหายไป

ในตัวอย่างนี้ คุณลักษณะ x เป็นคุณลักษณะทางเลือก ซึ่งแสดงเป็น tf.SparseTensor ใน preprocessing_fn ในการแปลงเป็นเทนเซอร์แบบหนาแน่น เราจะคำนวณค่าเฉลี่ยของมัน และตั้งค่าค่าเฉลี่ยให้เป็นค่าเริ่มต้นเมื่อค่านั้นหายไปจากอินสแตนซ์

เทนเซอร์หนาแน่นที่ได้จะมีรูปร่าง [None, 1] , None แสดงถึงมิติข้อมูลแบทช์ และสำหรับมิติที่สอง จะเป็นจำนวนค่าที่ x สามารถมีได้ต่ออินสแตนซ์ ในกรณีนี้คือ 1

def preprocessing_fn(inputs):
  return {
      'x_out': tft.sparse_tensor_to_dense_with_shape(
          inputs['x'], default_value=tft.mean(x), shape=[None, 1])
  }