การเข้ารหัสแบบฮ็อตเดียวในเทนเซอร์คืออะไร


11

ขณะนี้ฉันกำลังทำหลักสูตรเป็นเมตริกซ์ซึ่งพวกเขาใช้ tf.one_hot (ดัชนีความลึก) ตอนนี้ฉันไม่เข้าใจว่าดัชนีเหล่านี้เปลี่ยนเป็นลำดับไบนารีได้อย่างไร

ใครช่วยอธิบายกระบวนการที่แน่นอนให้ฉันได้ไหม

คำตอบ:


14

สมมติว่าคุณมีคุณสมบัติเด็ดขาดในชุดข้อมูลของคุณ (เช่นสี) และตัวอย่างของคุณอาจเป็นสีแดงสีเหลืองหรือสีน้ำเงิน ในการส่งผ่านอาร์กิวเมนต์นี้ไปยังอัลกอริทึม ML ก่อนอื่นคุณต้องเข้ารหัสเพื่อที่ว่าแทนที่จะเป็นสตริงที่คุณมีตัวเลข

วิธีที่ง่ายที่สุดในการทำสิ่งนั้นคือการสร้างแผนที่โดยที่:

สีแดง -> 1
สีเหลือง -> 2
สีฟ้า -> 3

และแทนที่แต่ละสตริงด้วยค่าที่แมป

อย่างไรก็ตามสิ่งนี้อาจสร้างผลข้างเคียงที่ไม่พึงประสงค์ในรุ่น ML ของเราเช่นเมื่อต้องรับมือกับตัวเลขมันอาจคิดว่าสีน้ำเงิน> เหลือง (เพราะ 3> 2) หรือแดง + เหลือง = น้ำเงิน (เพราะ 1 + 2 = 3) ตัวแบบไม่มีทางรู้ได้ว่าข้อมูลเหล่านี้ถูกจัดหมวดหมู่แล้วจึงถูกแมปเป็นจำนวนเต็ม

ทางออกของปัญหานี้คือการเข้ารหัสแบบร้อนแรงหนึ่งครั้งที่เราสร้างคุณลักษณะใหม่N โดยที่Nคือจำนวนค่าที่ไม่ซ้ำกันในคุณลักษณะดั้งเดิม ใน exampel Nของเราจะเท่ากับ 3 เพราะเรามี 3 สีที่ไม่ซ้ำกัน (แดงเหลืองและน้ำเงิน)

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

ตัวอย่างของการเปลี่ยนแปลงดังกล่าวมีภาพประกอบด้านล่าง:

โปรดทราบว่าเนื่องจากวิธีการนี้จะเพิ่มมิติข้อมูลของชุดข้อมูลหากเรามีคุณสมบัติที่ใช้ค่าที่ไม่ซ้ำใครเราอาจต้องการใช้การเข้ารหัสแบบเบาบางมากขึ้น (เช่นที่ฉันนำเสนอด้านบน)


3

ความลึก: เซนต์คิตส์และเนวิสกำหนดความลึกของมิติร้อนหนึ่ง

indices: เทนเซอร์ของดัชนี

นี่เป็นตัวอย่างที่ให้ไว้ในเอกสารของทอร์โฟลว์
1. เฉพาะการระบุดัชนีและความลึก (ค่าเริ่มต้นของ on_value คือ 1 และ off_value คือ 0)

 indices = [0, 1, 2]
    depth = 3
    tf.one_hot(indices, depth)  # output: [3 x 3]
    # [[1., 0., 0.],
    #  [0., 1., 0.],
    #  [0., 0., 1.]]
  1. การระบุ on_value และ off_value
ดัชนี = [0, 2, -1, 1]
ความลึก = 3
tf.one_hot (ดัชนี, ความลึก, on_value = 5.0, off_value = 0.0, แกน = -1)
## เอาต์พุต: [4 x 3]
    # [[5.0, 0.0, 0.0], # one_hot (0)
    # [0.0, 0.0, 5.0], # one_hot (2)
    # [0.0, 0.0, 0.0], # one_hot (-1)
    # [0.0, 5.0, 0.0]] # one_hot (1)

คุณสามารถดูรหัสใน GitHub


เอกสาร TF นั้นเข้าใจได้ง่ายกว่า: tensorflow.org/api_docs/python/tf/one_hot
dturvene
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.