gpt4 book ai didi

scala - 将 VectorAssembler 添加到 Spark ML Pipeline 时出错

转载 作者:行者123 更新时间:2023-12-01 11:22:50 27 4
gpt4 key购买 nike

尝试将 VectorAssembler 添加到 GBT 管道示例并得到管道无法找到 features 字段的错误。我引入了一个示例文件而不是 libsvm,所以我需要转换功能集集。

错误:
线程“main”中的异常 java.lang.IllegalArgumentException:字段“features”不存在。

 val df = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.load("data/training_example.csv")

val sampleDF = df.sample(false,0.05,987897L)

val assembler = new VectorAssembler()
.setInputCols(Array("val1","val2","val3",...,"valN"))
.setOutputCol("features")

val labelIndexer = new StringIndexer()
.setInputCol("label")
.setOutputCol("indexedLabel")
.fit(sampleDF)

val featureIndexer = new VectorIndexer()
.setInputCol("features")
.setOutputCol("indexedFeatures")
.setMaxCategories(4)
.fit(sampleDF)

val Array(trainingData, testData) = sampleDF.randomSplit(Array(0.7, 0.3))

val gbt = new GBTClassifier()
.setLabelCol("indexedLabel")
.setFeaturesCol("indexedFeatures")
.setMaxIter(3)
.setMaxDepth(5)

val pipeline = new Pipeline()
.setStages(Array(assembler,labelIndexer,featureIndexer,gbt))

val model = pipeline.fit(trainingData)

val predictions = model.transform(testData)

predictions.show(10)

最佳答案

基本问题:

为什么要在 featureIndexer 中调用 fit()?

如果你调用 fit(sampleDF),VectorIndexer 会在 sampleDF 中搜索 features 列,但是这个数据集没有这样的列。

管道的 fit() 将调用所有的更改器(mutator)和估计器,因此在汇编器上调用 fit,然后将结果传递给 labelIndexer 的 fit 并将上一步的结果传递给 featureIndexer 的 fit。

将在流水线内部调用的 featureIndexer.fit() 中使用的 DataFrame 将具有由先前转换器生成的所有列。

在您的代码 sampleDF 中没有 features 列,但是,在 Pipeline fit() 期间,此列将由汇编程序添加

关于scala - 将 VectorAssembler 添加到 Spark ML Pipeline 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40309525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com