java - 如何将数值和分类特征传递给 Apache Spark 中的 RandomForestRegressor : MLlib in Java?

标签 java apache-spark machine-learning regression random-forest

如何将数值和分类特征传递给 Apache Spark 中的 RandomForestRegressor:Java 中的 MLlib?

我可以用数字或分类来实现,但我不知道如何一起实现。

我的工作代码如下(仅用于预测的数字特征)

String[] featureNumericalCols = new String[]{
        "squareM",
        "timeTimeToPragueCityCenter",
};
String[] featureStringCols = new String[]{ //not used
        "type",
        "floor",
        "disposition",
};
VectorAssembler assembler = new VectorAssembler().setInputCols(featureNumericalCols).setOutputCol("features");
Dataset<Row> numericalData = assembler.transform(data);
numericalData.show();
RandomForestRegressor rf = new RandomForestRegressor().setLabelCol("price")
       .setFeaturesCol("features");
// Chain indexer and forest in a Pipeline
Pipeline pipeline = new Pipeline()
    .setStages(new PipelineStage[]{assembler, rf});
// Train model. This also runs the indexer.
PipelineModel model = pipeline.fit(trainingData);
// Make predictions.
Dataset<Row> predictions = model.transform(testData);

最佳答案

对于任何人来说,这就是解决方案:

    StringIndexer typeIndexer = new StringIndexer()
            .setInputCol("type")
            .setOutputCol("typeIndex");

    preparedData = typeIndexer.fit(preparedData).transform(preparedData);

    StringIndexer floorIndexer = new StringIndexer()
            .setInputCol("floor")
            .setOutputCol("floorIndex");

    preparedData = floorIndexer.fit(preparedData).transform(preparedData);

    StringIndexer dispositionIndexer = new StringIndexer()
            .setInputCol("disposition")
            .setOutputCol("dispositionIndex");

    preparedData = dispositionIndexer.fit(preparedData).transform(preparedData);

    String[] featureCols = new String[]{
            "squareM",
            "timeTimeToPragueCityCenter",
            "floorIndex",
            "floorIndex",
            "dispositionIndex"
    };

    VectorAssembler assembler = new VectorAssembler().setInputCols(featureCols).setOutputCol("features");

    preparedData = assembler.transform(preparedData);

 //    ... some more impelemtation details

    RandomForestRegressor rf = new RandomForestRegressor().setLabelCol("price")
            .setFeaturesCol("features");

    return rf.fit(preparedData); 

关于java - 如何将数值和分类特征传递给 Apache Spark 中的 RandomForestRegressor : MLlib in Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44145465/

相关文章:

java - 创建 SAX 解析器时出错

java - Ant If/Unless 属性问题

apache-spark - 如何使用支持通用 ID 类型(int 和 long)的 Spark ML ALS 实现

python - 将带有 Python 的机器学习服务和机器学习功能添加到现有 SQL Server 2017

java - 尝试使用java填写网站表单,但表单标签嵌入在iframe标签中

scala - 如何从余弦相似度矩阵中获取项目ID?

hadoop - 可以触发流选择特定文件

machine-learning - 支持向量分类器中的平面分离和决策边界有什么区别?

python - 使用 pandas 和 scikit learn 使用二进制矩阵/出现矩阵创建决策树

java - Java 中可以声明多类型变量吗?