Hadoop: для обучения больших данных (в ГБ) с несколькими деревьями (выборка, скажем, N, например, x RandomTree) и тестирование

Я хочу написать MapReduce (может быть несколько раундов!)

1. Sample N records from Large data - for say X RandomTree
2. Train each tree (totally X)
3. And then test records on all these trees

Последовательно,

for X = 0 to 199:
    - sample N records from Large data
    - Train this tree
    - test for all test records

Это моя домашняя задача, поэтому мне просто нужна идея ..!

я не уверен с

  1. В картографе я могу отобрать ровно N записей и создать 200 небольших файлов обучающих данных?
  2. Чтобы проверить каждую запись на всех 200 первом варианте, я подумал, что каждый редуктор будет запускать небольшой тест (часть тестового файла) для ВСЕХ деревьев. второй вариант Я не уверен, как это реализовать, запустить 200 деревьев независимо, а тестовый файл находится в распределенном кеше, прогнозировать для каждой тестовой записи.

person code muncher    schedule 02.11.2012    source источник


Ответы (1)


Это зависит от того, насколько официально вы работаете.

формальный преобразователь не может выбрать ровно N записей. Потому что он не может вести счетчик и не знает общий размер данных. Конечно, практичный картограф в Hadoop мог бы это сделать. Но он, вероятно, не будет знать, сколько всего пластинок он получит.

Но, как вы сказали, это домашнее задание, я не думаю, что вам нужно гарантировать, что это ровно N. В частности, когда вы делаете выборку, в чем преимущество наличия ровно N записей?

Попробуйте следующее:

  1. Определить общий размер записей.
  2. Пусть каждый преобразователь выдает каждую запись с вероятностью N/D для каждого дерева (= ключ для редуктора).
  3. Пусть редьюсер обучает дерево на всех полученных им записях.
person Has QUIT--Anony-Mousse    schedule 02.11.2012
comment
Спасибо @ Anony-Mousse, я тоже знаю N (это нужно для того, чтобы убедиться, что он может хранить N записей в одиночном случайном дереве без ошибки размера кучи) 1. Я знаю записи размера (M). 2. Вы правы, мне нужно излучать с (N/M). вот чего я не знаю. поэтому каждый картограф получит некоторую запись (из этих больших данных), и как решить, что (N/M) вероятность находиться в (0-199) случайном дереве? Было бы здорово, если бы вы могли объяснить более подробно. 3. Я думаю, что это хороший способ, так как я не уверен, смогу ли я написать 200 небольших образцов файлов в одном задании по сокращению карты и передать их следующему заданию по уменьшению карты. - person code muncher; 02.11.2012
comment
Нарисуйте псевдослучайные числа для каждого объекта и дерева. Если значение ниже N/M, оно входит. В противном случае оно выходит. Псевдослучайность быстрее, чем случайность; вы не хотите, чтобы ваш кластер был в основном занят созданием случайных чисел. - person Has QUIT--Anony-Mousse; 02.11.2012
comment
Спасибо за быстрый ответ @Anony-Mousee, но мне нужно 200 случайных деревьев, не больше двух? - person code muncher; 02.11.2012
comment
Для каждого объекта и каждого дерева вам нужен рандом. Объект может входить в любую комбинацию деревьев, включая все или ни одного. - person Has QUIT--Anony-Mousse; 02.11.2012
comment
ну на самом деле мне нужно создать равномерно без замены, я не понял, как это возможно с тем, что вы предложили? чтобы было более понятно, из всех M записей мне нужно выбрать около N для каждого дерева (всего 200 деревьев) - person code muncher; 02.11.2012
comment
Вы обрабатываете один экземпляр за раз. Какова вероятность того, что экземпляр принадлежит первому дереву? Как вы можете сделать это, используя случайное число в 0..1? Это намного проще, чем вы думаете. Я не рисую по образцу. Я фильтрую вероятностным фильтром. - person Has QUIT--Anony-Mousse; 02.11.2012
comment
он принадлежит первому дереву, если я получаю случайное число ‹ N/M, это правильно? - person code muncher; 02.11.2012
comment
Может быть, я слишком много думаю... но я серьезно не понимаю вероятностную фильтрацию!! Я делал для орла или решки с вероятностью x, но здесь 200, и это меня оооочень смущает :((( - person code muncher; 02.11.2012
comment
Делайте по одному дереву. Вы хотите, чтобы они были независимо отобраны. Итак, вам нужно для каждого экземпляра 200 случайных чисел. Вот почему вам нужен быстрый генератор псевдослучайных чисел. Он не должен быть высокого качества, в основном он просто не должен создавать шаблоны, которые есть в ваших данных. - person Has QUIT--Anony-Mousse; 02.11.2012
comment
Я предполагаю, что вы делаете от 0 до н / м, от н / м до 2 н / м, от 2 н / м до 3 н / м, тогда? Не. Потому что это гарантирует, что ваши деревья будут обучены на непересекающихся данных, которые вы обычно не хотите применять. Вы хотите иметь шанс на перекрытие. И вы хотите иметь возможность увеличить количество деревьев или размер выборки, если это необходимо, до такой степени, что они должны перекрываться. - person Has QUIT--Anony-Mousse; 03.11.2012
comment
что я делаю, так это выбираю запись, беру запись и получаю ее вероятность принадлежать одному дереву (для i = от 0 до 199 получаю вероятность того, что она принадлежит i-му дереву, да, если ‹N/M, и это дерево не t получить свою запись N всего) - person code muncher; 03.11.2012