📅  最后修改于: 2023-12-03 14:48:18.056000             🧑  作者: Mango
PySpark VectorIndexer 是一种转换器,可以自动为向量特征计算分类(离散)或连续特征(连续)。它接受特征向量,并为所有特征列计算一个索引,该索引将向量列中的原始值转换为分类离散特征或算法可处理的连续特征。
使用 PySpark VectorIndexer 需要按照以下步骤:
导入 PySpark VectorIndexer
from pyspark.ml.feature import VectorIndexer
创建 VectorIndexer 实例,定义需要索引的特征列和输出索引列的名称。
indexer = VectorIndexer(inputCol="features", outputCol="indexedFeatures", maxCategories=10)
inputCol
参数指定需要进行索引的特征向量列,outputCol
参数指定新的索引列的名称。
maxCategories
参数指定要分类处理的最大不同值的数量。 索引器会查找每一列的不同值数量,如果值的不同数量大于 maxCategories
,则该列将被视为连续变量。 否则,该列将被视为分类变量,并进行编码。默认情况下,maxCategories
的值为 20。
使用训练数据拟合 VectorIndexer 模型。
indexerModel = indexer.fit(data)
这将生成一个新的 VectorIndexerModel
实例。
使用拟合的模型对新数据进行转换。
indexedData = indexerModel.transform(newData)
这将在 newData
数据中添加一个新的索引列,名称为 indexedFeatures
。
以下示例演示如何使用 PySpark VectorIndexer 对手写数字分类数据集(10 类)的特征进行索引。
from pyspark.sql.functions import col
from pyspark.ml.feature import VectorIndexer
from pyspark.ml.classification import DecisionTreeClassifier
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
# 加载数据
data = spark.read.format("libsvm").load("data/mnist-digits-dataset/")
# 创建 VectorIndexer
indexer = VectorIndexer(inputCol="features", outputCol="indexedFeatures", maxCategories=10)
# 拟合数据
indexerModel = indexer.fit(data)
# 索引化数据
indexedData = indexerModel.transform(data)
# 创建决策树模型
dt = DecisionTreeClassifier(labelCol="label", featuresCol="indexedFeatures")
# 拆分数据集
(trainingData, testData) = indexedData.randomSplit([0.7, 0.3])
# 训练模型
model = dt.fit(trainingData)
# 预测测试数据
predictions = model.transform(testData)
# 评估模型性能
evaluator = MulticlassClassificationEvaluator(labelCol="label", predictionCol="prediction", metricName="accuracy")
accuracy = evaluator.evaluate(predictions)
print("Test Error = %g" % (1.0 - accuracy))
PySpark VectorIndexer 是一个处理特征向量和机器学习模型训练的实用工具。通过使用 VectorIndexer,可以自动索引分类和连续变量,从而提高机器学习算法的准确性。