New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
About encode method of FixedPointEncoder for numpy array #484
Comments
I noticed that when executing below code, decreasing accuracy. from sklearn.datasets import load_iris,load_breast_cancer,load_digits
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import accuracy_score
import numpy as np
import crypten,torch
crypten.init()
def encrypted_knn_search(cipher_databases, cipher_query):
distances = (cipher_databases - cipher_query).pow(2).sum(dim=1).sqrt()
nearest_index = distances.argmin().get_plain_text()
return nearest_index
data = load_iris()
X = data.data
y = data.target
k = 1
knn = KNeighborsClassifier(n_neighbors=k)
stratified_k_fold = StratifiedKFold(n_splits=5)
accuracies_plain = []
accuracies_mpc = []
for train_index, test_index in stratified_k_fold.split(X, y):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# Plain
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
accuracies_plain.append(accuracy)
# Crypten
cipher_databases = crypten.cryptensor(X_train)
y_pred = []
for i in X_test:
cipher_query = crypten.cryptensor(i)
pred = encrypted_knn_search(cipher_databases,cipher_query)
idx = (pred == 1).nonzero().squeeze().item()
y_pred.append(y_train[idx])
accuracy = accuracy_score(y_test, y_pred)
accuracies_mpc.append(accuracy)
mean_accuracy_plain = np.mean(accuracies_plain)
print('Accuracy for each fold: ', accuracies_plain)
print('Mean accuracy Plain: ', mean_accuracy_plain)
mean_accuracy_mpc = np.mean(accuracies_mpc)
print('Accuracy for each fold: ', accuracies_mpc)
print('Mean accuracy MPC: ', mean_accuracy_mpc) If i convert numpy array to tensor before passing cryptetensor(), accuracy improved. from sklearn.datasets import load_iris,load_breast_cancer,load_digits
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import accuracy_score
import numpy as np
import crypten,torch
crypten.init()
def encrypted_knn_search(cipher_databases, cipher_query):
distances = (cipher_databases - cipher_query).pow(2).sum(dim=1).sqrt()
nearest_index = distances.argmin().get_plain_text()
return nearest_index
data = load_iris()
X = data.data
y = data.target
k = 1
knn = KNeighborsClassifier(n_neighbors=k)
stratified_k_fold = StratifiedKFold(n_splits=5)
accuracies_plain = []
accuracies_mpc = []
for train_index, test_index in stratified_k_fold.split(X, y):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# Plain
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
accuracies_plain.append(accuracy)
# Crypten
cipher_databases = crypten.cryptensor(torch.tensor(X_train))
y_pred = []
for i in X_test:
cipher_query = crypten.cryptensor(torch.tensor(i))
pred = encrypted_knn_search(cipher_databases,cipher_query)
idx = (pred == 1).nonzero().squeeze().item()
y_pred.append(y_train[idx])
accuracy = accuracy_score(y_test, y_pred)
accuracies_mpc.append(accuracy)
mean_accuracy_plain = np.mean(accuracies_plain)
print('Accuracy for each fold: ', accuracies_plain)
print('Mean accuracy Plain: ', mean_accuracy_plain)
mean_accuracy_mpc = np.mean(accuracies_mpc)
print('Accuracy for each fold: ', accuracies_mpc)
print('Mean accuracy MPC: ', mean_accuracy_mpc) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi, thank you for the great MPC framework.
I think we need parentheses here.
CrypTen/crypten/encoder.py
Line 62 in 6ef1511
should be
Thank you.
The text was updated successfully, but these errors were encountered: