Sarus только что выпустил DP-XGBoost
Дифференциально частные усиленные деревья в масштабе
XGBoost — одна из самых популярных библиотек деревьев с градиентным усилением, представленная во многих решениях-победителях на конкурсах Kaggle. Он написан на C++ и может использоваться на многих языках: Python, R, Java, Julia или Scala. Он может работать в основных распределенных средах (Kubernetes, Apache Spark или Dask) для обработки наборов данных с миллиардами примеров.
XGBoost часто используется для обучения моделей на конфиденциальных данных. Поскольку это не гарантирует конфиденциальность, можно показать, что личная информация может оставаться в весах модели. Дифференциальная конфиденциальность (DP) — это правильная основа для устранения этого риска конфиденциальности. Мы рады объявить о первом дифференцированно-частном ответвлении XGBoost с открытым исходным кодом. Проект можно найти на Github.
Как это работает: деревья, усиленные DP
В статье 2019 года Li et. др. разработать метод для деревьев, повышенных DP. Sarus DP-XGBoost основан на их идеях с некоторыми улучшениями.
Ключевые улучшения заключаются в следующем:
- Мы используем метод приблизительного обучения XGBoost, способный обрабатывать огромные наборы данных, в отличие от мелкомасштабного базового точного метода.
- Мы уменьшаем добавленный шум, используя параметр min_child_weight в XGBoost. Этот параметр обычно используется для уменьшения переобучения и фактически позволяет значительно сократить потери конфиденциальности.
- Мы используем параметр подвыборка, чтобы повысить конфиденциальность за счет подвыборки Balle et. др. (2018).
- Мы используем дизайн XGBoost для работы в распределенном режиме на различных платформах, таких как Kubernetes, Dask или Apache Spark.
Метод подробно описан в техническом отчете.
Установка Sarus DP-XGBoost
Чтобы использовать библиотеку Python, вы можете просто установить пакет с pip
.
pip install dp-xgboost
Если пакет Wheels недоступен для вашей платформы, вам необходимо установить cmake
.
Вот и все, теперь вы можете использовать XGBoost с нашим дифференциально-приватным алгоритмом обучения дереву в Python!
Пример использования
Мы включили пример регрессии и классификации Python в репозиторий. На данный момент Sarus DP-XGBoost доступен для Python и Spark (Scala). Для дифференциальной конфиденциальности должны быть известны верхние и нижние границы каждой функции входной матрицы (эти границы должны быть общедоступными или оцениваться с помощью дифференциальной конфиденциальности). Метки также должны быть в [-1,1].
Помимо этой предварительной обработки, использование очень похоже на обычный XGBoost. На данный момент DP-XGBoost поддерживает регрессию и бинарную классификацию, и в будущем мы планируем добавить больше объективных функций. Вот фрагмент кода, который показывает DP-XGBoost в действии.
Параметры и результат DP-XGBoost
Наиболее важными параметрами дифференциальной конфиденциальности являются бюджет конфиденциальности на дерево 𝜀: dp_epsilon_per_tree
и количество деревьев num_boost_round
. Параметры частоты subsample
и min_child_weight
можно использовать для повышения точности вне выборки и повышения конфиденциальности.
DP-XGBoost возвращает обученную модель в виде объекта JSON
. Этот объект содержит обученную модель, как это делает XGBoost, а также параметры всех основных механизмов DP (экспоненциальный механизм и механизм Лапласа), используемых во время обучения. Механизмы составлены с использованием базовой композиции (потери конфиденциальности: 𝜀 суммируются, и, таким образом, общее потребление конфиденциальности увеличивается линейно с количеством механизмов), но если вы хотите, вы можете просто вычислить потерю конфиденциальности, используя свои собственные бухгалтера конфиденциальности (RDP, Gaussian-DP или f-DP) на основе механизмов, указанных в выходных данныхJSON
. При этом, если вы можете допустить небольшой 𝛿, вы можете добиться гораздо меньшего роста потери конфиденциальности: как квадратный корень из числа механизмов, а не линейный.
Если вы планируете опубликовать обученную модель, имейте в виду, что полный вывод JSON
сам по себе не DP!Это означает, что вы должны публиковать только условия разделения и конечные значения каждого дерева.
Мы очень рады внести свой вклад в инициативы DP с открытым исходным кодом и опираться на потрясающую работу команды XGBoost! 😎
См. код и наш технический отчет.