This K-means lesson is for a beginner. Read the short notes, run each example, then change one name or number and run it again.
K-means places k centres and assigns each point to the nearest centre. The centres then move to the average of their points.
The example does one assignment step with two starting centres.
Example 1: Start here
You choose k. A bad k splits one natural group or merges two.
points = [1, 2, 9, 10] # a list; the values stay in this order
centers = [1, 10] # a list; the values stay in this order
groups = {1: [], 10: []} # a dictionary; each key has one value
for point in points: # repeat the indented lines once per value
center = min(centers, key=lambda item: abs(point - item)) # the smallest value
groups[center].append(point) # add one item at the end of the list
print(groups)
Example 2: Add two rows
K-means applies one operation to every number. zip pairs the rows, and the list keeps each sum.
left = [1, 2, 33] # a list; the values stay in this order
right = [10, 20, 30] # a list; the values stay in this order
print([a + b for a, b in zip(left, right)]) # pair the lists, then combine each pair
Example 3: Average a column
The average is the total divided by how many numbers you have. That is the same summary a statistics page starts with.
scores = [70, 33, 90] # a list; the values stay in this order
print(sum(scores) / len(scores)) # len counts the items
Example 4: Keep values above a line
A cutoff drops the low values. Change 80 and run the example again to see who remains.
scores = [70, 33, 90] # a list; the values stay in this order
print([score for score in scores if score >= 80]) # keep the items that pass the test
