Comment puis-je exécuter l'Étincelle de l'arbre de décision avec une catégorie de fonction définie à l'aide de la Scala?
J'ai un ensemble de fonctionnalités avec un correspondant categoricalFeaturesInfo: Carte[Int,Int]. Cependant, pour la vie de moi je ne peux pas comprendre comment je suis censé obtenir le DecisionTree classe pour travailler. Il ne sera pas accepter n'importe quoi, mais un LabeledPoint comme des données. Cependant, LabeledPoint exige (double, vecteur) où le vecteur nécessite doubles.
val LP = featureSet.map(x => LabeledPoint(classMap(x(0)),Vectors.dense(x.tail)))
//Run training algorithm to build the model
val maxDepth: Int = 3
val isMulticlassWithCategoricalFeatures: Boolean = true
val numClassesForClassification: Int = countPossibilities(labelCol)
val model = DecisionTree.train(LP, Classification, Gini, isMulticlassWithCategoricalFeatures, maxDepth, numClassesForClassification,categoricalFeaturesInfo)
L'erreur que je reçois:
scala> val LP = featureSet.map(x => LabeledPoint(classMap(x(0)),Vectors.dense(x.tail)))
<console>:32: error: overloaded method value dense with alternatives:
(values: Array[Double])org.apache.spark.mllib.linalg.Vector <and>
(firstValue: Double,otherValues: Double*)org.apache.spark.mllib.linalg.Vector
cannot be applied to (Array[String])
val LP = featureSet.map(x => LabeledPoint(classMap(x(0)),Vectors.dense(x.tail)))
Mes ressources:
arbre de config, arbre de décision, labeledpoint
OriginalL'auteur Climbs_lika_Spyder | 2014-07-30
Vous devez vous connecter pour publier un commentaire.
Vous pouvez tout d'abord transformer les catégories de numéros, puis charger les données comme si toutes les fonctions sont numériques.
Lorsque vous créez un modèle d'arbre de décision dans Spark, vous avez juste besoin de dire étincelle dont les caractéristiques sont catégoriques et aussi la fonction de l'arité (nombre de catégories distinctes de cette fonctionnalité) en spécifiant une carte
Map[Int, Int]()
de fonctionnalité des indices de son arité.Par exemple, si vous avez des données:
Vous pouvez d'abord transformer les données en format numérique:
Dans ce format, vous pouvez charger des données de l'Étincelle. Alors si vous voulez dire à déclencher la deuxième et la troisième colonnes sont catégoriques, vous devez créer une carte:
La carte nous indique que la fonctionnalité avec l'indice 1 a arité 3, et la fonctionnalité avec l'indice 2 a artity 5. Ils seront considérés comme des catégorique lorsque nous construisons un modèle d'arbre de décision en passant que la carte en tant que paramètre de la fonction de formation:
OriginalL'auteur lam
Chaînes de caractères ne sont pas pris en charge par LabeledPoint, d'une façon à la mettre dans un LabeledPoint est de séparer vos données en plusieurs colonnes, considérant que vos chaînes sont catégoriques.
Ainsi, par exemple, si vous avez le dataset suivant:
Ensuite, vous pouvez diviser votre chaîne de données, de sorte que chaque valeur de cordes dans une nouvelle colonne
Comme vous l'avez 3 valeurs distinctes de Chaînes, vous devrez convertir votre colonne de type chaîne de 3 nouvelles colonnes, et chaque valeur est représentée par une valeur dans cette nouvelle colonnes.
Maintenant votre jeu de données sera
Qui maintenant, vous pouvez convertir en Double des valeurs et de l'utiliser dans votre LabeledPoint.
Un autre moyen pour convertir vos chaînes dans un LabeledPoint est de créer un distinctlist de valeurs pour chaque colonne, et convertir les valeurs des chaînes dans l'index de la chaîne dans cette liste. Ce qui n'est pas recommandé parce que si oui, dans cette prétendue dataset il sera
Mais dans ce cas, les algorithmes permettra d'examiner de plus près de b que de c, qui ne peut pas être déterminé.
OriginalL'auteur dirceusemighini
Vous avez besoin pour confirmer le type de la matrice x.
Dans le journal des erreurs, il a dit que l'élément de matrice x est une chaîne qui n'est pas pris en charge dans spark.
Actuel étincelle Vecteurs ne peuvent être remplis en Double.
OriginalL'auteur yanbohappy