L'input su sklearn.clustering.DBSCAN deve essere pre-processato?Come scalare l'input DBSCAN in scikit-learn
Nell'esempio http://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#example-cluster-plot-dbscan-py le distanze tra i campioni di ingresso X sono calcolati e normalizzati:
D = distance.squareform(distance.pdist(X))
S = 1 - (D/np.max(D))
db = DBSCAN(eps=0.95, min_samples=10).fit(S)
In un altro esempio v0.14 (http://jaquesgrobler.github.io/online-sklearn-build/auto_examples/cluster/plot_dbscan.html) alcuni scalatura viene eseguita:
X = StandardScaler().fit_transform(X)
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
I basare il mio codice sul secondo esempio e fare in modo che il clustering delle impression funzioni meglio con questo ridimensionamento. Tuttavia, questo ridimensionamento "standardizza le funzionalità rimuovendo la media e il ridimensionamento alla varianza dell'unità". Cerco di trovare i cluster 2d. Se ho i miei cluster distribuiti in un'area quadrata - diciamo 100x100, non vedo alcun problema nel ridimensionamento. Tuttavia, se sono distribuiti in un'area rettangolare, ad es. 800x200 il ridimensionamento 'schiaccia' i miei campioni e modifica le distanze relative tra loro in una dimensione. Ciò deteriora il clustering, non è vero? O sto capendo sth. sbagliato? Devo applicare un po 'di pre-elaborazione, o posso semplicemente inserire i miei dati "grezzi"?
Grazie mille per la tua risposta veloce.Mi piace identificare le fonti di luce lampeggianti che potrebbero spostarsi casualmente, il che porta a una sbavatura gaussiana. Inoltre ho il rumore sovrapposto. Al momento sto ignorando le intensità dei lampeggi e mi limito ad alimentare le posizioni 2d degli eventi lampeggianti. Quindi penso che la distanza euclidea sia ok? Dalla tua risposta capisco nel mio caso che non devo pre-elaborare i dati (che sono posizioni in nm). Ma per quanto riguarda l'implementazione sklearn? Ha effettivamente bisogno di somiglianze come input o posso semplicemente dargli le posizioni e applica la misura di distanza Euclidea stessa? – Alex
Se i pixel sono equamente distribuiti su xey, allora non normalizzare e utilizzare Euclide. Per quanto riguarda sklearn, dovrai scavare nella documentazione e nel codice sorgente. Credo che se si alimentano dati grezzi, calcolerà una matrice di distanza euclidea da sola. (Ma NON usare indici per l'accelerazione. Prova ELKI, dovrebbe essere molto più veloce con gli indici). –
Ok, grazie. Darei un'occhiata all'ELKI e scaverò nei documenti sklearn. – Alex