1

您好我正在尝试使用 PySpark 2.4.3 机器学习库来安装 MultiLayerPerceptron。但是每次我尝试拟合算法时,都会出现以下错误:

Py4JJavaError:调用 o4105.fit 时出错。:org.apache.spark.SparkException:作业因阶段失败而中止:阶段 784.0 中的任务 0 失败 4 次,最近一次失败:阶段 784.0 中丢失任务 0.3(TID 11663,hdpdncwy87013.dpp.acxiom.net,执行程序 1) : org.apache.spark.SparkException: 无法执行用户定义的函数($anonfun$org$apache$spark$ml$feature$OneHotEncoderModel$$encoder$1: (double, int) => struct,values:array>) at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(未知来源)

    df = sqlContext.read.format("csv").options(header='true', sep=",", inferschema='true').load(location)



    exclude = ["Target"]
    inputs = [column for column in df.columns if (column not in exclude)]
    vectorAssembler = VectorAssembler(inputCols=inputs, outputCol='Features')
    vdf = vectorAssembler.transform(df)
    vdf = vdf.select(['Features'] + exclude)

    # Feature Scaling
    scaler = MinMaxScaler(inputCol="Features", outputCol="scaledFeatures")
    scalerModel = scaler.fit(vdf)
    scaledData = scalerModel.transform(vdf)

    # train-test split
    splits = scaledData.randomSplit([0.7, 0.3], seed=2020)
    train_df = splits[0]
    test_df = splits[1]

    layers = [len(inputs), 3, 3, 3,  5]
    mlpc = MultilayerPerceptronClassifier(labelCol="Target", featuresCol="scaledFeatures", layers=layers,
                                          blockSize=128, stepSize=0.03, seed=2020, maxIter=1000)
    model = mlpc.fit(train_df)

你有想法吗?先感谢您。输入数 1902,要预测的类数 5。

4

1 回答 1

0

这是一个老问题,但我们现在遇到了完全相同的错误。我们对二元分类没有任何问题,但是我们为多类分类问题抛出了这个异常,就像你的一样。

对我们来说,多类分类的问题是我们的标签是1, 2, 3. 事实证明,MultiLayerPerceptron 期望标签从 0 开始。因此,当我们从标签中减去 1(使它们成为 0、1、2)时,模型毫无例外地成功训练。如果您对具有非零标签的多类分类问题有此异常,那么这可能是您的问题。

希望这可以节省一些人的调试时间。

于 2020-12-28T10:37:36.317 回答