Untitled
unknown
plain_text
2 months ago
2.6 kB
4
Indexable
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target y = np.eye(3)[y] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) class NeuralNetwork: def __init__(self, input_size, hidden_size, output_size, learning_rate=0.01): self.learning_rate = learning_rate self.weights_input_hidden = np.random.rand(input_size, hidden_size) self.weights_hidden_output = np.random.rand(hidden_size, output_size) self.bias_hidden = np.random.rand(hidden_size) self.bias_output = np.random.rand(output_size) def sigmoid(self, x): return 1 / (1 + np.exp(-x)) def sigmoid_derivative(self, x): return x * (1 - x) def forward(self, X): self.hidden_layer_input = np.dot(X, self.weights_input_hidden) + self.bias_hidden self.hidden_layer_output = self.sigmoid(self.hidden_layer_input) self.final_input = np.dot(self.hidden_layer_output, self.weights_hidden_output) + self.bias_output self.final_output = self.sigmoid(self.final_input) return self.final_output def backward(self, X, y, output): error = y - output d_output = error * self.sigmoid_derivative(output) error_hidden_layer = d_output.dot(self.weights_hidden_output.T) d_hidden_layer = error_hidden_layer * self.sigmoid_derivative(self.hidden_layer_output) self.weights_hidden_output += self.hidden_layer_output.T.dot(d_output) * self.learning_rate self.bias_output += np.sum(d_output, axis=0) * self.learning_rate self.bias_hidden += np.sum(d_hidden_layer, axis=0) * self.learning_rate def train(self, X, y, epochs): for epoch in range(epochs): output = self.forward(X) self.backward(X, y, output) def predict(self, X): output = self.forward(X) return np.argmax(output, axis=1) input_size = X_train.shape[1] hidden_size = 5 output_size = y_train.shape[1] learning_rate = 0.01 epochs = 1000 nn = NeuralNetwork(input_size, hidden_size, output_size, learning_rate) nn.train(X_train, y_train, epochs) predictions = nn.predict(X_test) y_test_labels = np.argmax(y_test, axis=1) accuracy = np.mean(predictions == y_test_labels) print(f'Accuracy: {accuracy * 100:.2f}%')
Editor is loading...
Leave a Comment