willengler-uc commited on
Commit
e92dcbe
1 Parent(s): 7743507

Upload model_predict_df.py

Browse files
Files changed (1) hide show
  1. 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)