Unsupervised Learning with Simple Python
Pure Python Code: Unsupervised Learning (Simple K-Means)
import random
# Step 1: Create fake 2D data points
points = [(random.randint(0, 20), random.randint(0, 20)) for _ in range(10)]
# Step 2: Pick 2 random points as initial cluster centers
centroids = random.sample(points, 2)
def distance(p1, p2):
# Euclidean distance
return ((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2) ** 0.5
def assign_clusters(points, centroids):
clusters = {i: [] for i in range(len(centroids))}
for point in points:
distances = [distance(point, c) for c in centroids]
closest = distances.index(min(distances))
clusters[closest].append(point)
return clusters
def update_centroids(clusters):
new_centroids = []
for points in clusters.values():
x_coords = [p[0] for p in points]
y_coords = [p[1] for p in points]
avg_x = sum(x_coords) / len(points)
avg_y = sum(y_coords) / len(points)
new_centroids.append((avg_x, avg_y))
return new_centroids
# Step 3: Run K-Means algorithm manually
for i in range(5): # Repeat 5 times
clusters = assign_clusters(points, centroids)
centroids = update_centroids(clusters)
# Step 4: Print the final groups
for i, group in clusters.items():
print(f"\nGroup {i+1}:")
for point in group:
print(point)
What’s Happening Here:
1. Random points are created.
2. We choose 2 random centers (you can change to 3 or more).
3. The algorithm:
- Assigns each point to the closest center
- Updates the center to be the “average” of points near it
- Repeats this 5 times to “learn” better groupings
Output Example:
Group 1:
(3, 2)
(2, 1)
(4, 3)Group 2:
(15, 18)
(14, 17)
(16, 19)
Even though it’s very basic, this shows how unsupervised learning works without any help — the computer figures out groups on its own.
We’ll draw a simple grid, place the points on it, and show their cluster group using different symbols (like X, O, *, etc.).
Unsupervised Learning with ASCII Visualization
import random
# Grid size (like a board of 20x20)
GRID_SIZE = 20
# Step 1: Create random 2D points
points = [(random.randint(0, GRID_SIZE-1), random.randint(0, GRID_SIZE-1)) for _ in range(10)]
# Step 2: Choose 2 random points as cluster centers
centroids = random.sample(points, 2)
def distance(p1, p2):
return ((p1[0]-p2[0])**2 + (p1[1]-p2[1])**2) ** 0.5
def assign_clusters(points, centroids):
clusters = {i: [] for i in range(len(centroids))}
for point in points:
dists = [distance(point, c) for c in centroids]
closest = dists.index(min(dists))
clusters[closest].append(point)
return clusters
def update_centroids(clusters):
new_centroids = []
for pts in clusters.values():
avg_x = sum(p[0] for p in pts) / len(pts)
avg_y = sum(p[1] for p in pts) / len(pts)
new_centroids.append((avg_x, avg_y))
return new_centroids
# Run clustering steps
for _ in range(5):
clusters = assign_clusters(points, centroids)
centroids = update_centroids(clusters)
# Cluster symbols for visualization
symbols = ['X', 'O', '*', '#']
# Draw the grid with clusters
print("\n Clustering Grid View:\n")
for y in range(GRID_SIZE):
row = ""
for x in range(GRID_SIZE):
point = (x, y)
printed = False
for idx, group in clusters.items():
if point in group:
row += symbols[idx] # Use symbol for the cluster
printed = True
break
if not printed:
row += '.' # Empty space
print(row)
# Optional: print group members
print("\n Cluster Groups:")
for i, group in clusters.items():
print(f"Group {i+1} ({symbols[i]}): {group}")
What we’ll See:
A 20×20 grid, with:
- Points marked as X, O, etc. (based on which group they belong to)
- Empty cells as .
A list showing which points are in which group
Sample Output (snipped):
………………..
………………..
……….X………
………………..
…..O…………..
…..O…………..
………………..
………………..
………………..
……X………….
………………..
………………..
…….X…………
………………..
………………..
………………..
………………..
………………..
………………..
………………..Cluster Groups:
Group 1 (X): [(10, 2), (6, 9), (7, 12)]
Group 2 (O): [(5, 4), (5, 5)]
What It Teaches:
- The computer groups points by closeness, without knowing the groups in advance.
- The ASCII grid gives a visual feeling of clustering without using graphics.
- Kids (or beginners) can see learning in action — like coloring similar things together on paper.
Unsupervised Learning – Brainstorming Session
