我正在Classification
使用Random Forest
Spark
算法dataset
示例Level1,Male,New York,New York,352.888890
Level1,Male,San Fransisco,California,495.8001345
Level2,Male,New York,New York,-495.8001345
Level1,Male,Columbus,Ohio,165.22352099
Level3,Male,New York,New York,495.8
Level4,Male,Columbus,Ohio,652.8
Level5,Female,Stamford,Connecticut,495.8
Level1,Female,San Fransisco,California,495.8001345
Level3,Male,Stamford,Connecticut,-552.8234
Level6,Female,Columbus,Ohio,7000
,如下所示:
label
此处,每行中的最后一个值将用作features
,其余值将用作label
。但我想将165.22352099
视为一个类别,而不是一个数字。因此,-552.8234
将表示一个类别,features
也将如此。为此,我将label
和numClasses
编码为分类数据。现在我遇到的困难是决定我应该在Random Forest
Spark
的{{1}}算法中为MlLib
参数传递什么?我的意思是它应该等于我label
中唯一值的数量吗?我的标签有10000
个唯一值,因此,如果我将10000
作为numClasses
的值,那么它是否会显着降低性能?
以下是在MlLib中为随机森林建立模型的典型签名:
model = RandomForest.trainClassifier(trainingData, numClasses=2, categoricalFeaturesInfo={},
numTrees=3, featureSubsetStrategy="auto",
impurity='gini', maxDepth=4, maxBins=32)
答案 0 :(得分:1)
这种困惑来自于你正在做一些你不应该做的事情。你的问题显然是回归/排名,而不是分类。为什么你会把它看作一个分类?试着回答这两个问题:
如果至少有一个答案是否,那么不应将此视为分类问题。
如果由于一些奇怪的原因你回答了两次是,那么答案是:“是的,你应该将每个不同的值编码为不同的类”,从而导致10000个唯一的类,这导致:
问题的极小维度 - 如果您可以从二进制分类预测,我会感到惊讶的是您的功能数量很少。正如你可以看到这些值有多不规则,你有3个点只有第一个值的分歧,你会得到完全不同的结果:
Level1,Male,New York,New York,352.888890
Level2,Male,New York,New York,-495.8001345
Level3,Male,New York,New York,495.8
总而言之,几乎100%的确定性这不是分类问题,你应该: