One Hot Encoding
ในสหรัฐอเมริกา ที่อยู่อาศัยเป็นตัวกำหนดว่าบุตรหลานจะสามารถเข้าเรียนที่โรงเรียนใดได้บ้าง จึงไม่แปลกที่หลายคนจะให้ความสำคัญกับเขตการศึกษาของบ้านที่กำลังจะซื้อ แม้ว่าเขตการศึกษาจะแสดงเป็นตัวเลขใน SCHOOLDISTRICTNUMBER แต่ในความเป็นจริงแล้วคอลัมน์นี้เป็นข้อมูลเชิงหมวดหมู่ การนำค่าเหล่านี้มาบวกหรือหาค่าเฉลี่ยจึงไม่มีความหมายใดๆ ดังนั้นในแบบฝึกหัดนี้ เราจะแปลง SCHOOLDISTRICTNUMBER จากตัวแปรเชิงหมวดหมู่ให้เป็นเวกเตอร์เชิงตัวเลข เพื่อนำไปใช้กับโมเดล machine learning ในขั้นตอนต่อไป
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Feature Engineering with PySpark
คำแนะนำการฝึกหัด
- สร้าง
StringIndexertransformer ชื่อstring_indexerโดยกำหนดให้SCHOOLDISTRICTNUMBERเป็น input และSchool_Indexเป็น output - นำ transformer
string_indexerไปใช้กับdfโดยเรียกfit()และtransform()แล้วเก็บ dataframe ที่แปลงแล้วไว้ในตัวแปรindexed_df - สร้าง
OneHotEncodertransformer ชื่อencoderโดยใช้School_Indexเป็น input และSchool_Vecเป็น output - นำการแปลงไปใช้กับ
indexed_dfโดยเรียกtransform()จากนั้นตรวจสอบผลลัพธ์ในแต่ละขั้นตอนด้วยโค้ดที่เตรียมไว้ให้
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
from pyspark.ml.feature import OneHotEncoder, StringIndexer
# Map strings to numbers with string indexer
string_indexer = ____(inputCol=____, outputCol=____)
indexed_df = ____.____(df).____(df)
# Onehot encode indexed values
encoder = ____(inputCol=____, outputCol=____)
encoded_df = ____.____(indexed_df)
# Inspect the transformation steps
encoded_df[['SCHOOLDISTRICTNUMBER', 'School_Index', 'School_Vec']].show(truncate=100)