johnson_lindenstrauss_min_dim#

sklearn.random_projection.johnson_lindenstrauss_min_dim(n_samples, *, eps=0.1)[Quellcode]#

Finde eine „sichere“ Anzahl von Komponenten für die zufällige Projektion.

Die durch eine zufällige Projektion p verursachte Verzerrung ändert den Abstand zwischen zwei Punkten in einem Euklidischen Raum mit hoher Wahrscheinlichkeit nur um einen Faktor (1 +- eps). Die Projektion p ist eine eps-Einbettung, wie definiert durch

(1 - eps) ||u - v||^2 < ||p(u) - p(v)||^2 < (1 + eps) ||u - v||^2

wobei u und v beliebige Zeilen aus einem Datensatz der Form (n_samples, n_features) sind, eps im Bereich ]0, 1[ liegt und p eine Projektion durch eine zufällige Gaußsche N(0, 1)-Matrix der Form (n_components, n_features) (oder eine sparse Achlioptas-Matrix) ist.

Die minimale Anzahl von Komponenten, die die eps-Einbettung garantiert, ist gegeben durch

n_components >= 4 log(n_samples) / (eps^2 / 2 - eps^3 / 3)

Beachte, dass die Anzahl der Dimensionen unabhängig von der ursprünglichen Anzahl der Merkmale ist, sondern von der Größe des Datensatzes abhängt: Je größer der Datensatz, desto höher ist die minimale Dimensionalität einer eps-Einbettung.

Mehr dazu im Benutzerhandbuch.

Parameter:
n_samplesint oder array-ähnlich von int

Anzahl der Samples, die eine ganze Zahl größer als 0 sein muss. Wenn ein Array gegeben ist, wird eine sichere Anzahl von Komponenten Array-weise berechnet.

epsfloat oder array-ähnlich der Form (n_components,), dtype=float, default=0.1

Maximale Verzerrungsrate im Bereich (0, 1), wie durch das Johnson-Lindenstrauss-Lemma definiert. Wenn ein Array gegeben ist, wird eine sichere Anzahl von Komponenten Array-weise berechnet.

Gibt zurück:
n_componentsint oder ndarray von int

Die minimale Anzahl von Komponenten, um mit guter Wahrscheinlichkeit eine eps-Einbettung mit n_samples zu garantieren.

Referenzen

Beispiele

>>> from sklearn.random_projection import johnson_lindenstrauss_min_dim
>>> johnson_lindenstrauss_min_dim(1e6, eps=0.5)
np.int64(663)
>>> johnson_lindenstrauss_min_dim(1e6, eps=[0.5, 0.1, 0.01])
array([    663,   11841, 1112658])
>>> johnson_lindenstrauss_min_dim([1e4, 1e5, 1e6], eps=0.1)
array([ 7894,  9868, 11841])