การจัดการค่าที่หายไปและค่า Categorical แบบเบื้องต้น
Random Forest Regression มีความยืดหยุ่นสูงพอที่จะข้ามขั้นตอนการเตรียมข้อมูลที่ใช้เวลานานและซับซ้อนได้หลายขั้นตอน แม้ว่า Random Forest บางการใช้งานจะจัดการค่าที่หายไปและค่า categorical โดยอัตโนมัติ แต่การใช้งานใน PySpark ไม่รองรับฟีเจอร์นี้ อย่างไรก็ตาม หลักการทางคณิตศาสตร์ยังคงเดิม จึงสามารถใช้การแทนที่ค่าแบบเบื้องต้นได้
สำหรับค่าที่หายไป เนื่องจากข้อมูลของเราเป็นจำนวนบวกทั้งหมด จะกำหนดค่าเป็น -1 แทน Random forest จะแยก (split) ค่านี้ออกและจัดการแตกต่างจากค่าอื่น ๆ ในฟีเจอร์เดียวกัน
สำหรับค่า categorical สามารถแมปค่าข้อความเป็นตัวเลขได้ และ random forest จะจัดการกับค่าเหล่านั้นได้อย่างเหมาะสมโดยการแยกตามค่าเหล่านั้น ในแบบฝึกหัดนี้จะนำ pipelines จากคอร์ส Introduction to PySpark มาใช้เพื่อให้โค้ดกระชับขึ้น โปรดทราบว่าแบบฝึกหัดจะเริ่มต้นด้วยการแสดง dtypes ของคอลัมน์ใน dataframe ให้เปรียบเทียบกับผลลัพธ์ที่ได้หลังจากทำแบบฝึกหัดนี้เสร็จ
หมายเหตุ: Pipeline และ StringIndexer ถูก import ไว้ให้แล้ว รวมถึง list categorical_cols ก็พร้อมใช้งานแล้วเช่นกัน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Feature Engineering with PySpark
คำแนะนำการฝึกหัด
- แทนที่ค่าใน
WALKSCOREและBIKESCOREด้วย -1 โดยใช้fillna()และพารามิเตอร์subset - สร้าง list ของ
StringIndexerโดยใช้ list comprehension เพื่อวนซ้ำแต่ละคอลัมน์ในcategorical_cols - ใช้
fit()และtransform()กับ pipeline ชื่อindexer_pipeline - ลบ
categorical_colsออกด้วยdrop()เนื่องจากไม่จำเป็นต้องใช้อีกต่อไป จากนั้นตรวจสอบชนิดข้อมูลของผลลัพธ์ด้วยdtypes
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Replace missing values
df = df.____(____, ____=[____, ____])
# Create list of StringIndexers using list comprehension
indexers = [____(inputCol=____, outputCol=____+"_IDX")\
.setHandleInvalid("keep") for ____ in ____]
# Create pipeline of indexers
indexer_pipeline = Pipeline(stages=indexers)
# Fit and Transform the pipeline to the original data
df_indexed = ____.____(df).____(df)
# Clean up redundant columns
df_indexed = df_indexed.____(*____)
# Inspect data transformations
print(df_indexed.dtypes)