2015-05-25 11 views
9

Ich versuche, eine einfache lineare Anpassung in laufen Scikit-Learn:Warum verursacht scikit-learn core dumped?

from sklearn import linear_model 
clf = linear_model.LinearRegression() 
clf.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2]) 

Als Ergebnis erhalte ich:

Illegal instruction (core dumped) 

Weiß jemand, was der Grund für dieses Problem ist und wie das Problem gelöst werden?

P.S. Ich benutze die Version 0.16.1 von scikit-learn. Aber ich hatte dieses Problem auch mit einer älteren Version. Ich mache es unter Ubuntu.

ADDED

Heute habe ich einen anderen Schätzer versucht (KernelRidge) und ich bekam die gleiche Fehlermeldung. Ich denke, dass ich vor einigen Monaten versucht habe, ein System von linearen Gleichungen mit scipy zu lösen, und ich hatte den gleichen Fehler. Ich muss hinzufügen, dass Beispiele, die ich versuchte, immer klein waren (also sollte die Größe des Problems nicht der Grund des Fehlers sein). Auf einem anderen Computer (bei der Arbeit) habe ich auch Ubunutu und benutze scikit-learn und ich habe dieses Problem nicht. Es sieht also so aus, als hätte ich ein Problem mit meinem Heim-Laptop.

+2

Sorry, ich das Problem nicht reproduzieren kann. Ich bekomme: Out [5]: LinearRegression (copy_X = Wahr, fit_intercept = True, n_jobs = 1, normalize = False) und die Koeffizienten sind Array ([0.5, 0.5]). – Jblasco

+1

Klingt wie eine Bibliothek Build/Run Mismatch. Auf meinem Fedora-System habe ich gerade 'scikit-learn' installiert (mit' pip') und Ihr Codebeispiel funktioniert einwandfrei. – rickhg12hs

+0

@Jblasco Sie auf Ubuntu? – rickhg12hs

Antwort

3

Gehen Sie hier aus, aber hat Ihr Laptop eine AMD CPU?

AMD hat die Unterstützung für 3DNow! Anweisungen von ihren neueren Prozessoren (source), die ein Trawl von Ubuntu und Debian Bugtrackers zeigt, dass viele Menschen von getroffen werden (eg 1, 3, 4, 5).

Scikit-learn basiert auf numpy, das wiederum Bibliotheken wie OpenBLAS oder Atlas verwendet, um Berechnungen auf der spezifischen Hardware Ihres Computers so effizient wie möglich durchzuführen.

Allerdings zielen die Standardversionen, die für Debian und Ubuntu kompiliert wurden, auf ältere CPUs, auf der Basis, dass zukünftige Prozessoren Code für ältere Prozessoren ausführen könnten, aber dies trifft im Allgemeinen nicht umgekehrt zu.

In diesem Fall jedoch neuere AMD-CPUs wurden die Anweisungen entfernt, und so erhalten Sie einen Illegal instruction Fehler trotz gültigem Python-Code, da die zugrunde liegenden Bibliotheken versuchen, die älteren Anweisungen zu verwenden, die nicht mehr vorhanden sind.

Wenn das ist, was passiert, dann ist die Reparatur, numpy und OpenBLAS für den tatsächlichen Prozessor in Ihrem Laptop zu bauen, anstatt der generischen von Debian geliefert. Obwohl dieses Beispiel für Ubuntu ist, sollten die Anweisungen von https://hunseblog.wordpress.com/2014/09/15/installing-numpy-and-openblas/ für Debian gut funktionieren.

0

Dies ist die Liste aller Abhängigkeit von "python-scikits-lernen" -Paket:

  • python-scikits.statsmodels
  • Python-skimage
  • Python-skimage-doc
  • Python-skimage-lib
  • Python-sklearn
  • Python-sklearn-doc
  • Python-sklearn-lib

Wenn alle Abhängigkeiten erfüllt sind und Ihr Programm immer noch nicht funktioniert, sollten Sie diese Binärdateien deinstallieren und von der Quelle installieren. Eine manuelle Installation erkennt die korrekten Einstellungen für Ihr System.

Sie können auch versuchen, Paket neu zu installieren:

sudo apt-get autoremove python-scikits-learn 
sudo apt-get install python-scikits-learn 

Mit freundlichen Grüßen

0

Sie müssen es deinstallieren, löschen Sie den Ordner manuell, weil Deinstallation nicht richtig aufzuräumen. In meinem Fall, ich deinstalliert Scikit-Learn-0.17.1 und installierte Scikit-Learn-0.18.1

pip uninstall scikit-learn 
rm -rf ~/venv/lib/python2.7/site-packages/sklearn/ 
pip uninstall scikit-learn 
Verwandte Themen