在機器學習處理過程中,為了方便相關算法的實現,經常需要把標簽數據(一般是字符串)轉化成整數
索引,或是在計算結束后將整數索引還原為相應的標簽。
StringIndexer轉換器可以把一列類別型的特征(或標簽)進行編碼,使其數值化,索引的
范圍從0開始,該過程可以使得相應的特征索引化,使得某些無法接受類別型特征的算法可
以使用,並提高諸如決策樹等機器學習算法的效率。
索引構建的順序為標簽的頻率,優先編碼頻率較大的標簽,所以出現頻率最高的標簽為0號。
如果輸入的是數值型的,我們會把它轉化成字符型,然后再對其進行編碼。
首先,引入必要的包,並創建一個簡單的DataFrame,它只包含一個id列和一個標簽列category:
#導入相關的類庫
from pyspark.sql import SparkSession
from pyspark.ml.feature import StringIndexer
#配置spark,創建SparkSession對象
spark = SparkSession.builder.master('local').appName('StringIndexerDemo').getOrCreate()
#創建簡單的DataFrame
df = spark.createDataFrame([
(0, "a"), (1, "b"),
(2, "c"), (3, "a"),
(4, "a"), (5, "c")],
["id", "category"])
#創建StringIndexer對象,設定輸入輸出參數
indexer =StringIndexer(inputCol ='category', outputCol= 'categoryIndex')
#對這個DataFrame進行訓練
model = indexer.fit(df)
#利用生成的模型對DataFrame進行transform操作
indexed = model.transform(df)
indexed.show()
