Spark ML中的尺寸不匹配错误

时间:2017-02-17 15:04:33

标签: python apache-spark machine-learning pyspark apache-spark-ml

我对ML和Spark ML都很陌生,我正在尝试使用带有Spark ML的神经网络制作预测模型,但是当我在学习模型上调用Failed to load resource: the server responded with a status of 404 (OK) bluebird.min.js:29 Unhandled rejection Error: XHR error (404 OK) loading https://gist.host/run/1487343107475/jquery.js at o (https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.6/system.js:4:12694) at XMLHttpRequest.s.onreadystatechange (https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.6/system.js:4:13219) 方法时,我得到了这个错误。问题是由OneHotEncoder的使用引起的,因为没有它一切正常。 我已经尝试将OneHotEncoder从管道中取出。

我的问题是:如何使用OneHotEncoder而不会出现此错误?

.transform

我的代码:

 java.lang.IllegalArgumentException: requirement failed: A & B Dimension mismatch! 
 at scala.Predef$.require(Predef.scala:224)     at org.apache.spark.ml.ann.BreezeUtil$.dgemm(BreezeUtil.scala:41)   at
 org.apache.spark.ml.ann.AffineLayerModel.eval(Layer.scala:163)     at
 org.apache.spark.ml.ann.FeedForwardModel.forward(Layer.scala:482)  at
 org.apache.spark.ml.ann.FeedForwardModel.predict(Layer.scala:529)

谢谢!

2 个答案:

答案 0 :(得分:3)

模型中的

layers Param不正确:

setLayers([len(features), 20, 10, 2])

第一层应该反映输入要素的数量,这些要素通常与编码前的原始列数不同。

如果您事先不知道功能的总数,则可以单独进行功能提取和模型训练。伪代码:

feature_pipeline_model = (Pipeline()
     .setStages(...)  # Only feature extraction
     .fit(train_df))

train_df_features = feature_pipeline_model.transform(train_df)
layers = [
    train_df_features.schema["features"].metadata["ml_attr"]["num_attrs"],
    20, 10, 2
]

答案 1 :(得分:-1)

我遇到了同样的问题,并对user6910411的建议采取了更手动的方法。例如,我有

layers = [**100**, 100, 100 ,100] 

但是我的输入变量数实际上是199,所以我只是更改为

layers = [**199**, 100, 100 ,100] 

,问题似乎已解决。 :-D