DBSCAN is a density-based clustering algorithm: it groups points in dense regions (at least min_samples neighbors within a radius eps) and marks the others as noise. It does not need k, finds arbitrary shapes, and detects outliers, but handles variable densities poorly.
Example
DBSCAN(eps=0.5, min_samples=5).fit_predict(X_s)