Matrixvervollständigung in Python

8

Sagen wir, ich habe eine Matrix:

%Vor%

Und dass ich mit np.NaN , z. B.:

, ein paar Löcher in ihn bohre %Vor%

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 ).

>

Hintergrund:

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 )

    
Amelio Vazquez-Reina 31.07.2013, 23:47
quelle

4 Antworten

11

Wenn Sie die neueste Version von scikit-learn, Version 0.14a1, installieren, können Sie die neue Klasse Imputer verwenden:

%Vor%

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

    
Fred Foo 01.08.2013, 18:34
quelle
5

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.

    
Daniel 01.08.2013 00:08
quelle
4
___ qstnhdr ___ Matrixvervollständigung in Python ___ qstntxt ___

Sagen wir, ich habe eine Matrix:

%Vor%

Und dass ich mit pandas , z. B.:

, ein paar Löcher in ihn bohre %Vor%

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 ).

>

Hintergrund:

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 )

    
___ answer18001880 ___

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

    
___ tag123numpy ___ NumPy ist eine Erweiterung der Python-Programmiersprache für den naturwissenschaftlichen und numerischen Bereich. ___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ answer17983100 ___

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.

    
___ tag123scikitlearn ___ scikit-learn ist eine Machine-Learning-Bibliothek für Python, die einfache und effiziente Werkzeuge für die Datenanalyse und das Data Mining bietet, wobei der Schwerpunkt auf maschinellem Lernen liegt. Es ist für jeden zugänglich und in verschiedenen Kontexten wiederverwendbar. Es basiert auf NumPy und SciPy. Das Projekt ist Open Source und kommerziell nutzbar (BSD-Lizenz). ___ answer17994722 ___

Ä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.

    
___ tag123machineelearning ___ Implementierungsfragen zu Algorithmen des maschinellen Lernens. Allgemeine Fragen zum maschinellen Lernen sollten in ihren jeweiligen Communities veröffentlicht werden. ___ tag123mathematische Optimierung ___ Die mathematische Optimierung befasst sich mit der Maximierung oder Minimierung einer Zielfunktion, indem Werte aus einem zulässigen zulässigen Satz möglicher Werte ausgewählt werden. Mathematische Optimierung wird oft auch als mathematische Programmierung oder einfach als Optimierung bezeichnet. ___
Justin 31.07.2013 23:55
quelle
2

Ä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:

%Vor%

Die replace_nans Lösung ist wohl besser und schneller.

    
tiago 01.08.2013 12:56
quelle