VectorIndexer用于将数据集中的离散特征自动标记为分类特征,将连续特征标记为数值特征。但是,在使用XGBoost时,不需要显式地将任何特征标记为分类特征或数值特征,因为XGBoost能够自动将离散特征视为分类特征,将连续特征视为数值特征。在使用XGBoost时,不需要使用VectorIndexer或任何其他类似的特征变换器来标记特征。如果要对离散特征进行独热编码,则应该在pipeline中使用OneHotEncoderEstimator。
代码示例: from pyspark.ml.feature import OneHotEncoderEstimator
data = spark.read.format("libsvm").load("sample_libsvm_data.txt")
(trainingData, testData) = data.randomSplit([0.7, 0.3], seed=100)
encoder = OneHotEncoderEstimator(inputCols=["features"], outputCols=["encoded"]) model = encoder.fit(trainingData) trainingData = model.transform(trainingData)
xgb = XGBoostRegressor( featuresCol="encoded", labelCol="label", predictionCol="prediction", maxDepth=6, maxBins=32, alpha=0.1, eta=0.3, minChildWeight=1, subsample=0.5, numRound=100, objective='reg:squarederror')
model = xgb.fit(trainingData)