SKLearn Pipeline calculate sensitivity of categorical features for Local DP
@grilhami ya está trabajando en esto.
Desde el 30/11/2021.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Feature Description
The current SKLearn Pipeline noise mechanism "operator" for Local DPassumes that the dataset given contains only all numerical features. This means that noise is calculated on top of the sensitivity calculation on numerical features.
However, most often, datasets also contain categorical features, which requires a different method to calculate the sensitivity. The "operator" should also support categorical features.
This applies to all the noise mechanisms: LaplaceMechanism, GaussianMechanism, and GeometricMechanism.
Note: as far as this issue was created, only LaplaceMechanism has been implemented, so it's a good starting point to start with LaplaceMechanism. Once GeometricMechanism and GaussianMechanism have been implemented, the specifications for categorical feature support are the same.
Additional Context
Preferably, the support for the categorial features would be in the form of parameters for the "operator" class.
For example, in the case of LaplaceMechanism, it would look something like this:
# Set a privacy budget accountant
accountant = BudgetAccountant(10000)
# Set sensitivity function for numerical data
sensitivity = lambda x: (max(x) - min(x))/ (len(x) + 1)
# Set sensitivity function for categorical data
sensitivity_cat = lambda x: ...
# Indecies of the categorical features in the dataset
cat_features = [0, 1, ...]
# Set laplace mechanism with epsilon, sensitivity, and accountant
laplace = LaplaceMechanism(
epsilon=0.1,
sensitivity=sensitivity,
accountant=accountant,
sensitivity_cat=sensitivity_cat,
cat_features=cat_features
)
# Initialize scaler and naive bayes extimator
scaler = StandardScaler()
nb = GaussianNB()
# Create the pipeline
pipe = Pipeline([('scaler', scaler), ('laplace', laplace), ('nb', nb)])
For more examples, please have look at the notebook example of Laplace Mechanism's implementation.
As starting guidance, please refer to the source code for LaplaceMechanism in here.
- Lenguaje dominante
- Python
- Estrellas
- 550
- Forks
- 142
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de OpenMined/PyDP
-
Type: New Feature :heavy_plus_sign:
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
-
Type: Question :grey_question:
Dificultad 3/5 1-2 días Aptitud para principiantes 25/100
-
Type: Question :grey_question:
Dificultad 4/5 3-5 días Aptitud para principiantes 32/100
-
Type: Improvement :chart_with_upwards_trend:
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Type: New Feature :heavy_plus_sign:
Dificultad 3/5 1-2 días Aptitud para principiantes 38/100
Todos los issues de OpenMined/PyDP
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-2 días Aptitud para principiantes 70/100
-
FingerprintSplitter raises ZeroDivisionError when int(frac_train * len(dataset)) floors to zeroAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 7 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
lmstudio-ai/mlx-engine#376 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
pyiron/bagofholding#166 ·