開始使用免費開始

字串與類別變數

如你所知,Spark 在建模時需要數值資料。到目前為止這不成問題;就連布林欄位也能輕鬆轉成整數。不過,你也會把航空公司與航班目的地當作模型的特徵。這些欄位是以字串編碼,且沒有明顯的方法能將它們轉為數值型別。

所幸,PySpark 在 pyspark.ml.features 子模組中內建了處理這類情況的函式。你可以為每個航班的承運航空公司與目的地建立所謂的「獨熱向量」。所謂的「獨熱向量(one-hot vector)」是一種表示類別特徵的方法:每筆觀測都有一個向量,向量中所有元素皆為 0,最多只有一個元素為 1。

向量中的每個元素對應到該特徵的一個層級,因此只要看哪個元素等於 1,就能判斷正確的層級。

編碼類別特徵的第一步是建立 StringIndexer。此類別的成員是 Estimator,會將含有字串欄位的 DataFrame 中,每個唯一字串對應到一個數字。接著,Estimator 會回傳一個 Transformer,它會取得一個 DataFrame,將對應表以中介資料(metadata)的形式附加上去,並回傳一個在原字串欄位位置新增對應數值欄位的新 DataFrame。

第二步是用 OneHotEncoder 將這個數值欄位編碼成獨熱向量。它與 StringIndexer 的運作方式相同,都是先建立 Estimator,再得到 Transformer。最終結果是:多出一個欄位,將你的類別特徵以適合機器學習流程的向量形式表示!

這看起來也許有點複雜,但別擔心!你只要記得需要建立一個 StringIndexer 與一個 OneHotEncoder,其餘就交給 Pipeline 處理。

為什麼你必須把類別特徵編碼成獨熱向量?

本練習屬於課程

PySpark 基礎

檢視課程

動手互動練習

將理論付諸實踐,立即體驗我們的互動練習

開始練習