AeternumS commited on
Commit
32965bb
1 Parent(s): 624781a
Files changed (7) hide show
  1. .gitignore +1 -0
  2. app.py +44 -0
  3. client.py +31 -0
  4. data/heart.xls +304 -0
  5. heart_disease_dt_model.pkl +0 -0
  6. requirements.txt +7 -0
  7. server.py +149 -0
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ venv
app.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pandas as pd
3
+ import joblib # for loading the saved model
4
+ from sklearn.tree import DecisionTreeClassifier #using sklearn decisiontreeclassifier
5
+
6
+ #from concrete.ml.sklearn.xgb import DecisionTreeClassifier
7
+
8
+ # Load the saved model
9
+ dt = joblib.load('heart_disease_dt_model.pkl')
10
+
11
+ # Load the dataset and select the relevant features
12
+ data = pd.read_csv('data/heart.xls')
13
+
14
+ # Perform the correlation analysis
15
+ data_corr = data.corr()
16
+
17
+ # Select features based on correlation with 'output'
18
+ feature_value = np.array(data_corr['output'])
19
+ for i in range(len(feature_value)):
20
+ if feature_value[i] < 0:
21
+ feature_value[i] = -feature_value[i]
22
+
23
+ features_corr = pd.DataFrame(feature_value, index=data_corr['output'].index, columns=['correlation'])
24
+ feature_sorted = features_corr.sort_values(by=['correlation'], ascending=False)
25
+ feature_selected = feature_sorted.index
26
+
27
+ # Clean the data by selecting the most correlated features
28
+ clean_data = data[feature_selected]
29
+
30
+ # Extract the first row of feature data for prediction (excluding 'output' column)
31
+ sample_data = clean_data.iloc[0, 1:].values.reshape(1, -1) # Reshape to 2D array for model input
32
+
33
+ #fhe_circuit =
34
+ # Make prediction on the first row of data
35
+ #prediction = dt.predict(sample_data, fhe="execute")
36
+ prediction = dt.predict(sample_data) # clair
37
+
38
+ # Display the prediction result
39
+ print(prediction)
40
+ if prediction == 1:
41
+ print("Prediction: The patient is likely to have heart disease.")
42
+ else:
43
+ print("Prediction: The patient is unlikely to have heart disease.")
44
+
client.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from concrete.ml.deployment import FHEModelDev, FHEModelClient, FHEModelServer
2
+
3
+ # Setup the client
4
+ client = FHEModelClient(path_dir=fhe_directory, key_dir="/tmp/keys_client")
5
+ serialized_evaluation_keys = client.get_serialized_evaluation_keys()
6
+
7
+
8
+ # Load the dataset and select the relevant features
9
+ data = pd.read_csv('data/heart.xls')
10
+
11
+ # Perform the correlation analysis
12
+ data_corr = data.corr()
13
+
14
+ # Select features based on correlation with 'output'
15
+ feature_value = np.array(data_corr['output'])
16
+ for i in range(len(feature_value)):
17
+ if feature_value[i] < 0:
18
+ feature_value[i] = -feature_value[i]
19
+
20
+ features_corr = pd.DataFrame(feature_value, index=data_corr['output'].index, columns=['correlation'])
21
+ feature_sorted = features_corr.sort_values(by=['correlation'], ascending=False)
22
+ feature_selected = feature_sorted.index
23
+
24
+ # Clean the data by selecting the most correlated features
25
+ clean_data = data[feature_selected]
26
+
27
+ # Extract the first row of feature data for prediction (excluding 'output' column)
28
+ sample_data = clean_data.iloc[0, 1:].values.reshape(1, -1) # Reshape to 2D array for model input
29
+
30
+ encrypted_data = client.quantize_encrypt_serialize(sample_data)
31
+
data/heart.xls ADDED
@@ -0,0 +1,304 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ age,sex,cp,trtbps,chol,fbs,restecg,thalachh,exng,oldpeak,slp,caa,thall,output
2
+ 63,1,3,145,233,1,0,150,0,2.3,0,0,1,1
3
+ 37,1,2,130,250,0,1,187,0,3.5,0,0,2,1
4
+ 41,0,1,130,204,0,0,172,0,1.4,2,0,2,1
5
+ 56,1,1,120,236,0,1,178,0,0.8,2,0,2,1
6
+ 57,0,0,120,354,0,1,163,1,0.6,2,0,2,1
7
+ 57,1,0,140,192,0,1,148,0,0.4,1,0,1,1
8
+ 56,0,1,140,294,0,0,153,0,1.3,1,0,2,1
9
+ 44,1,1,120,263,0,1,173,0,0,2,0,3,1
10
+ 52,1,2,172,199,1,1,162,0,0.5,2,0,3,1
11
+ 57,1,2,150,168,0,1,174,0,1.6,2,0,2,1
12
+ 54,1,0,140,239,0,1,160,0,1.2,2,0,2,1
13
+ 48,0,2,130,275,0,1,139,0,0.2,2,0,2,1
14
+ 49,1,1,130,266,0,1,171,0,0.6,2,0,2,1
15
+ 64,1,3,110,211,0,0,144,1,1.8,1,0,2,1
16
+ 58,0,3,150,283,1,0,162,0,1,2,0,2,1
17
+ 50,0,2,120,219,0,1,158,0,1.6,1,0,2,1
18
+ 58,0,2,120,340,0,1,172,0,0,2,0,2,1
19
+ 66,0,3,150,226,0,1,114,0,2.6,0,0,2,1
20
+ 43,1,0,150,247,0,1,171,0,1.5,2,0,2,1
21
+ 69,0,3,140,239,0,1,151,0,1.8,2,2,2,1
22
+ 59,1,0,135,234,0,1,161,0,0.5,1,0,3,1
23
+ 44,1,2,130,233,0,1,179,1,0.4,2,0,2,1
24
+ 42,1,0,140,226,0,1,178,0,0,2,0,2,1
25
+ 61,1,2,150,243,1,1,137,1,1,1,0,2,1
26
+ 40,1,3,140,199,0,1,178,1,1.4,2,0,3,1
27
+ 71,0,1,160,302,0,1,162,0,0.4,2,2,2,1
28
+ 59,1,2,150,212,1,1,157,0,1.6,2,0,2,1
29
+ 51,1,2,110,175,0,1,123,0,0.6,2,0,2,1
30
+ 65,0,2,140,417,1,0,157,0,0.8,2,1,2,1
31
+ 53,1,2,130,197,1,0,152,0,1.2,0,0,2,1
32
+ 41,0,1,105,198,0,1,168,0,0,2,1,2,1
33
+ 65,1,0,120,177,0,1,140,0,0.4,2,0,3,1
34
+ 44,1,1,130,219,0,0,188,0,0,2,0,2,1
35
+ 54,1,2,125,273,0,0,152,0,0.5,0,1,2,1
36
+ 51,1,3,125,213,0,0,125,1,1.4,2,1,2,1
37
+ 46,0,2,142,177,0,0,160,1,1.4,0,0,2,1
38
+ 54,0,2,135,304,1,1,170,0,0,2,0,2,1
39
+ 54,1,2,150,232,0,0,165,0,1.6,2,0,3,1
40
+ 65,0,2,155,269,0,1,148,0,0.8,2,0,2,1
41
+ 65,0,2,160,360,0,0,151,0,0.8,2,0,2,1
42
+ 51,0,2,140,308,0,0,142,0,1.5,2,1,2,1
43
+ 48,1,1,130,245,0,0,180,0,0.2,1,0,2,1
44
+ 45,1,0,104,208,0,0,148,1,3,1,0,2,1
45
+ 53,0,0,130,264,0,0,143,0,0.4,1,0,2,1
46
+ 39,1,2,140,321,0,0,182,0,0,2,0,2,1
47
+ 52,1,1,120,325,0,1,172,0,0.2,2,0,2,1
48
+ 44,1,2,140,235,0,0,180,0,0,2,0,2,1
49
+ 47,1,2,138,257,0,0,156,0,0,2,0,2,1
50
+ 53,0,2,128,216,0,0,115,0,0,2,0,0,1
51
+ 53,0,0,138,234,0,0,160,0,0,2,0,2,1
52
+ 51,0,2,130,256,0,0,149,0,0.5,2,0,2,1
53
+ 66,1,0,120,302,0,0,151,0,0.4,1,0,2,1
54
+ 62,1,2,130,231,0,1,146,0,1.8,1,3,3,1
55
+ 44,0,2,108,141,0,1,175,0,0.6,1,0,2,1
56
+ 63,0,2,135,252,0,0,172,0,0,2,0,2,1
57
+ 52,1,1,134,201,0,1,158,0,0.8,2,1,2,1
58
+ 48,1,0,122,222,0,0,186,0,0,2,0,2,1
59
+ 45,1,0,115,260,0,0,185,0,0,2,0,2,1
60
+ 34,1,3,118,182,0,0,174,0,0,2,0,2,1
61
+ 57,0,0,128,303,0,0,159,0,0,2,1,2,1
62
+ 71,0,2,110,265,1,0,130,0,0,2,1,2,1
63
+ 54,1,1,108,309,0,1,156,0,0,2,0,3,1
64
+ 52,1,3,118,186,0,0,190,0,0,1,0,1,1
65
+ 41,1,1,135,203,0,1,132,0,0,1,0,1,1
66
+ 58,1,2,140,211,1,0,165,0,0,2,0,2,1
67
+ 35,0,0,138,183,0,1,182,0,1.4,2,0,2,1
68
+ 51,1,2,100,222,0,1,143,1,1.2,1,0,2,1
69
+ 45,0,1,130,234,0,0,175,0,0.6,1,0,2,1
70
+ 44,1,1,120,220,0,1,170,0,0,2,0,2,1
71
+ 62,0,0,124,209,0,1,163,0,0,2,0,2,1
72
+ 54,1,2,120,258,0,0,147,0,0.4,1,0,3,1
73
+ 51,1,2,94,227,0,1,154,1,0,2,1,3,1
74
+ 29,1,1,130,204,0,0,202,0,0,2,0,2,1
75
+ 51,1,0,140,261,0,0,186,1,0,2,0,2,1
76
+ 43,0,2,122,213,0,1,165,0,0.2,1,0,2,1
77
+ 55,0,1,135,250,0,0,161,0,1.4,1,0,2,1
78
+ 51,1,2,125,245,1,0,166,0,2.4,1,0,2,1
79
+ 59,1,1,140,221,0,1,164,1,0,2,0,2,1
80
+ 52,1,1,128,205,1,1,184,0,0,2,0,2,1
81
+ 58,1,2,105,240,0,0,154,1,0.6,1,0,3,1
82
+ 41,1,2,112,250,0,1,179,0,0,2,0,2,1
83
+ 45,1,1,128,308,0,0,170,0,0,2,0,2,1
84
+ 60,0,2,102,318,0,1,160,0,0,2,1,2,1
85
+ 52,1,3,152,298,1,1,178,0,1.2,1,0,3,1
86
+ 42,0,0,102,265,0,0,122,0,0.6,1,0,2,1
87
+ 67,0,2,115,564,0,0,160,0,1.6,1,0,3,1
88
+ 68,1,2,118,277,0,1,151,0,1,2,1,3,1
89
+ 46,1,1,101,197,1,1,156,0,0,2,0,3,1
90
+ 54,0,2,110,214,0,1,158,0,1.6,1,0,2,1
91
+ 58,0,0,100,248,0,0,122,0,1,1,0,2,1
92
+ 48,1,2,124,255,1,1,175,0,0,2,2,2,1
93
+ 57,1,0,132,207,0,1,168,1,0,2,0,3,1
94
+ 52,1,2,138,223,0,1,169,0,0,2,4,2,1
95
+ 54,0,1,132,288,1,0,159,1,0,2,1,2,1
96
+ 45,0,1,112,160,0,1,138,0,0,1,0,2,1
97
+ 53,1,0,142,226,0,0,111,1,0,2,0,3,1
98
+ 62,0,0,140,394,0,0,157,0,1.2,1,0,2,1
99
+ 52,1,0,108,233,1,1,147,0,0.1,2,3,3,1
100
+ 43,1,2,130,315,0,1,162,0,1.9,2,1,2,1
101
+ 53,1,2,130,246,1,0,173,0,0,2,3,2,1
102
+ 42,1,3,148,244,0,0,178,0,0.8,2,2,2,1
103
+ 59,1,3,178,270,0,0,145,0,4.2,0,0,3,1
104
+ 63,0,1,140,195,0,1,179,0,0,2,2,2,1
105
+ 42,1,2,120,240,1,1,194,0,0.8,0,0,3,1
106
+ 50,1,2,129,196,0,1,163,0,0,2,0,2,1
107
+ 68,0,2,120,211,0,0,115,0,1.5,1,0,2,1
108
+ 69,1,3,160,234,1,0,131,0,0.1,1,1,2,1
109
+ 45,0,0,138,236,0,0,152,1,0.2,1,0,2,1
110
+ 50,0,1,120,244,0,1,162,0,1.1,2,0,2,1
111
+ 50,0,0,110,254,0,0,159,0,0,2,0,2,1
112
+ 64,0,0,180,325,0,1,154,1,0,2,0,2,1
113
+ 57,1,2,150,126,1,1,173,0,0.2,2,1,3,1
114
+ 64,0,2,140,313,0,1,133,0,0.2,2,0,3,1
115
+ 43,1,0,110,211,0,1,161,0,0,2,0,3,1
116
+ 55,1,1,130,262,0,1,155,0,0,2,0,2,1
117
+ 37,0,2,120,215,0,1,170,0,0,2,0,2,1
118
+ 41,1,2,130,214,0,0,168,0,2,1,0,2,1
119
+ 56,1,3,120,193,0,0,162,0,1.9,1,0,3,1
120
+ 46,0,1,105,204,0,1,172,0,0,2,0,2,1
121
+ 46,0,0,138,243,0,0,152,1,0,1,0,2,1
122
+ 64,0,0,130,303,0,1,122,0,2,1,2,2,1
123
+ 59,1,0,138,271,0,0,182,0,0,2,0,2,1
124
+ 41,0,2,112,268,0,0,172,1,0,2,0,2,1
125
+ 54,0,2,108,267,0,0,167,0,0,2,0,2,1
126
+ 39,0,2,94,199,0,1,179,0,0,2,0,2,1
127
+ 34,0,1,118,210,0,1,192,0,0.7,2,0,2,1
128
+ 47,1,0,112,204,0,1,143,0,0.1,2,0,2,1
129
+ 67,0,2,152,277,0,1,172,0,0,2,1,2,1
130
+ 52,0,2,136,196,0,0,169,0,0.1,1,0,2,1
131
+ 74,0,1,120,269,0,0,121,1,0.2,2,1,2,1
132
+ 54,0,2,160,201,0,1,163,0,0,2,1,2,1
133
+ 49,0,1,134,271,0,1,162,0,0,1,0,2,1
134
+ 42,1,1,120,295,0,1,162,0,0,2,0,2,1
135
+ 41,1,1,110,235,0,1,153,0,0,2,0,2,1
136
+ 41,0,1,126,306,0,1,163,0,0,2,0,2,1
137
+ 49,0,0,130,269,0,1,163,0,0,2,0,2,1
138
+ 60,0,2,120,178,1,1,96,0,0,2,0,2,1
139
+ 62,1,1,128,208,1,0,140,0,0,2,0,2,1
140
+ 57,1,0,110,201,0,1,126,1,1.5,1,0,1,1
141
+ 64,1,0,128,263,0,1,105,1,0.2,1,1,3,1
142
+ 51,0,2,120,295,0,0,157,0,0.6,2,0,2,1
143
+ 43,1,0,115,303,0,1,181,0,1.2,1,0,2,1
144
+ 42,0,2,120,209,0,1,173,0,0,1,0,2,1
145
+ 67,0,0,106,223,0,1,142,0,0.3,2,2,2,1
146
+ 76,0,2,140,197,0,2,116,0,1.1,1,0,2,1
147
+ 70,1,1,156,245,0,0,143,0,0,2,0,2,1
148
+ 44,0,2,118,242,0,1,149,0,0.3,1,1,2,1
149
+ 60,0,3,150,240,0,1,171,0,0.9,2,0,2,1
150
+ 44,1,2,120,226,0,1,169,0,0,2,0,2,1
151
+ 42,1,2,130,180,0,1,150,0,0,2,0,2,1
152
+ 66,1,0,160,228,0,0,138,0,2.3,2,0,1,1
153
+ 71,0,0,112,149,0,1,125,0,1.6,1,0,2,1
154
+ 64,1,3,170,227,0,0,155,0,0.6,1,0,3,1
155
+ 66,0,2,146,278,0,0,152,0,0,1,1,2,1
156
+ 39,0,2,138,220,0,1,152,0,0,1,0,2,1
157
+ 58,0,0,130,197,0,1,131,0,0.6,1,0,2,1
158
+ 47,1,2,130,253,0,1,179,0,0,2,0,2,1
159
+ 35,1,1,122,192,0,1,174,0,0,2,0,2,1
160
+ 58,1,1,125,220,0,1,144,0,0.4,1,4,3,1
161
+ 56,1,1,130,221,0,0,163,0,0,2,0,3,1
162
+ 56,1,1,120,240,0,1,169,0,0,0,0,2,1
163
+ 55,0,1,132,342,0,1,166,0,1.2,2,0,2,1
164
+ 41,1,1,120,157,0,1,182,0,0,2,0,2,1
165
+ 38,1,2,138,175,0,1,173,0,0,2,4,2,1
166
+ 38,1,2,138,175,0,1,173,0,0,2,4,2,1
167
+ 67,1,0,160,286,0,0,108,1,1.5,1,3,2,0
168
+ 67,1,0,120,229,0,0,129,1,2.6,1,2,3,0
169
+ 62,0,0,140,268,0,0,160,0,3.6,0,2,2,0
170
+ 63,1,0,130,254,0,0,147,0,1.4,1,1,3,0
171
+ 53,1,0,140,203,1,0,155,1,3.1,0,0,3,0
172
+ 56,1,2,130,256,1,0,142,1,0.6,1,1,1,0
173
+ 48,1,1,110,229,0,1,168,0,1,0,0,3,0
174
+ 58,1,1,120,284,0,0,160,0,1.8,1,0,2,0
175
+ 58,1,2,132,224,0,0,173,0,3.2,2,2,3,0
176
+ 60,1,0,130,206,0,0,132,1,2.4,1,2,3,0
177
+ 40,1,0,110,167,0,0,114,1,2,1,0,3,0
178
+ 60,1,0,117,230,1,1,160,1,1.4,2,2,3,0
179
+ 64,1,2,140,335,0,1,158,0,0,2,0,2,0
180
+ 43,1,0,120,177,0,0,120,1,2.5,1,0,3,0
181
+ 57,1,0,150,276,0,0,112,1,0.6,1,1,1,0
182
+ 55,1,0,132,353,0,1,132,1,1.2,1,1,3,0
183
+ 65,0,0,150,225,0,0,114,0,1,1,3,3,0
184
+ 61,0,0,130,330,0,0,169,0,0,2,0,2,0
185
+ 58,1,2,112,230,0,0,165,0,2.5,1,1,3,0
186
+ 50,1,0,150,243,0,0,128,0,2.6,1,0,3,0
187
+ 44,1,0,112,290,0,0,153,0,0,2,1,2,0
188
+ 60,1,0,130,253,0,1,144,1,1.4,2,1,3,0
189
+ 54,1,0,124,266,0,0,109,1,2.2,1,1,3,0
190
+ 50,1,2,140,233,0,1,163,0,0.6,1,1,3,0
191
+ 41,1,0,110,172,0,0,158,0,0,2,0,3,0
192
+ 51,0,0,130,305,0,1,142,1,1.2,1,0,3,0
193
+ 58,1,0,128,216,0,0,131,1,2.2,1,3,3,0
194
+ 54,1,0,120,188,0,1,113,0,1.4,1,1,3,0
195
+ 60,1,0,145,282,0,0,142,1,2.8,1,2,3,0
196
+ 60,1,2,140,185,0,0,155,0,3,1,0,2,0
197
+ 59,1,0,170,326,0,0,140,1,3.4,0,0,3,0
198
+ 46,1,2,150,231,0,1,147,0,3.6,1,0,2,0
199
+ 67,1,0,125,254,1,1,163,0,0.2,1,2,3,0
200
+ 62,1,0,120,267,0,1,99,1,1.8,1,2,3,0
201
+ 65,1,0,110,248,0,0,158,0,0.6,2,2,1,0
202
+ 44,1,0,110,197,0,0,177,0,0,2,1,2,0
203
+ 60,1,0,125,258,0,0,141,1,2.8,1,1,3,0
204
+ 58,1,0,150,270,0,0,111,1,0.8,2,0,3,0
205
+ 68,1,2,180,274,1,0,150,1,1.6,1,0,3,0
206
+ 62,0,0,160,164,0,0,145,0,6.2,0,3,3,0
207
+ 52,1,0,128,255,0,1,161,1,0,2,1,3,0
208
+ 59,1,0,110,239,0,0,142,1,1.2,1,1,3,0
209
+ 60,0,0,150,258,0,0,157,0,2.6,1,2,3,0
210
+ 49,1,2,120,188,0,1,139,0,2,1,3,3,0
211
+ 59,1,0,140,177,0,1,162,1,0,2,1,3,0
212
+ 57,1,2,128,229,0,0,150,0,0.4,1,1,3,0
213
+ 61,1,0,120,260,0,1,140,1,3.6,1,1,3,0
214
+ 39,1,0,118,219,0,1,140,0,1.2,1,0,3,0
215
+ 61,0,0,145,307,0,0,146,1,1,1,0,3,0
216
+ 56,1,0,125,249,1,0,144,1,1.2,1,1,2,0
217
+ 43,0,0,132,341,1,0,136,1,3,1,0,3,0
218
+ 62,0,2,130,263,0,1,97,0,1.2,1,1,3,0
219
+ 63,1,0,130,330,1,0,132,1,1.8,2,3,3,0
220
+ 65,1,0,135,254,0,0,127,0,2.8,1,1,3,0
221
+ 48,1,0,130,256,1,0,150,1,0,2,2,3,0
222
+ 63,0,0,150,407,0,0,154,0,4,1,3,3,0
223
+ 55,1,0,140,217,0,1,111,1,5.6,0,0,3,0
224
+ 65,1,3,138,282,1,0,174,0,1.4,1,1,2,0
225
+ 56,0,0,200,288,1,0,133,1,4,0,2,3,0
226
+ 54,1,0,110,239,0,1,126,1,2.8,1,1,3,0
227
+ 70,1,0,145,174,0,1,125,1,2.6,0,0,3,0
228
+ 62,1,1,120,281,0,0,103,0,1.4,1,1,3,0
229
+ 35,1,0,120,198,0,1,130,1,1.6,1,0,3,0
230
+ 59,1,3,170,288,0,0,159,0,0.2,1,0,3,0
231
+ 64,1,2,125,309,0,1,131,1,1.8,1,0,3,0
232
+ 47,1,2,108,243,0,1,152,0,0,2,0,2,0
233
+ 57,1,0,165,289,1,0,124,0,1,1,3,3,0
234
+ 55,1,0,160,289,0,0,145,1,0.8,1,1,3,0
235
+ 64,1,0,120,246,0,0,96,1,2.2,0,1,2,0
236
+ 70,1,0,130,322,0,0,109,0,2.4,1,3,2,0
237
+ 51,1,0,140,299,0,1,173,1,1.6,2,0,3,0
238
+ 58,1,0,125,300,0,0,171,0,0,2,2,3,0
239
+ 60,1,0,140,293,0,0,170,0,1.2,1,2,3,0
240
+ 77,1,0,125,304,0,0,162,1,0,2,3,2,0
241
+ 35,1,0,126,282,0,0,156,1,0,2,0,3,0
242
+ 70,1,2,160,269,0,1,112,1,2.9,1,1,3,0
243
+ 59,0,0,174,249,0,1,143,1,0,1,0,2,0
244
+ 64,1,0,145,212,0,0,132,0,2,1,2,1,0
245
+ 57,1,0,152,274,0,1,88,1,1.2,1,1,3,0
246
+ 56,1,0,132,184,0,0,105,1,2.1,1,1,1,0
247
+ 48,1,0,124,274,0,0,166,0,0.5,1,0,3,0
248
+ 56,0,0,134,409,0,0,150,1,1.9,1,2,3,0
249
+ 66,1,1,160,246,0,1,120,1,0,1,3,1,0
250
+ 54,1,1,192,283,0,0,195,0,0,2,1,3,0
251
+ 69,1,2,140,254,0,0,146,0,2,1,3,3,0
252
+ 51,1,0,140,298,0,1,122,1,4.2,1,3,3,0
253
+ 43,1,0,132,247,1,0,143,1,0.1,1,4,3,0
254
+ 62,0,0,138,294,1,1,106,0,1.9,1,3,2,0
255
+ 67,1,0,100,299,0,0,125,1,0.9,1,2,2,0
256
+ 59,1,3,160,273,0,0,125,0,0,2,0,2,0
257
+ 45,1,0,142,309,0,0,147,1,0,1,3,3,0
258
+ 58,1,0,128,259,0,0,130,1,3,1,2,3,0
259
+ 50,1,0,144,200,0,0,126,1,0.9,1,0,3,0
260
+ 62,0,0,150,244,0,1,154,1,1.4,1,0,2,0
261
+ 38,1,3,120,231,0,1,182,1,3.8,1,0,3,0
262
+ 66,0,0,178,228,1,1,165,1,1,1,2,3,0
263
+ 52,1,0,112,230,0,1,160,0,0,2,1,2,0
264
+ 53,1,0,123,282,0,1,95,1,2,1,2,3,0
265
+ 63,0,0,108,269,0,1,169,1,1.8,1,2,2,0
266
+ 54,1,0,110,206,0,0,108,1,0,1,1,2,0
267
+ 66,1,0,112,212,0,0,132,1,0.1,2,1,2,0
268
+ 55,0,0,180,327,0,2,117,1,3.4,1,0,2,0
269
+ 49,1,2,118,149,0,0,126,0,0.8,2,3,2,0
270
+ 54,1,0,122,286,0,0,116,1,3.2,1,2,2,0
271
+ 56,1,0,130,283,1,0,103,1,1.6,0,0,3,0
272
+ 46,1,0,120,249,0,0,144,0,0.8,2,0,3,0
273
+ 61,1,3,134,234,0,1,145,0,2.6,1,2,2,0
274
+ 67,1,0,120,237,0,1,71,0,1,1,0,2,0
275
+ 58,1,0,100,234,0,1,156,0,0.1,2,1,3,0
276
+ 47,1,0,110,275,0,0,118,1,1,1,1,2,0
277
+ 52,1,0,125,212,0,1,168,0,1,2,2,3,0
278
+ 58,1,0,146,218,0,1,105,0,2,1,1,3,0
279
+ 57,1,1,124,261,0,1,141,0,0.3,2,0,3,0
280
+ 58,0,1,136,319,1,0,152,0,0,2,2,2,0
281
+ 61,1,0,138,166,0,0,125,1,3.6,1,1,2,0
282
+ 42,1,0,136,315,0,1,125,1,1.8,1,0,1,0
283
+ 52,1,0,128,204,1,1,156,1,1,1,0,0,0
284
+ 59,1,2,126,218,1,1,134,0,2.2,1,1,1,0
285
+ 40,1,0,152,223,0,1,181,0,0,2,0,3,0
286
+ 61,1,0,140,207,0,0,138,1,1.9,2,1,3,0
287
+ 46,1,0,140,311,0,1,120,1,1.8,1,2,3,0
288
+ 59,1,3,134,204,0,1,162,0,0.8,2,2,2,0
289
+ 57,1,1,154,232,0,0,164,0,0,2,1,2,0
290
+ 57,1,0,110,335,0,1,143,1,3,1,1,3,0
291
+ 55,0,0,128,205,0,2,130,1,2,1,1,3,0
292
+ 61,1,0,148,203,0,1,161,0,0,2,1,3,0
293
+ 58,1,0,114,318,0,2,140,0,4.4,0,3,1,0
294
+ 58,0,0,170,225,1,0,146,1,2.8,1,2,1,0
295
+ 67,1,2,152,212,0,0,150,0,0.8,1,0,3,0
296
+ 44,1,0,120,169,0,1,144,1,2.8,0,0,1,0
297
+ 63,1,0,140,187,0,0,144,1,4,2,2,3,0
298
+ 63,0,0,124,197,0,1,136,1,0,1,0,2,0
299
+ 59,1,0,164,176,1,0,90,0,1,1,2,1,0
300
+ 57,0,0,140,241,0,1,123,1,0.2,1,0,3,0
301
+ 45,1,3,110,264,0,1,132,0,1.2,1,0,3,0
302
+ 68,1,0,144,193,1,1,141,0,3.4,1,2,3,0
303
+ 57,1,0,130,131,0,1,115,1,1.2,1,1,3,0
304
+ 57,0,1,130,236,0,0,174,0,0,1,1,2,0
heart_disease_dt_model.pkl ADDED
Binary file (4.92 kB). View file
 
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ numpy
2
+ pandas
3
+ seaborn
4
+ scikit-learn
5
+ setuptools
6
+ concrete-ml
7
+ concrete
server.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pandas as pd
3
+ import seaborn as sns
4
+ import matplotlib.pyplot as plt
5
+ import joblib
6
+
7
+ import os
8
+ import shutil
9
+
10
+ # Define the directory for FHE client/server files
11
+ fhe_directory = '/tmp/fhe_client_server_files/'
12
+
13
+ # Create the directory if it does not exist
14
+ if not os.path.exists(fhe_directory):
15
+ os.makedirs(fhe_directory)
16
+ else:
17
+ # If it exists, delete its contents
18
+ shutil.rmtree(fhe_directory)
19
+ os.makedirs(fhe_directory)
20
+
21
+ data=pd.read_csv('data/heart.xls')
22
+
23
+ data.info() #checking the info
24
+
25
+ data_corr=data.corr()
26
+
27
+ plt.figure(figsize=(20,20))
28
+ sns.heatmap(data=data_corr,annot=True)
29
+ #Heatmap for data
30
+
31
+ feature_value=np.array(data_corr['output'])
32
+ for i in range(len(feature_value)):
33
+ if feature_value[i]<0:
34
+ feature_value[i]=-feature_value[i]
35
+
36
+ print(feature_value)
37
+
38
+ features_corr=pd.DataFrame(feature_value,index=data_corr['output'].index,columns=['correalation'])
39
+
40
+ feature_sorted=features_corr.sort_values(by=['correalation'],ascending=False)
41
+
42
+ feature_selected=feature_sorted.index
43
+
44
+ feature_selected #selected features which are very much correalated
45
+
46
+ clean_data=data[feature_selected]
47
+
48
+ from sklearn.tree import DecisionTreeClassifier #using sklearn decisiontreeclassifier
49
+ from sklearn.model_selection import train_test_split
50
+
51
+ #making input and output dataset
52
+ X=clean_data.iloc[:,1:]
53
+ Y=clean_data['output']
54
+
55
+ x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.25,random_state=0)
56
+
57
+ print(x_train.shape,y_train.shape,x_test.shape,y_test.shape) #data is splited in traing and testing dataset
58
+
59
+ # feature scaling
60
+ from sklearn.preprocessing import StandardScaler
61
+ sc=StandardScaler()
62
+ x_train=sc.fit_transform(x_train)
63
+ x_test=sc.transform(x_test)
64
+
65
+ #training our model
66
+ dt=DecisionTreeClassifier(criterion='entropy',max_depth=6)
67
+ dt.fit(x_train,y_train)
68
+ #dt.compile(x_trqin)
69
+
70
+ #predicting the value on testing data
71
+ y_pred=dt.predict(x_test)
72
+
73
+ #ploting the data
74
+ from sklearn.metrics import confusion_matrix
75
+ conf_mat=confusion_matrix(y_test,y_pred)
76
+ print(conf_mat)
77
+ accuracy=dt.score(x_test,y_test)
78
+ print("\nThe accuracy of decisiontreelassifier on Heart disease prediction dataset is "+str(round(accuracy*100,2))+"%")
79
+
80
+ joblib.dump(dt, 'heart_disease_dt_model.pkl')
81
+
82
+ from concrete.ml.sklearn.tree import DecisionTreeClassifier
83
+
84
+ fhe_compatible = DecisionTreeClassifier.from_sklearn_model(dt, x_train, n_bits = 10)
85
+ fhe_compatible.compile(x_train)
86
+
87
+
88
+
89
+
90
+
91
+
92
+ #### server
93
+ from concrete.ml.deployment import FHEModelDev, FHEModelClient, FHEModelServer
94
+
95
+ # Setup the development environment
96
+ dev = FHEModelDev(path_dir=fhe_directory, model=fhe_compatible)
97
+ dev.save()
98
+
99
+ # Setup the server
100
+ server = FHEModelServer(path_dir=fhe_directory)
101
+ server.load()
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+ ####### client
110
+
111
+ from concrete.ml.deployment import FHEModelDev, FHEModelClient, FHEModelServer
112
+
113
+ # Setup the client
114
+ client = FHEModelClient(path_dir=fhe_directory, key_dir="/tmp/keys_client")
115
+ serialized_evaluation_keys = client.get_serialized_evaluation_keys()
116
+
117
+
118
+ # Load the dataset and select the relevant features
119
+ data = pd.read_csv('data/heart.xls')
120
+
121
+ # Perform the correlation analysis
122
+ data_corr = data.corr()
123
+
124
+ # Select features based on correlation with 'output'
125
+ feature_value = np.array(data_corr['output'])
126
+ for i in range(len(feature_value)):
127
+ if feature_value[i] < 0:
128
+ feature_value[i] = -feature_value[i]
129
+
130
+ features_corr = pd.DataFrame(feature_value, index=data_corr['output'].index, columns=['correlation'])
131
+ feature_sorted = features_corr.sort_values(by=['correlation'], ascending=False)
132
+ feature_selected = feature_sorted.index
133
+
134
+ # Clean the data by selecting the most correlated features
135
+ clean_data = data[feature_selected]
136
+
137
+ # Extract the first row of feature data for prediction (excluding 'output' column)
138
+ sample_data = clean_data.iloc[0, 1:].values.reshape(1, -1) # Reshape to 2D array for model input
139
+
140
+ encrypted_data = client.quantize_encrypt_serialize(sample_data)
141
+
142
+
143
+
144
+ ##### end client
145
+
146
+ encrypted_result = server.run(encrypted_data, serialized_evaluation_keys)
147
+
148
+ result = client.deserialize_decrypt_dequantize(encrypted_result)
149
+ print(result)