Commit
·
e92dcbe
1
Parent(s):
7743507
Upload model_predict_df.py
Browse files- model_predict_df.py +95 -0
model_predict_df.py
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import numpy as np
|
3 |
+
import pandas as pd
|
4 |
+
from copy import copy
|
5 |
+
import joblib
|
6 |
+
import tensorflow as tf
|
7 |
+
from mastml.models import EnsembleModel
|
8 |
+
import keras
|
9 |
+
from keras.models import Sequential
|
10 |
+
from keras.layers import Dense, Dropout, BatchNormalization
|
11 |
+
from keras.wrappers.scikit_learn import KerasRegressor
|
12 |
+
import matplotlib.pyplot as plt
|
13 |
+
from scipy.spatial.distance import cdist
|
14 |
+
|
15 |
+
def rebuild_model(model_folder):
|
16 |
+
PATH = os.getcwd()
|
17 |
+
|
18 |
+
# We need to define the function that builds the network architecture
|
19 |
+
def keras_model():
|
20 |
+
model = Sequential()
|
21 |
+
model.add(Dense(1024, input_dim=9, kernel_initializer='normal', activation='relu'))
|
22 |
+
model.add(Dropout(0.3))
|
23 |
+
model.add(Dense(1024, kernel_initializer='normal', activation='relu'))
|
24 |
+
model.add(Dropout(0.3))
|
25 |
+
model.add(Dense(1, kernel_initializer='normal'))
|
26 |
+
model.compile(loss='mean_squared_error', optimizer='adam')
|
27 |
+
|
28 |
+
return model
|
29 |
+
|
30 |
+
model_keras = KerasRegressor(build_fn=keras_model, epochs=250, batch_size=100, verbose=0)
|
31 |
+
model_bagged_keras_rebuild = EnsembleModel(model=model_keras, n_estimators=10)
|
32 |
+
|
33 |
+
num_models = 10
|
34 |
+
models = list()
|
35 |
+
for i in range(num_models):
|
36 |
+
models.append(tf.keras.models.load_model(os.path.join(PATH, 'RPV_model'+'/'+model_folder+'/keras_model_' + str(i))))
|
37 |
+
|
38 |
+
model_bagged_keras_rebuild.model.estimators_ = models
|
39 |
+
model_bagged_keras_rebuild.model.estimators_features_ = [np.arange(0, 9) for i in models]
|
40 |
+
|
41 |
+
return model_bagged_keras_rebuild
|
42 |
+
|
43 |
+
def get_preds_ebars(model, df_featurized, preprocessor, return_ebars=True):
|
44 |
+
preds_each = list()
|
45 |
+
ebars_each = list()
|
46 |
+
|
47 |
+
df_featurized_scaled = preprocessor.transform(pd.DataFrame(df_featurized))
|
48 |
+
|
49 |
+
if return_ebars == True:
|
50 |
+
for i, x in df_featurized_scaled.iterrows():
|
51 |
+
preds_per_data = list()
|
52 |
+
for m in model.model.estimators_:
|
53 |
+
preds_per_data.append(m.predict(pd.DataFrame(x).T, verbose=0)) #pd.DataFrame(x).T
|
54 |
+
preds_each.append(np.mean(preds_per_data))
|
55 |
+
ebars_each.append(np.std(preds_per_data))
|
56 |
+
|
57 |
+
else:
|
58 |
+
preds_each = model.predict(df_featurized_scaled)
|
59 |
+
ebars_each = [np.nan for i in range(preds_each.shape[0])]
|
60 |
+
|
61 |
+
if return_ebars == True:
|
62 |
+
a = -0.041
|
63 |
+
b = 2.041
|
64 |
+
c = 3.124
|
65 |
+
ebars_each_recal = a*np.array(ebars_each)**2 + b*np.array(ebars_each) + c
|
66 |
+
else:
|
67 |
+
ebars_each_recal = ebars_each
|
68 |
+
|
69 |
+
|
70 |
+
return np.array(preds_each).ravel(), np.array(ebars_each_recal).ravel()
|
71 |
+
|
72 |
+
def make_predictions_DNN(df_featurized, model_folder):
|
73 |
+
PATH = os.getcwd()
|
74 |
+
|
75 |
+
# Rebuild the saved model
|
76 |
+
model = rebuild_model(model_folder)
|
77 |
+
|
78 |
+
# Normalize the input features
|
79 |
+
preprocessor = joblib.load(os.path.join(PATH, os.path.join('RPV_model', model_folder+'/StandardScaler.pkl')))
|
80 |
+
|
81 |
+
# Get predictions and error bars from model
|
82 |
+
preds, ebars = get_preds_ebars(model, df_featurized, preprocessor, return_ebars=True)
|
83 |
+
|
84 |
+
pred_dict = {'preds':preds,
|
85 |
+
'ebars':ebars}
|
86 |
+
|
87 |
+
return pd.DataFrame(pred_dict)
|
88 |
+
|
89 |
+
def test(df):
|
90 |
+
#pred_dict = {'preds': ['This is a test'], 'ebars': ['This is a test']}
|
91 |
+
pred_arr = np.array([['here is some data'], ['here are some ebars']])
|
92 |
+
model = keras.models.load_model('keras_model_0')
|
93 |
+
return pred_arr
|
94 |
+
#return pd.DataFrame(pred_dict)
|
95 |
+
#return np.sqrt(x)
|