gpt4 book ai didi

java - 如何获取 Spark MLlib RandomForestModel.predict 响应作为文本值 YES/NO?

转载 作者:行者123 更新时间:2023-11-30 08:09:24 24 4
gpt4 key购买 nike

我正在尝试使用 Apache Spark MLLib 实现 RandomForest 算法。我有 CSV 格式的数据集,具有以下功能:

DayOfWeek(int),AlertType(String),Application(String),Router(String),Symptom(String),Action(String)
0,Network1,App1,Router1,Not reachable,YES
0,Network1,App2,Router5,Not reachable,NO

我想使用 RandomForest MLlib 并对最后一个字段 Action 进行预测,并且我希望响应为 YES/NO。

我正在关注 GitHub 中的代码创建随机森林模型。由于我拥有除一个 int 特征之外的所有分类特征,因此我使用以下代码将它们转换为 JavaRDD<LabeledPoint> - 有什么错误吗?

// Load and parse the data file.
JavaRDD<String> data = jsc.textFile("/tmp/xyz/data/training-dataset.csv");

// I have 14 features so giving 14 as arg to the following
final HashingTF tf = new HashingTF(14);

// Create LabeledPoint datasets for Actionable and nonactionable
JavaRDD<LabeledPoint> labledData = data.map(new Function<String, LabeledPoint>() {
@Override public LabeledPoint call(String alert) {
List<String> featureList = Arrays.asList(alert.trim().split(","));
String actionType = featureList.get(featureList.size() - 1).toLowerCase();
return new LabeledPoint(actionType.equals("YES")? 1 : 0, tf.transform(featureList));
}
});

与上面类似,我创建测试数据并在以下代码中使用来进行预测

JavaPairRDD<Double, Double> predictionAndLabel =
testData.mapToPair(new PairFunction<LabeledPoint, Double, Double>() {
@Override
public Tuple2<Double, Double> call(LabeledPoint p) {
return new Tuple2<Double, Double>(model.predict(p.features()), p.label());
}
});

如何根据我的最后一个字段进行预测操作和预测应该为是/否?当前的预测方法返回 double 无法理解我如何实现它?我是否遵循分类特征的正确方法进入 LabledPoint ?我是机器学习和 Spark MLlib 的新手。

最佳答案

我更熟悉 scala 版本,但我会尽力提供帮助。

您需要将目标变量(操作)和所有分类特征映射到从 0 开始的级别,例如 0,1,2,3...例如 router1, router2, ... router5 映射到 0,1,2。 ..4.与你的目标变量相同,我认为这是你实际映射的唯一一个,是/否到 1/0 (我不确定你的 tf.transform(featureList) 实际在做什么)。

完成此操作后,您可以训练随机森林分类器,指定分类特征的映射。基本上它需要你告诉你哪些特征是分类的以及它们有多少个级别,这是 scala 版本,但你可以轻松地将其转换为 java:

val categoricalFeaturesInfo = Map[Int, Int]((2,2),(3,5))

这基本上是说,在您的功能列表中,第 3 个 (2) 有 2 个级别 (2,2),第 4 个 (3) 有 5 个级别 (3,5)。其余的被认为是 double 。

现在,您在训练分类器时传递 categoricalFeaturesInfo 以及其他参数:

val modelRF = RandomForest.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo,numTrees, featureSubsetStrategy, impurity, maxDepth, maxBins)

现在,当您需要评估它时,预测函数将返回 double 值 0,1,您可以使用它来计算准确度、精确度或任何所需的指标。

如果你有一个 testData,你在其中进行了与之前相同的转换,那么这就是示例(再次对不起 scala):

val predictionAndLabels = testData.map { point =>
val prediction = modelRF.predict(point.features)
(point.label, prediction)
}

这里你的结果很清楚,标签为 1/0,预测值也是 1/0,任何 Accuracy、Precision 和 Recall 的计算都很简单。

希望对你有帮助!!

关于java - 如何获取 Spark MLlib RandomForestModel.predict 响应作为文本值 YES/NO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30623227/

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