Cum să aplici clustering pe date
In this tutorial, you'll learn how to apply clustering algorithms like K-Means and DBSCAN to discover natural groups in your data, enabling customer segmentation, anomaly detection, and pattern discovery.
Problema
Nu ai etichete pentru datele tale și vrei să descoperi grupuri naturale — segmente de clienți, tipuri de documente, sau anomalii. Clustering-ul (învățare nesupravegheată) găsește aceste structuri fără să aibă nevoie de exemple etichetate.
Soluția Greșită
import pandas as pd
from sklearn.cluster import KMeans
df = pd.read_csv("date.csv")
X = df[["venit", "cheltuieli"]]
# K-Means fara scalare si fara alegerea nr. optim de clustere
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
df["cluster"] = kmeans.labels_
Problema: K-Means e sensibil la scală — dacă "venit" e în zeci de mii și "cheltuieli" în sute, distanțele sunt dominate de "venit". Alegerea greșită a lui k duce la grupuri artificiale.
Soluția Corectă
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import pandas as pd
df = pd.read_csv("date.csv")
X = df[["venit", "cheltuieli"]]
scaler = StandardScaler()
X_scalat = scaler.fit_transform(X)
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
kmeans.fit(X_scalat)
df["cluster"] = kmeans.labels_
print(df.groupby("cluster").size())
Output:
cluster
0 125
1 89
2 210
3 76
Implementare Pas cu Pas
1. Găsește numărul optim de clustere cu metoda elbow
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
inertii = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
kmeans.fit(X_scalat)
inertii.append(kmeans.inertia_)
plt.plot(range(1, 11), inertii, marker="o")
plt.xlabel("Numar clustere")
plt.ylabel("Inertie")
plt.show()
2. Aplică DBSCAN pentru date cu forme neregulate
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.5, min_samples=5)
clustere = dbscan.fit_predict(X_scalat)
# -1 = zgomot / outlier
print(f"Numar clustere (fara zgomot): {len(set(clustere)) - (1 if -1 in clustere else 0)}")
print(f"Puncte zgomot: {(clustere == -1).sum()}")
3. Vizualizează clusterele
df["cluster_kmeans"] = kmeans.labels_
df["cluster_dbscan"] = clustere
print(df.groupby("cluster_kmeans")[["venit", "cheltuieli"]].mean())
Sfaturi pentru Prevenire
- Scalează întotdeauna datele înainte de clustering
- Folosește metoda elbow sau silhouette score pentru a alege
k - DBSCAN e bun pentru detectarea outlier-ilor și forme neregulate
- K-Means presupune clustere sferice de dimensiuni similare
- Rulează K-Means de mai multe ori cu
n_init>=10
Greșeli Comune
- Nu scalezi datele — feature-urile cu valori mari domină distanțele
- Alegi
karbitrar — folosește elbow method sau silhouette - Folosești K-Means pe date cu forme complexe — alege DBSCAN sau clustering ierarhic
- Ignori outlier-ii — K-Means e sensibil la valori extreme
- Nu înțelegi semnificația clusterelor — clustering-ul e exploratoriu, necesită analiză
Întrebări Frecvente
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. DodaTech tools integrate seamlessly with sklearn for enhanced productivity and security.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro