# -*- coding: utf-8 -*-
"""
Created on Tue May  9 19:38:08 2023

@author: user
"""

# Load libraries
import numpy as np
from keras.datasets import imdb
from tensorflow.keras.preprocessing.text import Tokenizer
from keras import models
from keras import layers
import tensorflow as tf
import random
random.seed(0)
np.random.seed(0)
tf.random.set_seed(0)
# Set the number of features we want
number_of_features = 1000
# Load data and target vector from movie review data
(data_train, target_train), (data_test, target_test) = imdb.load_data(
num_words=number_of_features)
# Convert movie review data to one-hot encoded feature matrix
tokenizer = Tokenizer(num_words=number_of_features)
features_train = tokenizer.sequences_to_matrix(data_train, mode="binary")
features_test = tokenizer.sequences_to_matrix(data_test, mode="binary")
# Start neural network
network = models.Sequential()
# Add fully connected layer with a ReLU activation function
network.add(layers.Dense(units=16, activation="relu", input_shape=(
number_of_features,)))
# Add fully connected layer with a ReLU activation function
network.add(layers.Dense(units=16, activation="relu"))
# Add fully connected layer with a sigmoid activation function
network.add(layers.Dense(units=1, activation="sigmoid"))
# Compile neural network
network.compile(loss="binary_crossentropy", # Cross-entropy
optimizer="rmsprop", # Root Mean Square Propagation
metrics=["accuracy"]) # Accuracy performance metric
# Train neural network
history = network.fit(features_train, # Features
target_train, # Target vector
epochs=3, # Number of epochs
verbose=1, # Print description after each epoch
batch_size=100, # Number of observations per batch
validation_data=(features_test, target_test)) # Test data



from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_report, confusion_matrix
import numpy as np


# Predict probabilities for test data
predicted_probabilities = network.predict(features_test)

# Convert probabilities to binary labels (threshold = 0.5)
predicted_labels = (predicted_probabilities > 0.5).astype(int).flatten()


# Calculate accuracy
accuracy = accuracy_score(target_test, predicted_labels)

# Calculate precision
precision = precision_score(target_test, predicted_labels)

# Calculate recall
recall = recall_score(target_test, predicted_labels)

# Calculate F1-score
f1 = f1_score(target_test, predicted_labels)

# Print results
print(f"Accuracy: {accuracy}")
print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1-Score: {f1}")

# Print detailed classification report
print("\nClassification Report:")
print(classification_report(target_test, predicted_labels))

# Confusion Matrix
conf_matrix = confusion_matrix(target_test, predicted_labels)
print("\nConfusion Matrix:")
print(conf_matrix)



import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt="d", cmap="Blues", xticklabels=['Negative', 'Positive'], yticklabels=['Negative', 'Positive'])
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.title("Confusion Matrix")
plt.show()
