使用scala mllib如何在线性回归预测中只使用一部分特性?

ctrmrzij  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(327)

不管怎样,我是否可以用一个只包含训练中使用的特征子集的学习模型进行预测?例如,学习函数f(x1,x2,x3)=y=b1x1+b2x2+b3x3+e;然后只使用b1x1+b2x2进行预测,去掉x3特性。
我试过:
要训练模型:

val featureAssembler = new VectorAssembler().
      setInputCols(Array("X1", "X2", "X3")).
      setOutputCol("features")
val lr = new LinearRegression().setLabelCol("y").setFeaturesCol("features")
val pipeline = new Pipeline().setStages(Array(featuerAssembler, lr))

val model = pipeline.fit(trainingData)

要使用特征子集进行验证,请执行以下操作:

val featureAssemblerValidation = new VectorAssembler().
      setInputCols(Array( "X1", "X2")).
      setOutputCol("features")
val pipelineValidation = new Pipeline().setStages(Array(featureAssemblerValidation))

val validationData = pipelineValidation.fit(testData).transform(testData)

val lrModel = model.stages.last.asInstanceOf[LinearRegressionModel]

val validationA = lrModel.transform(validationData)

但出现了错误:

Caused by: java.lang.IllegalArgumentException: requirement failed: BLAS.dot(x: Vector, y:Vector) was given Vectors with non-matching sizes: x.size = 181, y.size = 587

这是可以理解的;模型仍然想要相同的形状,但在细分后,我适合它一个不同的形状。
有没有一种方法可以将特征子集化,并仅用该子集进行预测?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题