Sagen wir, ich habe eine Matrix:
%Vor% Und dass ich mit np.NaN
, z. B.:
Ich möchte die nan
-Einträge unter Verwendung von Informationen aus den übrigen Einträgen der Matrix ausfüllen. Ein Beispiel wäre der Durchschnittswert der Spalte, in der die nan
-Einträge vorkommen.
Gibt es allgemeinere Bibliotheken in Python für Matrixvervollständigung ? (zB etwas in der Art von Candes & amp; Recht's konvexen Optimierungsmethode ).
>Dieses Problem tritt oft beim maschinellen Lernen auf. Zum Beispiel bei der Arbeit mit fehlenden Funktionen in der Klassifizierung / Regression oder in kollaborative Filterung (siehe z. B. das Netflix-Problem auf Wikipedia und hier )
Wenn Sie die neueste Version von scikit-learn, Version 0.14a1, installieren, können Sie die neue Klasse Imputer
verwenden:
Danach können Sie imp.transform
verwenden, um die gleiche Transformation zu anderen Daten durchzuführen, indem Sie den imp
von a
gelernt haben. Da sich die Drucker an scikit-learn Pipeline
-Objekte binden, können Sie sie in Klassifikations- oder Regressions-Pipelines verwenden.
Wenn Sie auf eine stabile Version warten wollen, sollte 0.14 nächste Woche raus sein.
Volle Enthüllung: Ich bin ein scikit-lerne Kernentwickler
Sagen wir, ich habe eine Matrix:
%Vor% Und dass ich mit pandas
, z. B.:
Ich möchte die %code% -Einträge unter Verwendung von Informationen aus den übrigen Einträgen der Matrix ausfüllen. Ein Beispiel wäre der Durchschnittswert der Spalte, in der die %code% -Einträge vorkommen.
Gibt es allgemeinere Bibliotheken in Python für Matrixvervollständigung ? (zB etwas in der Art von Candes & amp; Recht's konvexen Optimierungsmethode ).
>Dieses Problem tritt oft beim maschinellen Lernen auf. Zum Beispiel bei der Arbeit mit fehlenden Funktionen in der Klassifizierung / Regression oder in kollaborative Filterung (siehe z. B. das Netflix-Problem auf Wikipedia und hier )
Wenn Sie die neueste Version von scikit-learn, Version 0.14a1, installieren, können Sie die neue Klasse %code% verwenden:
%Vor%Danach können Sie %code% verwenden, um die gleiche Transformation zu anderen Daten durchzuführen, indem Sie den %code% von %code% gelernt haben. Da sich die Drucker an scikit-learn %code% -Objekte binden, können Sie sie in Klassifikations- oder Regressions-Pipelines verwenden.
Wenn Sie auf eine stabile Version warten wollen, sollte 0.14 nächste Woche raus sein.
Volle Enthüllung: Ich bin ein scikit-lerne Kernentwickler
Sie können es mit reinem numpy tun, aber es ist fieser.
%Vor%Einige Timings laufen:
%Vor%Ich glaube nicht, dass numpy Routinen zur Array-Vervollständigung enthält; jedoch Pandas. Sehen Sie sich das Hilfethema hier an.
Ähnliche Fragen wurden gestellt hier vor . Was Sie brauchen, ist ein spezieller Fall von inpaiting . Leider haben weder numpy noch scipy eingebaute Routinen dafür. OpenCV hat jedoch eine Funktion %code% , aber es funktioniert nur mit 8-Bit Bilder.
OpenPIV hat eine Funktion %code% , die Sie verwenden können für deine Zwecke. ( Siehe hier für die Cython-Version, die Sie neu packen können, wenn Sie nicht Ich möchte die gesamte Bibliothek installieren.) Sie ist flexibler als eine reine Mittelwertbildung oder Propagierung älterer Werte, wie sie in anderen Antworten vorgeschlagen wird (zB können Sie verschiedene Gewichtungsfunktionen, Kernelgrößen usw. definieren).
Mit den Beispielen von @Ophion habe ich die %code% mit den %code% und Pandas-Lösungen verglichen:
%Vor%Die %code% Lösung ist wohl besser und schneller.
Ähnliche Fragen wurden gestellt hier vor . Was Sie brauchen, ist ein spezieller Fall von inpaiting . Leider haben weder numpy noch scipy eingebaute Routinen dafür. OpenCV hat jedoch eine Funktion inpaint()
, aber es funktioniert nur mit 8-Bit Bilder.
OpenPIV hat eine Funktion replace_nans
, die Sie verwenden können für deine Zwecke. ( Siehe hier für die Cython-Version, die Sie neu packen können, wenn Sie nicht Ich möchte die gesamte Bibliothek installieren.) Sie ist flexibler als eine reine Mittelwertbildung oder Propagierung älterer Werte, wie sie in anderen Antworten vorgeschlagen wird (zB können Sie verschiedene Gewichtungsfunktionen, Kernelgrößen usw. definieren).
Mit den Beispielen von @Ophion habe ich die replace_nans
mit den nanmean
und Pandas-Lösungen verglichen:
Die replace_nans
Lösung ist wohl besser und schneller.
Tags und Links python machine-learning numpy scikit-learn mathematical-optimization