Unsupervised Learning

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Unsupervised learning

  • Unsupervised learning vindt patronen in data
  • Bijv. klanten clusteren op aankopen
  • Data comprimeren via aankoop­patronen (dimensiereductie)
Unsupervised Learning in Python

Supervised vs. unsupervised learning

  • Supervised learning vindt patronen voor een voorspeltaak
  • Bijv. tumoren classificeren als goedaardig of kwaadaardig (labels)
  • Unsupervised learning vindt patronen in data
  • ... maar zonder specifieke voorspeltaak
Unsupervised Learning in Python

Iris-dataset

  • Metingen van veel irissen
  • Drie soorten iris:
    • setosa
    • versicolor
    • virginica
  • Kroonbladlengte/-breedte, kelklengte/-breedte (de features van de dataset)

Iris

1 https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html
Unsupervised Learning in Python

Arrays, features & samples

  • 2D NumPy-array
  • Kolommen zijn metingen (de features)
  • Rijen zijn irisplanten (de samples)
Unsupervised Learning in Python

Iris-data is 4-dimensionaal

  • Iris-samples zijn punten in 4D-ruimte
  • Dimensie = aantal features
  • Dimensie te hoog om te visualiseren!
  • ... maar unsupervised learning geeft inzicht
Unsupervised Learning in Python

k-means-clustering

  • Vindt clusters van samples
  • Aantal clusters moet je opgeven
  • Beschikbaar in sklearn ("scikit-learn")
Unsupervised Learning in Python
print(samples)
[[ 5.   3.3  1.4  0.2]
 [ 5.   3.5  1.3  0.3]
 ...
 [ 7.2  3.2  6.   1.8]]
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
KMeans(n_clusters=3)
labels = model.predict(samples)

print(labels)
[0 0 1 1 0 1 2 1 0 1 ...]
Unsupervised Learning in Python

Clusterlabels voor nieuwe samples

  • Nieuwe samples kun je toewijzen aan bestaande clusters
  • k-means onthoudt het gemiddelde per cluster (de "centroids")
  • Vindt de dichtstbijzijnde centroid voor elk nieuw sample
Unsupervised Learning in Python

Clusterlabels voor nieuwe samples

print(new_samples)
[[ 5.7  4.4  1.5  0.4]
 [ 6.5  3.   5.5  1.8]
 [ 5.8  2.7  5.1  1.9]]
new_labels = model.predict(new_samples)

print(new_labels)
[0 2 1]
Unsupervised Learning in Python

Spreidingsdiagrammen

  • Scatterplot van kelklengte vs. kroonbladlengte
  • Elke punt is een iris-sample
  • Kleur punten op clusterlabels
  • PyPlot (matplotlib.pyplot)

Spreidingsdiagram

Unsupervised Learning in Python

Spreidingsdiagrammen

import matplotlib.pyplot as plt

xs = samples[:,0] ys = samples[:,2]
plt.scatter(xs, ys, c=labels)
plt.show()
Unsupervised Learning in Python

Laten we oefenen!

Unsupervised Learning in Python

Preparing Video For Download...