gpt4 book ai didi

scala - 如何使用 Scala 运行具有分类特征集的 Spark 决策树?

转载 作者:行者123 更新时间:2023-12-04 02:52:19 25 4
gpt4 key购买 nike

我有一个具有相应 categoricalFeaturesInfo: Map[Int,Int] 的功能集。但是,对于我的生活,我无法弄清楚应该如何让 DecisionTree 类工作。它不会接受任何东西,而是接受 LabeledPoint 作为数据。但是, LabeledPoint 需要 (double, vector) ,其中向量需要 double 。

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)

我得到的错误:
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)))

到目前为止我的资源:
tree config, decision tree, labeledpoint

最佳答案

您可以首先将类别转换为数字,然后加载数据,就好像所有特征都是数字一样。

当您在 Spark 中构建决策树模型时,您只需要通过指定 map Map[Int, Int]() 来告诉 Spark 哪些特征是分类特征以及特征的数量(该特征的不同类别的数量)。从特征索引到它的数量。

例如,如果您的数据为:

1,a,add
2,b,more
1,c,thinking
3,a,to
1,c,me

您可以首先将数据转换为数字格式:
1,0,0
2,1,1
1,2,2
3,0,3
1,2,4

在这种格式中,您可以将数据加载到 Spark。然后如果你想告诉 Spark 第二和第三列是分类的,你应该创建一个映射:
categoricalFeaturesInfo = Map[Int, Int]((1,3),(2,5))

该 map 告诉我们,索引为 1 的特征的数量为 3,索引为 2 的特征的数量为 5。当我们构建决策树模型并将该 map 作为训练函数的参数传递时,它们将被视为分类的:
val model = DecisionTree.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo, impurity, maxDepth, maxBins)

关于scala - 如何使用 Scala 运行具有分类特征集的 Spark 决策树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25038294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com