Я работаю на Classification
с использованием Random Forest
алгоритма в Spark
есть образец dataset
который выглядит следующим образом:Как решить numClasses параметр, который будет передан алгоритма Random Forest в искру MLlib с pySpark
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
MlLib
? Я имею в виду, должен ли он быть равен числу уникальных значений в моем label
? Мой ярлык имеет как 10000
уникальные значения, поэтому, если я поместил 10000
в качестве значения numClasses
, то разве это не сильно снизило бы производительность?
Вот типичная сигнатура построения модели для Random Forest в MlLib:
model = RandomForest.trainClassifier(trainingData, numClasses=2, categoricalFeaturesInfo={},
numTrees=3, featureSubsetStrategy="auto",
impurity='gini', maxDepth=4, maxBins=32)
Я пытался относиться к этой проблеме как регрессии с использованием только РФ и рассматривать метки как числовые значения, а не (я только кодировал функции), но производительность очень плохая (RMSE составляет около 70-80). Я предполагал, что отрицательные значения приводят к снижению производительности. Поэтому я подумал о попытке классификации. И для каждого значения у меня может быть больше 300 образцов в моих полных данных. Если я кодирую метки также в регрессии, это повлияет на производительность? –
ну, это неправильный способ сделать. классификация никогда не будет лучше при регрессии, чем сама регрессия. Это не то, как нужно подходить к проблеме. Кроме того, отрицательные значения не имеют значения при регрессии, они также хороши, как положительные. Мое лучшее предположение - вы должны собрать гораздо больше возможностей, ваша текущая проблема, сводящаяся к тому, что каждый вектор, представленный как 4 в высокоразмерном пространстве, не кажется достаточно информативным, чтобы предсказать непрерывное значение. Особенно, что Город подразумевает государство, поэтому это дает еще меньше знаний, чем другие. – lejlot
Фактически в моем фактическом коде я использую набор из 12 различных функций, и данные немного отличаются от образца, который я показал выше (не мог публиковать фактические данные из-за ограничений, поэтому его представление). –