У меня есть 2 класса, и у каждого класса есть 140 примеров, и у меня есть 4 клиента, я хотел бы создать набор данных не-iid, как в статье МакМахана, как разделить примеры на фрагменты?
Примечание: есть много понятий "неидейность", которые могут быть интересны для изучения.
Метка неидентификатора : вы можете захотеть сделать распределение этикеток очень несбалансированным среди клиентов. Равномерно распределяя количество примеров, мы все равно можем получить не-iid, например [(35, 35), (10, 60), (50, 20), (45, 25)]. В документе McMahan 2016 используется аналогичный подход, но в нем используется 10 классов, и большинство клиентов получают только два класса (точный метод приведен на странице 5).
[(35, 35), (10, 60), (50, 20), (45, 25)]
Количество данных : возможно, вы захотите предоставить некоторым клиентам больше данных, чем другим. С 280 примерами, возможно, разделение составляет (180, 80, 10, 10) примеров (игнорирует, как метки распределены). Набор данных StackOverflow в TensorFlow Federated также демонстрирует это, поскольку у некоторых очисток есть десятки тысяч примеров, а у других только 100.
(180, 80, 10, 10)
Feature non-iid : Если в пространстве функций есть шаблоны, может быть полезно ограничить определенные шаблоны для определенных пользователей. Например, в задаче распознавания изображений, возможно, некоторые камеры имели другой баланс белого, вращение или насыщенность цвета, чем другие (даже если они имеют большинство или все метки). Вместо случайного перемешивания их между синтетическими c клиентами, группирование схожих шаблонов функций в один клиент может дать другую форму non-iid.