2016-10-12 2 views
6

Мне любопытно, есть ли что-то похожее на http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedShuffleSplit.html от sklearn для apache-spark в последней версии 2.0.1.Испытание на искровой поезд. Разгон

До сих пор я мог найти только https://spark.apache.org/docs/latest/mllib-statistics.html#stratified-sampling, который, похоже, не очень подходит для разбивки сильно несбалансированного набора данных на образцы поездов/испытаний.

+0

См [Пример: выбор модели с помощью раскола проверки поезда] (HTTPS: // искровым .apache.org/docs/latest/ml-tuning.html # train-validation-split) ** TrainValidati onSplit ** создает единую пару (набор для обучения, тестирования). Он разбивает набор данных на эти две части, используя параметр trainRatio. –

+0

Спасибо. Я не знал об этом. Тем не менее, TrainValidationSplit не кажется случайным и не поддерживает начальные расщепления. Я что-то упустил? –

+2

Вы правы, это билет Jira об этом. [Поддержка сбалансированных ярлыков классов при расщеплении наборов наборы/перекрестные проверки] (https://issues.apache.org/jira/browse/SPARK-8971). Итак, Mllib пока не поддерживает эту функцию. –

ответ

0

Хотя этот ответ не является специфичным для Spark, в бассе Apache я делаю это, чтобы разделить поезд на 66% и проверить 33% (просто иллюстративный пример, вы можете настроить нижеописанный раздел_fn, чтобы быть более сложными и принимать аргументы, такие как указать количество ковшей или выбора смещения к чему-то или обеспечить рандомизации является справедливым по размерам, и т.д.):

raw_data = p | 'Read Data' >> Read(...) 
 

 
clean_data = (raw_data 
 
       | "Clean Data" >> beam.ParDo(CleanFieldsFn()) 
 

 

 
def partition_fn(element): 
 
    return random.randint(0, 2) 
 

 
random_buckets = (clean_data | beam.Partition(partition_fn, 3)) 
 

 
clean_train_data = ((random_buckets[0], random_buckets[1]) 
 
        | beam.Flatten()) 
 

 
clean_eval_data = random_buckets[2]

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