Create Paste
Top Pastes
Recent Pastes
Settings
Account
Untitled Paste
Anonymous
Views
143
Visibility
Public
Expires
Never
Created
April 2024
View Raw
Download
0
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder, StandardScaler # Sigmoid activation function def sigmoid(x): return 1 / (1 + np.exp(-x)) # Derivative of sigmoid function def sigmoid_derivative(x): return x * (1 - x) # Load the dataset data = pd.read_csv("Churn_Modelling.csv") # Drop irrelevant columns data = data.drop(columns=['RowNumber', 'CustomerId', 'Surname']) # Encode categorical variables label_encoder = LabelEncoder() data['Geography'] = label_encoder.fit_transform(data['Geography']) data['Gender'] = label_encoder.fit_transform(data['Gender']) # Split the dataset into features and target variable X = data.drop(columns=['Exited']) y = data['Exited'] # Normalize features scaler = StandardScaler() X = scaler.fit_transform(X) # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Initialize weights randomly with mean 0 np.random.seed(1) input_neurons = X_train.shape[1] hidden_neurons = 5 output_neurons = 1 # Weights connecting input layer and hidden layer weights_input_hidden = 2 * np.random.random((input_neurons, hidden_neurons)) - 1 # Weights connecting hidden layer and output layer weights_hidden_output = 2 * np.random.random((hidden_neurons, output_neurons)) - 1 # Training the neural network epochs = 10000 learning_rate = 0.1 for epoch in range(epochs): # Forward propagation input_layer = X_train hidden_layer_input = np.dot(input_layer, weights_input_hidden) hidden_layer_output = sigmoid(hidden_layer_input) output_layer_input = np.dot(hidden_layer_output, weights_hidden_output) output_layer_output = sigmoid(output_layer_input) # Backpropagation error = y_train.values.reshape(-1, 1) - output_layer_output d_output = error * sigmoid_derivative(output_layer_output) error_hidden_layer = d_output.dot(weights_hidden_output.T) d_hidden_layer = error_hidden_layer * sigmoid_derivative(hidden_layer_output) # Update weights weights_hidden_output += hidden_layer_output.T.dot(d_output) * learning_rate weights_input_hidden += input_layer.T.dot(d_hidden_layer) * learning_rate # Predicting the output for testing set input_layer = X_test hidden_layer_input = np.dot(input_layer, weights_input_hidden) hidden_layer_output = sigmoid(hidden_layer_input) output_layer_input = np.dot(hidden_layer_output, weights_hidden_output) output_layer_output = sigmoid(output_layer_input) # Convert probabilities to binary predictions predictions = (output_layer_output > 0.5).astype(int) # Calculate accuracy accuracy = (predictions == y_test.values.reshape(-1, 1)).mean() print("Accuracy:", accuracy)