123456model = keras.Sequential([ keras.layers.Flatten(input_shape=(4,))), keras.layers.Dense(16, activation=tf.nn.relu), keras.layers.Dense(16, activation=tf.nn.relu), keras.layers.Dense(1, activation=tf.nn.sigmoid),])
pitón
El código anterior crea una Red Neural que tiene tres capas. Hay dos capas de 16 nodos cada una y un nodo de salida. El último nodo utiliza la función de activación sigmoide que exprimirá todos los valores entre 0 y 1 en la forma de una curva sigmoide. Las otras dos capas usan ReLU (Unidades lineales rectificadas) como función de activación. ReLU es una función medio rectificada; es decir, para todas las entradas inferiores a 0 (por ejemplo, -120,-6,7, -0,0344, 0) el valor es 0 mientras que para cualquier cosa positiva (por ejemplo, 10,15, 34) el valor se mantiene. Se utiliza una unidad de salida, ya que para cada valor de registro en X, se predice una probabilidad. Si es alta (>0,9) entonces la molécula está definitivamente activa. Si es menor (
123456model.compile(optimizer=$0027adam$0027, loss=$0027binary_crossentropy$0027, metrics=[$0027accuracy$0027])model.fit(X_train, y_train, epochs=50, batch_size=1)test_loss, test_acc = model.evaluate(X_test, y_test)
pitón
El código anterior compila la red. Utiliza Adam, un optimizador basado en el momento. La función de pérdida utilizada es binary_crossentropy. Para los problemas de clasificación binaria que dan salida en forma de probabilidad, la binaria_crosentropía suele ser el optimizador elegido. También se puede utilizar mean_squared_error en lugar de binaria_crosentropía. La métrica utilizada es la precisión. El modelo se entrena para 50 épocas con un tamaño de lote de 1. Finalmente, el modelo entrenado se evaluó para el conjunto de pruebas para comprobar la exactitud.
12345678910111213141516171819202122232425262728importar pandas como pdimport tensorflow como tffrom tensorflow import kerasfrom sklearn.model_selection import train_test_splitimport numpy as npdf = pd.read_csv($0027molecular_activity. csv$0027)properties =list(df.columns.values)properties.remove($0027Activity$0027)X = df[properties]y = df[$0027Activity$0027]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)model = keras. Secuencial([ keras.layers.Flatten(input_shape=(4,)), keras.layers.Dense(16, activation=tf.nn.relu), keras.layers.Dense(16, activation=tf.nn.relu), keras.layers.Dense(1, activation=tf.nn.sigmoid),])model. compilar(optimizador=$0027adam$0027, loss=$0027binary_crossentropy$0027, metrics=[$0027accuracy$0027])model.fit(X_train, y_train, epochs=50, batch_size=1)test_loss, test_acc = model.evaluate(X_test, y_test)print($0027Test accuracy:$0027, test_acc)
pitón
Salida
12345678910111213141516171819202122232425262728Epoch 1/50378/378[==============================]- 1s 2ms/muestra - pérdida:0.6704- acc:0. 6958Epoch 2/50378/378[================================]- 0s 1ms/muestra - pérdida:0.5604- acc:0.7672Epoch 3/50378/378[======================================================]- 0s 1ms/muestra - pérdida:0. 5554- acc:0.7725Epoch 4/50378/378[==================================]- 0s 1ms/muestra - pérdida:0.5536- acc:0. 7751Epoch 5/50$0027$0027$0027Época 44/50378/378[==================================]- 0s 1ms/muestra - pérdida:0.4138- acc:0.8360Epoch 45/50378/378[================================================]- 0s 1ms/muestra - pérdida:0. 4214- acc:0.8280Epoch 46/50378/378[======================================]- 0s 1ms/muestra - pérdida:0.4268- acc:0. 8333Epoch 47/50378/378[================================]- 0s 1ms/muestra - pérdida:0.4130- acc:0.8280Epoch 48/50378/378[========================================]- 0s 1ms/muestra - pérdida:0.4146- acc:0. 8307Epoch 49/50378/378[================================]- 0s 1ms/muestra - pérdida:0.4161- acc:0.8333Epoch 50/50378/378[======================================================]- 1s 1ms/muestra - pérdida:0. 4111- acc:0.8254162/162[==================================]- 0s 421us/muestra - pérdida:0.3955- acc:0.8333Precisión de la prueba:0.8333333
pitón
La precisión de la prueba predicha por el modelo es de más del 83%. Se puede aumentar aún más tratando de optimizar las épocas, el número de capas o el número de nodos por capa.
Ahora, usemos el modelo entrenado para predecir los valores de probabilidad del nuevo conjunto de datos. El siguiente código pasa dos matrices de características al modelo entrenado y da la probabilidad.
12a= np.array([[4.02,70.86,62.05,7.0],[2.99,60.30,57.46,6.06]])print(model.predict(a))
pitón
Salida
12[[0.8603756][0.05907778]]
pitón