One Hot Encoding
在美國,居住地會決定你的孩子能就讀哪些學校。因此,許多人會特別在意未來房子所在的學區。雖然學區在 SCHOOLDISTRICTNUMBER 欄位中以數字編號,但它其實是類別型變數。也就是說,把這些值相加或取平均沒有意義。因此,在這個例子中,我們會把 SCHOOLDISTRICTNUMBER 從類別型變數轉換為數值向量,之後可用在機器學習模型中。
本練習屬於課程
使用 PySpark 進行特徵工程
練習說明
- 建立一個名為
string_indexer的StringIndexer轉換器,輸入欄位為SCHOOLDISTRICTNUMBER,輸出欄位為School_Index。 - 對
df套用轉換器string_indexer,依序呼叫fit()和transform()。將轉換後的 DataFrame 儲存為indexed_df。 - 建立一個名為
encoder的OneHotEncoder轉換器,輸入欄位為School_Index,輸出欄位為School_Vec。 - 對
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)