Версия дерева решений DiffPrivLib дает мне неверную точность.Python

Программы на Python
Anonymous
Версия дерева решений DiffPrivLib дает мне неверную точность.

Сообщение Anonymous »

IBM специально разработала свою библиотеку дифференциальной конфиденциальности DiffPrivLib, которая работает точно так же, как scikitlearn, и обеспечивает простоту использования. В руководствах на их сайте github указано, что при использовании epsilon = infinity (и, предположительно, того же случайного состояния) с DiffPrivLib вы должны получить модель, идентичную модели, идентичной частной версии из scikitlearn. Ссылка: github.com/IBM/ Differential-privacy-library/blob/main/notebooks/…
Я подтвердил, что это работает с Gaussian Naiive Bayes, но при использовании почти идентичного кода. фреймворки с классификатором дерева решений, я получаю совершенно другие значения. кто-нибудь еще сталкивался с этим? Вы видите, что не так с моим кодом?
Это код для запуска недифференцированного частного дерева решений с использованием scikitlearn, он отлично работает.

Код: Выделить всё

# Import necessary packages
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix
import diffprivlib as dp

# Open and read the data into a dataframe
train = pd.read_csv('train.csv', index_col=0)
test = pd.read_csv('test.csv', index_col=0)

# X are the independent variables, y are the dependent variables.
X_train = train.drop(['is_fraud'], axis=1)
y_train = train['is_fraud']
X_test = test.drop(['is_fraud'], axis=1)
y_test = test['is_fraud']

# Build a Decision Tree Classifier
dt = DecisionTreeClassifier(random_state=42)

# Model training
dt.fit(X_train, y_train)

# Predict Output
y_pred_dt = dt.predict(X_test)

# Output metrics
print(confusion_matrix(y_test, y_pred_dt))
Примечание. Я работаю с синтетическими данными и случайно взломал способ моделирования данных, добавив агрегаты, по которым разветвляется DT, и это дало мне аномальную точность. Но это проблема другого дня. На данный момент моя матрица путаницы выглядит так (идеально):

Код: Выделить всё

[[553574      0]
[     0   2145]]
Теперь о проблемной области. Если эпсилон установлен на бесконечность и используется то же случайное состояние, что и выше, я «должен» получать те же значения, а я нет. Вот мой код:

Код: Выделить всё

# Build a Decision Tree Classifier
DPdt = dp.models.DecisionTreeClassifier(random_state=42, epsilon=np.inf)

# Model training
DPdt.fit(X_train, y_train)

# Predict Output
y_pred_DPdt = DPdt.predict(X_test)

# Output metrics
print(confusion_matrix(y_test, y_pred_DPdt))
И это дает мне совершенно другую классификацию

Код: Выделить всё

[[553574      0]
[  1787    358]]
Может ли кто-нибудь увидеть, что я сделал не так?

Подробнее здесь: https://stackoverflow.com/questions/786 ... g-accuracy

Вернуться в «Python»