Wyjaśnianie modeli nienadzorowanych

Wyjaśnialne AI w Pythonie

Fouad Trad

Machine Learning Engineer

Klasteryzacja

Grupowanie podobnych punktów danych bez predefiniowanych etykiet

Obraz przedstawiający dane z 2 cechami podzielone na 3 klastry, z centroidem każdego klastra.

Wyjaśnialne AI w Pythonie

Wynik silhouette

  • Mierzy jakość klasteryzacji
  • Zakres od -1 do 1
    • 1 → dobrze odseparowane klastry

Obraz przedstawiający dobrze odseparowane klastry.

Wyjaśnialne AI w Pythonie

Wynik silhouette

  • Mierzy jakość klasteryzacji
  • Zakres od -1 do 1
    • 1 → dobrze odseparowane klastry
    • -1 → punkty przypisane nieprawidłowo

Obraz przedstawiający klastry bez wyraźnego podziału.

Wyjaśnialne AI w Pythonie

Wpływ cech na jakość klastrów

Obraz przedstawiający wynik klasteryzacji zbioru danych z 2 cechami przekazanymi do algorytmu klasteryzacji.

Wyjaśnialne AI w Pythonie

Wpływ cech na jakość klastrów

Obraz przedstawiający wynik klasteryzacji po usunięciu jednej cechy i ponownym trenowaniu modelu.

Wyjaśnialne AI w Pythonie

Wpływ cech na jakość klastrów

Obraz przedstawiający wzór do obliczania wpływu usuniętej cechy jako różnicy między wynikami silhouette z obiema cechami a wynikiem silhouette bez danej cechy.

  • $\text{Impact(}f) > 0$ → pozytywny wkład cechy $f$
  • $\text{Impact(}f) < 0$ → $f$ wprowadza szum
Wyjaśnialne AI w Pythonie

Zbiór danych Student Performance

age health status absences G1 G2 G3
18 3 4 0 11 11
17 3 2 9 11 11
15 3 6 12 13 12
15 5 0 14 14 14
16 5 0 11 13 13

 

X: tablica zawierająca cechy

Wyjaśnialne AI w Pythonie

Obliczanie wpływu cech na jakość klastrów

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score


kmeans = KMeans(n_clusters=2).fit(X)
original_score = silhouette_score(X, kmeans.labels_)
for i in range(X.shape[1]):
X_reduced = np.delete(X, i, axis=1)
kmeans.fit(X_reduced)
new_score = silhouette_score(X_reduced, kmeans.labels_)
impact = original_score - new_score print(f'Feature {column_names[i]}: Impact = {impact}')
Wyjaśnialne AI w Pythonie

Obliczanie wpływu cech na jakość klastrów

Feature age: Impact = 0.05199181662741281
Feature health status: Impact = 0.06046737420227638
Feature absences: Impact = 0.031290940582026694
Feature G1: Impact = -0.025746421940652353
Feature G2: Impact = -0.02578292339364119
Feature G3: Impact = -0.03163419458330158
Wyjaśnialne AI w Pythonie

Skorygowany indeks Randa (ARI)

  • Mierzy zgodność przypisań do klastrów

Obraz przedstawiający dwa podobne przypisania do klastrów dla tego samego zbioru danych.

  • Maksymalne ARI = 1 → idealna zgodność klastrów
Wyjaśnialne AI w Pythonie

Skorygowany indeks Randa (ARI)

  • Mierzy zgodność przypisań do klastrów

Obraz przedstawiający dwa różne przypisania do klastrów dla tego samego zbioru danych.

  • Maksymalne ARI = 1 → idealna zgodność klastrów
  • Niższe ARI → większe różnice między klasteryzacjami
Wyjaśnialne AI w Pythonie

Ważność cech dla przypisań do klastrów

   

  • Usuwanie cech po jednej
  • $\text{Importance}(f) = 1 - \text{ARI (original clusters, modifed clusters)}$
  • Niskie $\text(ARI)$ → wysokie $\text(1 - ARI)$ → ważna cecha
Wyjaśnialne AI w Pythonie

Ważność cech dla przypisań do klastrów

from sklearn.metrics import adjusted_rand_score

kmeans = KMeans(n_clusters=2).fit(X) original_clusters = kmeans.predict(X)
for i in range(X.shape[1]):
X_reduced = np.delete(X, i, axis=1)
reduced_clusters = kmeans.fit_predict(X_reduced)
importance = 1 - adjusted_rand_score(original_clusters, reduced_clusters) print(f'{df.columns[i]}: {importance}')
age: 0.0
health status: 0.9995376368119572
absences: 0.0
G1: 0.0
G2: 0.6204069909514572
G3: 0.6204069909514572
Wyjaśnialne AI w Pythonie

Czas na ćwiczenia!

Wyjaśnialne AI w Pythonie

Preparing Video For Download...