ZamaKlinikV2 / server2.py
AeternumS's picture
Upload server2.py (#2)
f5ed7d2 verified
raw
history blame
3.9 kB
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import joblib
from sklearn.tree import DecisionTreeClassifier, XGBClassifier #using sklearn decisiontreeclassifier
from sklearn.model_selection import train_test_split
import os
import shutil
# Define the directory for FHE client/server files
fhe_directory = '/tmp/fhe_client_server_files/'
# Create the directory if it does not exist
if not os.path.exists(fhe_directory):
os.makedirs(fhe_directory)
else:
# If it exists, delete its contents
shutil.rmtree(fhe_directory)
os.makedirs(fhe_directory)
data=pd.read_csv('data/heart.xls')
data.info() #checking the info
data_corr=data.corr()
plt.figure(figsize=(20,20))
sns.heatmap(data=data_corr,annot=True)
#Heatmap for data
"""
# Get the Data
X_train, y_train, X_val, y_val = train_test_split()
classifier = XGBClassifier()
# Training the Model
classifier = classifier.fit(X_train, y_train)
# Trained Model Evaluation on Validation Dataset
confidence = classifier.score(X_val, y_val)
# Validation Data Prediction
y_pred = classifier.predict(X_val)
# Model Validation Accuracy
accuracy = accuracy_score(y_val, y_pred)
# Model Confusion Matrix
conf_mat = confusion_matrix(y_val, y_pred)
# Model Classification Report
clf_report = classification_report(y_val, y_pred)
# Model Cross Validation Score
score = cross_val_score(classifier, X_val, y_val, cv=3)
try:
# Load Trained Model
clf = load(str(self.model_save_path + saved_model_name + ".joblib"))
except Exception as e:
print("Model not found...")
if test_data is not None:
result = clf.predict(test_data)
print(result)
else:
result = clf.predict(self.test_features)
accuracy = accuracy_score(self.test_labels, result)
clf_report = classification_report(self.test_labels, result)
print(accuracy, clf_report)
"""
####################
feature_value=np.array(data_corr['output'])
for i in range(len(feature_value)):
if feature_value[i]<0:
feature_value[i]=-feature_value[i]
print(feature_value)
features_corr=pd.DataFrame(feature_value,index=data_corr['output'].index,columns=['correalation'])
feature_sorted=features_corr.sort_values(by=['correalation'],ascending=False)
feature_selected=feature_sorted.index
feature_selected #selected features which are very much correalated
clean_data=data[feature_selected]
#making input and output dataset
X=clean_data.iloc[:,1:]
Y=clean_data['output']
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.25,random_state=0)
print(x_train.shape,y_train.shape,x_test.shape,y_test.shape) #data is splited in traing and testing dataset
# feature scaling
from sklearn.preprocessing import StandardScaler
sc=StandardScaler()
x_train=sc.fit_transform(x_train)
x_test=sc.transform(x_test)
#training our model
dt=XGBClassifier(criterion='entropy',max_depth=6)
dt.fit(x_train,y_train)
#dt.compile(x_trqin)
#predicting the value on testing data
y_pred=dt.predict(x_test)
#ploting the data
from sklearn.metrics import confusion_matrix
conf_mat=confusion_matrix(y_test,y_pred)
print(conf_mat)
accuracy=dt.score(x_test,y_test)
print("\nThe accuracy of decisiontreelassifier on Heart disease prediction dataset is "+str(round(accuracy*100,2))+"%")
joblib.dump(dt, 'heart_disease_dt_model.pkl')
from concrete.ml.sklearn import DecisionTreeClassifier as ConcreteDecisionTreeClassifier
from concrete.ml.sklearn import XGBClassifier as ConcreteXGBClassifier
fhe_compatible = ConcreteXGBClassifier.from_sklearn_model(dt, x_train, n_bits = 10) #de FHE
fhe_compatible.compile(x_train)
#### server
from concrete.ml.deployment import FHEModelDev, FHEModelClient, FHEModelServer
# Setup the development environment
dev = FHEModelDev(path_dir=fhe_directory, model=fhe_compatible)
dev.save()
# Setup the server
server = FHEModelServer(path_dir=fhe_directory)
server.load()