2017-10-18 6 views
0

J'essaye de construire un classificateur de forêt aléatoire en utilisant la bibliothèque de pyspark.ml pour les données (pas mllib pour RDD). Dois-je utiliser pipeline comme indiqué dans la documentation? Je veux juste construire un modèle simple,Random Forest en utilisant pyspark.ml pour Dataframes

rf = RandomForestClassifier(labelCol = labs, featuresCol = rawdata) 

Je cours dans l'erreur suivante

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/spark/python/pyspark/__init__.py", line 104, in wrapper 
    return func(self, **kwargs) 
    File "/usr/lib/spark/python/pyspark/ml/classification.py", line 910, in __init 
__ 
    self.setParams(**kwargs) 
    File "/usr/lib/spark/python/pyspark/__init__.py", line 104, in wrapper 
    return func(self, **kwargs) 
    File "/usr/lib/spark/python/pyspark/ml/classification.py", line 928, in setPar 
ams 
    return self._set(**kwargs) 
    File "/usr/lib/spark/python/pyspark/ml/param/__init__.py", line 421, in _set 
    raise TypeError('Invalid param value given for param "%s". %s' % (p.name, e) 
) 
TypeError: Invalid param value given for param "labelCol". Could not convert <cl 
ass 'pyspark.sql.dataframe.DataFrame'> to string type 

Un échantillon de mes étiquettes

+---+ 
| _2| 
+---+ 
|0.0| 
|1.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|1.0| 
|1.0| 
|1.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|1.0| 
|1.0| 
+---+ 

Mes données est similaire avec 180 colonnes.

+0

Vous ne * avez * à utiliser les pipelines. Pour plus d'aide, veuillez fournir un échantillon de vos données. – desertnaut

+0

J'ai modifié le message. Merci. – Nivi

Répondre

1

dataframes d'allumage ne sont pas utilisés comme dans Spark ML; toutes vos caractéristiques doivent être des vecteurs dans une seule colonne, généralement (mais pas nécessairement) le nom features. De plus, labelcol=labs signifie que vos étiquettes doivent être dans une colonne nommée labs, et non _2.

Voici un exemple pour obtenir l'idée, avec des données de jouets:

spark.version 
# u'2.2.0' 

from pyspark.ml.classification import RandomForestClassifier 
from pyspark.ml.linalg import Vectors 
df = sqlContext.createDataFrame([ 
    (0.0, Vectors.dense(0.0, 1.0)), 
    (1.0, Vectors.dense(1.0, 0.0))], 
    ["label", "features"]) 

df.show() # notice there are only 2 columns, and 'features' is a 2-d vector 
# +-----+---------+ 
# |label| features| 
# +-----+---------+ 
# | 0.0|[0.0,1.0]| 
# | 1.0|[1.0,0.0]| 
# +-----+---------+ 

rf = RandomForestClassifier(numTrees=3, maxDepth=2, labelCol="label", seed=42) 
rf_model = rf.fit(df) 

This answer of mine peut être utile dans la façon de convertir vos données dans le format souhaité.

+0

J'ai essayé de le faire mais j'ai l'erreur suivante. dans _parse_basic_datatype_string raise ValueError ("Impossible d'analyser le type de données:% s"% s) ValueError: Impossible d'analyser le type de données: fonctionnalités – Nivi

+0

@Nivi Impossible d'en faire beaucoup ... Je vous suggère de rassembler les éléments et d'ouvrir un nouveau question avec les détails – desertnaut