2017-07-20 85 views
7

Używam programu Spark's MultilayerPerceptronClassifier. Generuje to kolumnę "przewidywaną" w "przewidywaniach". Kiedy próbuję to pokazać, pojawia się błąd:Dlaczego nie mogę wyświetlić kolumny predykcyjnej Spark MultilayerPerceptronClassifier?

SparkException: Failed to execute user defined function($anonfun$1: (vector) => double) ... 
Caused by: java.lang.IllegalArgumentException: requirement failed: A & B Dimension mismatch! 

Inne kolumny, na przykład wyświetlanie wektorowe OK. Część schematu przewidywania:

|-- vector: vector (nullable = true) 
|-- prediction: double (nullable = true) 

Mój kod to:

//racist is boolean, needs to be string: 
val train2 = train.withColumn("racist", 'racist.cast("String")) 
val test2 = test.withColumn("racist", 'racist.cast("String")) 

val indexer = new StringIndexer().setInputCol("racist").setOutputCol("indexracist") 

val word2Vec = new Word2Vec().setInputCol("lemma").setOutputCol("vector") //.setVectorSize(3).setMinCount(0) 

val layers = Array[Int](4,5, 2) 

val mpc = new MultilayerPerceptronClassifier().setLayers(layers).setBlockSize(128).setSeed(1234L).setMaxIter(100).setFeaturesCol("vector").setLabelCol("indexracist") 

val pipeline = new Pipeline().setStages(Array(indexer, word2Vec, mpc)) 

val model = pipeline.fit(train2) 

val predictions = model.transform(test2) 

predictions.select("prediction").show() 

EDIT problemem proponowanej Podobne pytanie było

val layers = Array[Int](0, 0, 0, 0) 

który nie jest w tym przypadku, nie jest to ta sama błąd.

EDYCJA PONOWNIE: część0 pociągu i testu są zapisywane w formacie PARQUET here.

+0

Nope nie podobnego. – schoon

+0

Problem w tym pytaniu dotyczył warstw val = Array [Int] (0, 0, 0, 0), co nie ma tu miejsca, ani nie był tym samym błędem. – schoon

+0

Czy możesz podać próbkę treningowej ramki danych? –

Odpowiedz

3

Dodanie .setVectorSize (3) .setMinCount (0) i zmienia Val warstwy = Tablica [Int] (3,5, 2) wykonana jest praca:

val word2Vec = new Word2Vec().setInputCol("lemma").setOutputCol("vector").setVectorSize(3).setMinCount(0) 

// specify layers for the neural network: 
// input layer of size 4 (features), two intermediate of size 5 and 4 
// and output of size 3 (classes) 
val layers = Array[Int](3,5, 2)