imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
X_train=imp.fit_transform(X_train)
sc= StandardScaler(with_mean=False)
sc.fit(X_train)
X_train=sc.transform(X_train)
val_X=sc.transform(val_X)
X_test=sc.transform(X_test)
ann_scale= 1
from keras.layers importEmbedding
model=Sequential()
model.add(Embedding(X_train.shape[1] + 1,
EMBEDDING_DIM,
input_length=MAX_SEQUENCE_LENGTH))#model.add(Dense(int(256 / ann_scale), input_shape=(X_train.shape[1],)))
model.add(Dense(int(256 /ann_scale)))
model.add(Activation('tanh'))
model.add(Dropout(0.3))
model.add(Dense(int(512 /ann_scale)))
model.add(Activation('relu'))
model.add(Dropout(0.3))
model.add(Dense(int(512 /ann_scale)))
model.add(Activation('tanh'))
model.add(Dropout(0.3))
model.add(Dense(int(256 /ann_scale)))
model.add(Activation('linear'))
model.add(Dense(1))
model.add(Activation('sigmoid'))#For a multi-class classification problem
model.summary()
class_weight1= class_weight.compute_class_weight('balanced',
np.unique(y),
y)#-----------------------------------------------------------------------------------------------------------------------------------------------------#AUC for a binary classifier
defauc(y_true, y_pred):
ptas= tf.stack([binary_PTA(y_true,y_pred,k) for k in np.linspace(0, 1, 1000)],axis=0)
pfas= tf.stack([binary_PFA(y_true,y_pred,k) for k in np.linspace(0, 1, 1000)],axis=0)
pfas= tf.concat([tf.ones((1,)) ,pfas],axis=0)
binSizes= -(pfas[1:]-pfas[:-1])
s= ptas*binSizesreturn K.sum(s, axis=0)#PFA, prob false alert for binary classifier
def binary_PFA(y_true, y_pred, threshold=K.variable(value=0.5)):
y_pred= K.cast(y_pred >= threshold, 'float32')#N = total number of negative labels
N = K.sum(1 -y_true)#FP = total number of false alerts, alerts from the negative class labels
FP = K.sum(y_pred - y_pred *y_true)return FP/N#P_TA prob true alerts for binary classifier
def binary_PTA(y_true, y_pred, threshold=K.variable(value=0.5)):
y_pred= K.cast(y_pred >= threshold, 'float32')#P = total number of positive labels
P =K.sum(y_true)#TP = total number of correct alerts, alerts from the positive class labels
TP = K.sum(y_pred *y_true)return TP/P#-----------------------------------------------------------------------------------------------------------------------------------------------------
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',#metrics=['accuracy'],
metrics=[auc])
epochs= 100model.fit(X_train, y, epochs=epochs, batch_size=2000,
validation_data=(val_X, val_y), shuffle=True,
class_weight= class_weight1)