Spark - ошибка значения наивного байесовского классификатора

У меня возникла следующая проблема при обучении наивного байесовского классификатора. Я получаю эту ошибку:

  File "/home/juande/Desktop/spark-1.3.0-bin-hadoop2.4/python/pyspark/mllib  /classification.py", line 372, in train
return NaiveBayesModel(labels.toArray(), pi.toArray(), numpy.array(theta))
ValueError: invalid __array_struct__

При обучении модели с помощью этой строки

dataframe = dataframe.map(lambda x: LabeledPoint(sections_to_number[x[4]], tf.transform([x[0], x[1], x[2], x[3]])))
model = NaiveBayes.train(dataframe, 1.0)

Где sections_to_number — словарь, отображающий значение из некоторых строк в числа с плавающей запятой, например спорт -> 0, погода -> 1 и так далее.

Однако, если я тренирую его, используя число вместо использования отображения section_to_number, я не получаю никакой ошибки.

dataframe = dataframe.map(lambda x: LabeledPoint(10.0, tf.transform([x[0], x[1], x[2], x[3]])))
model = NaiveBayes.train(dataframe, 1.0)

Я что-то упускаю? Спасибо


person user3276768    schedule 22.04.2015    source источник


Ответы (1)


NaiveBayes в пакете spark ml ожидает кадр данных в виде метки двух столбцов, функции, где столбец метки является целью или классом, а функция — org.apache.spark.ml.linalg.Vector. В случае числового/непрерывного набора данных столбец объектов создается с использованием вектора, поскольку набор данных является непрерывным, но нам нужно преобразовать категориальный набор данных в числовой, используя onehotencoder некоторых других методов извлечения объектов, опубликованных на http://spark.apache.org/docs/latest/ml-features.html#stringindexer.

например OneHotEncoder преобразует foo - 0 и baar - 1 и формирует вектор из double, и, наконец, в алгоритм передается кадр данных, такой как метка и функция.

person Vinayak Singh    schedule 24.02.2017