# # Tensorflow Keras NN for cancer data # Warning: overfitting, too many parameters and too many epochs. # import numpy as np from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers # Load dataset cancer = load_breast_cancer() X, y = cancer.data, cancer.target # Train/test split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) # Normalize features (important for neural nets) scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) """ # Keras model model = keras.Sequential([ layers.Dense(64, activation="relu", input_shape=(X_train.shape[1],)), layers.Dense(64, activation="relu"), layers.Dense(1) ]) """ # Another way to define the model Dense = layers.Dense model = keras.Sequential() model.add(Dense(64, activation="relu", input_shape=(X_train.shape[1],))) model.add(Dense(64, activation='relu')) model.add(Dense(100, activation='relu')) model.add(Dense(100, activation='relu')) model.add(Dense(100, activation='relu')) model.add(Dense(100, activation='relu')) model.add(Dense(100, activation='relu')) model.add(Dense(20, activation='relu')) model.add(Dense(1, activation='sigmoid')) # output is a binary number 0 or 1 # Compile model model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # Examine model model.summary() # Train model history = model.fit(X_train, y_train, validation_split=0.2, epochs=50, batch_size=16, verbose=1) # Evaluate loss, accuracy = model.evaluate(X_test, y_test) # , verbose=0) print(f"accuracy = {accuracy:.2f}") # Plotting # -------- # Plot training & validation accuracy import matplotlib.pyplot as plt plt.figure(figsize=(12,5)) plt.subplot(1,2,1) plt.plot(history.history['accuracy']) plt.plot(history.history['val_accuracy']) # needs validation_split in model.fit plt.title('Model accuracy') plt.ylabel('Accuracy') plt.xlabel('Epoch') plt.legend(['Train', 'Validation'], loc='upper left') # Plot training & validation loss values plt.subplot(1,2,2) plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) # needs validation_split in model.fit plt.title('Model loss') plt.ylabel('Loss') plt.xlabel('Epoch') plt.legend(['Train', 'Validation'], loc='upper left') plt.show()