Encoding example with simple python
Story Analogy: “The Weighted Voting Machine”
Imagine we have a robot — let’s call him Neo.
Neo wants to learn how to judge the sentiment of a word:
- “great” (should be positive),
- “okay” (should be neutral),
- “bad” (should be negative).
But Neo doesn’t understand language. So we will create three light switches, each corresponding to a sentiment.
Each word turns on certain switches using weights. If a switch gets more power (numerical weight), it turns on brighter.
Neo picks the sentiment of the brightest glowing switch — no need for complicated probability math.
This is what we simulate using encoding + basic scoring.
Python Code (Without Softmax, No Libraries)
# Step 1: Encode input words def encode_input(word): if word == "great": return [1, 0, 0] elif word == "okay": return [0, 1, 0] elif word == "bad": return [0, 0, 1] # Step 2: Encode output sentiments def encode_output(sentiment): if sentiment == "positive": return [1, 0, 0] elif sentiment == "neutral": return [0, 1, 0] elif sentiment == "negative": return [0, 0, 1] # Step 3: Training data X = [encode_input("great"), encode_input("okay"), encode_input("bad")] Y = [encode_output("positive"), encode_output("neutral"), encode_output("negative")] # Step 4: Initialize weights manually (3 inputs x 3 outputs) weights = [ [0.2, 0.1, -0.3], # input for "great" [0.0, 0.5, -0.1], # input for "okay" [-0.4, -0.2, 0.6] # input for "bad" ] learning_rate = 0.1 # Step 5: Predict output (no softmax, just raw scores) def predict(input_vector): scores = [0, 0, 0] for i in range(3): # output class for j in range(3): # input features scores[i] += input_vector[j] * weights[j][i] return scores # Step 6: Train with simple score difference def train(X, Y, epochs=300): global weights for epoch in range(epochs): total_error = 0 for i in range(len(X)): input_vec = X[i] target = Y[i] predicted_scores = predict(input_vec) # Convert raw scores to 1 (max score), others 0 max_index = predicted_scores.index(max(predicted_scores)) predicted_output = [1 if j == max_index else 0 for j in range(3)] # Update weights with simple difference rule for j in range(3): # output class error = target[j] - predicted_output[j] total_error += abs(error) for k in range(3): # input feature weights[k][j] += learning_rate * error * input_vec[k] if epoch % 50 == 0: print(f"Epoch {epoch} - Total Error: {total_error}") # Step 7: Train the model train(X, Y) # Step 8: Test the model test_words = ["great", "okay", "bad"] sentiments = ["positive", "neutral", "negative"] for word in test_words: encoded = encode_input(word) result_scores = predict(encoded) predicted_label = sentiments[result_scores.index(max(result_scores))] print(f"Input: {word} → Prediction: {predicted_label}")
Next – One-Hot in Neural Network