3 回答

TA貢獻1802條經驗 獲得超10個贊
我將從另一個角度提供答案,因為我還想知道Spark ML(不是MLlib)中基于樹的模型的分類功能,并且文檔尚不清楚一切如何工作。
當您使用pyspark.ml.feature.StringIndexer
額外的元數據轉換數據框中的列時,該數據框中會存儲額外的元數據,這些元數據專門將轉換后的功能標記為分類功能。
當您打印數據框時,您將看到一個數字值(這是一個與類別值之一相對應的索引),如果您查看模式,您將看到新的轉換列是type double
。但是,您pyspark.ml.feature.StringIndexer.transform
用來創建的新列不僅是普通的雙列,而且還具有與之相關的額外元數據,這非常重要。您可以通過查看metadata
數據框的架構中適當字段的屬性來檢查此元數據(可以通過查看yourdataframe.schema來訪問數據框的架構對象)
這些額外的元數據有兩個重要含義:
當您
.fit()
使用基于樹的模型進行調用時,它將掃描數據幀的元數據,并識別您使用諸如轉換器(例如,pyspark.ml.feature.StringIndexer
如上所述)分類編碼的字段(如上所述,還有其他轉換器也將具有此效果,例如pyspark.ml.feature.VectorIndexer
)。因此,在Spark ML中使用基于樹的模型時,在用StringIndxer轉換特征后,不必對特征進行一鍵熱編碼(但是,在使用其他不使用特征的模型時,仍必須進行一鍵熱編碼)自然地處理線性回歸等類別。)因為此元數據存儲在數據幀中,所以您可以隨時使用
pyspark.ml.feature.IndexToString
將數字索引恢復為原始分類值(通常是字符串)的方法。
添加回答
舉報