0

Я пытаюсь сделать базовую классификацию с несколькими метками в Azure ML. У меня есть некоторые базовые данные в следующем формате:Лазурная машина, которая изучает даже выборку

value_x value_y label 
x1  y1  label1 
x2  y2  label1 
x3  y3  label2 
..... 

Моя проблема заключается в том, что в моих данных некоторые ярлыки (из общего числа пяти) избыточно, так как около 40% от данных label1, около 20% это метка 2, а остальные около 10%.

Я хотел бы получить выборку для обучения моей модели, чтобы каждая метка была представлена ​​в равных количествах.

Пробовал параметр стратификации в модуле Sampling в столбце меток, но это просто дает мне выборку с тем же распределением меток, что и в исходном наборе данных.

Любая идея, как я мог бы сделать это с помощью модуля?

+1

Создать R-модуль для управления данными? Не уверен, что это лучшая практика. – misha130

+0

Я написал сценарий Python для этого в конце, но мне было интересно, есть ли что-то уже построенное, в котором я отсутствовал. – tamasgobesz

ответ

3

Я был в состоянии сделать это, используя комбинацию Split Data, Partition and Sample и Add Rows модулей. Там может быть более простой способ сделать это, но я подтвердил, что он работает. :) Я опубликовал свою работу по адресу http://gallery.azureml.net/Details/1245147fd7004e91bc7a3683cda19cc7, чтобы вы могли захватить ее прямо оттуда и запустить ее, чтобы подтвердить, что она делает то, что вы ожидаете.

Поскольку вы сказали, что хотите сэмплировать данные, я просто уменьшил каждую из меток до 10%, чтобы все ярлыки были представлены одинаково. Поскольку у вас есть хорошее представление о распределении в вашем наборе данных, оставьте метку 3, 4 и 5 всего примерно на 10% и уменьшите метку 1 на 1/4 и наклейте 2 на 1/2, чтобы получить около 10% из них, так как Что ж.

Чтобы объяснить, что я сделал в рабочем пространстве связаны выше:

  • Я использовал некоторые модули «Split Data», чтобы отфильтровать данные label1 и LABEL2. В модуле Split Data измените режим разделения на «Регулярное выражение» и установите регулярное выражение на «Ярлык»^label1 (для получения данных label1, например).
  • Затем я использовал некоторые модули «Partition and Sample», чтобы соответствующим образом уменьшить размер данных label1 и label2.
  • Наконец, я использовал некоторые модули «Добавить строки», чтобы снова объединить все данные.

Наконец, я не включил его в свою работу, но вы также можете посмотреть модуль SMOTE. Это увеличит количество низкоуровневых образцов с использованием передискретизации синтетического меньшинства.

+0

А, мне даже не приходило в голову так думать, спасибо большое! :) – tamasgobesz