我有一组包含分类和连续特征的数据。我已经对所有分类变量进行了索引,并使用VectorAssembler创建了一个特征列
StringIndexerModel indexer = new StringIndexer() .setInputCol("categorical") .setOutputCol("categoricalIdx1") .setHandleInvalid("skip").fit(data); VectorAssembler assembler = new VectorAssembler() .setInputCols(new String[]{"categoricalIdx1","continuous"}) .setOutputCol("features"); DecisionTreeRegressor dt = new DecisionTreeRegressor() .setMaxBins(40) .setMaxDepth(10) .setFeaturesCol("features") .setLabelCol("commission") .setPredictionCol("prediction");
我找不到任何方法来指定哪些特征是分类特征,哪些是连续特征。由于所有列都已转换为数值,DecisionTreeRegressor如何区分它们?我在这里错过了什么?代码似乎运行良好,并且给出了相当不错的结果,但我有一种感觉,我在这里做了一些错误的事情。
回答:
Spark使用MaxBins
来区分一个特征是分类还是连续。如果不同值的数量 <= MaxBins
,则该特征被视为分类特征。否则,为连续特征。更多信息,请查看Spark的文档:决策树