1

Я работаю на 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 в SparkMlLib? Я имею в виду, должен ли он быть равен числу уникальных значений в моем label? Мой ярлык имеет как 10000 уникальные значения, поэтому, если я поместил 10000 в качестве значения numClasses, то разве это не сильно снизило бы производительность?

Вот типичная сигнатура построения модели для Random Forest в MlLib:

model = RandomForest.trainClassifier(trainingData, numClasses=2, categoricalFeaturesInfo={}, 
            numTrees=3, featureSubsetStrategy="auto", 
            impurity='gini', maxDepth=4, maxBins=32) 

ответ

1

Путаница происходит из-за того, что вы делаете что-то, что вы не должны делать. Вы, безусловно, проблема регрессии/ранжирования, а не классификации. Почему вы думаете об этом как о классификации? Попробуйте ответить на эти два вопроса:

  • У вас есть по крайней мере 100 образцов на каждую значение (100000 * 100 = 1000000)?
  • В классах нет никакой структуры, поэтому, например, объекты со значением «200» не больше похожи на значения со значением «100» или «300», чем те, которые имеют значение «-1000» или « +2300" ?

Если по крайней мере один ответ нет, то вы не должны рассматривать это как проблему классификации.

Если по какой-то странной причине вы ответили дважды да, то ответ: «да, вы должны кодировать каждый определенное значение как другой класс», таким образом, ведущие к 10000 уникальных классов, что приводит к:

  • чрезвычайно несбалансированная классификация (РФ, не уравновешивая мету-обучаемому будет почти всегда терпит неудачу в таком сценарии)
  • экстремального числа классов (нет моделей, способных решить эту проблему, наверняка РФ не решит ее)
  • чрезвычайно малый размер задачи lem-looking at as small - ваше количество функций, я был бы удивлен, если бы вы могли предсказать из этого двоичного классификатора.Как вы можете видеть, как нерегулярные эти ценности, то есть 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% уверенностью это не проблема классификации, вы должны либо:

  • регресс на последнем значении (ключевое слово: reggresion)
  • строить ранжирование (ключевое слово: научиться ранжировать)
  • ведра ваши значения не более чем в 10 различных значений, а затем - классифицирует (ключевые слова: несбалансированная классификация, редкое двоичное представление)
+0

Я пытался относиться к этой проблеме как регрессии с использованием только РФ и рассматривать метки как числовые значения, а не (я только кодировал функции), но производительность очень плохая (RMSE составляет около 70-80). Я предполагал, что отрицательные значения приводят к снижению производительности. Поэтому я подумал о попытке классификации. И для каждого значения у меня может быть больше 300 образцов в моих полных данных. Если я кодирую метки также в регрессии, это повлияет на производительность? –

+0

ну, это неправильный способ сделать. классификация никогда не будет лучше при регрессии, чем сама регрессия. Это не то, как нужно подходить к проблеме. Кроме того, отрицательные значения не имеют значения при регрессии, они также хороши, как положительные. Мое лучшее предположение - вы должны собрать гораздо больше возможностей, ваша текущая проблема, сводящаяся к тому, что каждый вектор, представленный как 4 в высокоразмерном пространстве, не кажется достаточно информативным, чтобы предсказать непрерывное значение. Особенно, что Город подразумевает государство, поэтому это дает еще меньше знаний, чем другие. – lejlot

+0

Фактически в моем фактическом коде я использую набор из 12 различных функций, и данные немного отличаются от образца, который я показал выше (не мог публиковать фактические данные из-за ограничений, поэтому его представление). –

 Смежные вопросы

  • Нет связанных вопросов^_^