เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การจัดการค่าที่หายไปและค่า 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)
แก้ไขและรันโค้ด