2015-05-25 13 views
9

si tenta di eseguire un semplice adattamento lineare in scikit-learn:Perché scikit-learn causa il core scaricato?

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

Di conseguenza ho ottenere:

Illegal instruction (core dumped) 

Qualcuno sa qual è la ragione di questo problema e come il problema può essere risolto?

P.S. Io uso la versione 0.16.1 di scikit-learn. Ma ho avuto questo problema anche con una versione precedente. Lo faccio sotto Ubuntu.

AGGIUNTO

Oggi ho provato un altro stimatore (KernelRidge) ed ho ottenuto lo stesso messaggio di errore. Penso che diversi mesi fa ho provato a risolvere un sistema di equazioni lineari usando scipy e ho avuto lo stesso errore. Devo aggiungere che gli esempi che ho provato erano sempre piccoli (quindi, la dimensione del problema non dovrebbe essere la ragione dell'errore). Su altri computer (al lavoro) ho anche Ubunutu e uso scikit-learn e non ho il loro problema. Quindi, sembra che abbia qualche problema con il mio portatile di casa.

+2

Mi dispiace, non può riprodurre il problema. Ottengo: Out [5]: LinearRegression (copy_X = True, fit_intercept = True, n_jobs = 1, normalize = False) e i coefficienti sono array ([0.5, 0.5]). – Jblasco

+1

Sembra una mancata corrispondenza build build/run. Sul mio sistema Fedora, ho appena installato 'scikit-learn' (usando' pip') e il tuo esempio di codice funziona correttamente. – rickhg12hs

+0

@Jblasco Sei su Ubuntu? – rickhg12hs

risposta

3

Uscire su un arto qui, ma il tuo computer portatile ha per caso una CPU AMD?

AMD hanno rimosso il supporto per 3DNow! istruzioni da loro processori più recenti (source), che una rete a strascico di Ubuntu e Debian bugtrackers dimostra che molte persone vengono colpite da (eg 1, 2, 3, 4, 5).

Scikit-learn è basato su numpy, che a sua volta utilizza librerie come OpenBLAS o Atlas per eseguire calcoli nel modo più efficiente possibile sull'hardware specifico del computer.

Tuttavia, le versioni predefinite compilate per Debian e Ubuntu sono destinate a CPU più datate, sulla base del fatto che i futuri processori sarebbero in grado di eseguire codice per processori precedenti, ma questo non è generalmente vero al contrario.

In questo caso però, più recenti CPU AMD hanno avuto le istruzioni rimossi, e così si riceve un errore Illegal instruction, pur avendo codice Python valido, in quanto le librerie di base stanno cercando di utilizzare le istruzioni più vecchi che non sono più presenti.

Se questo è ciò che sta accadendo, allora la correzione è di costruire numpy e OpenBLAS per il processore reale nel tuo portatile, invece del generico fornito da Debian. Sebbene questo esempio sia per Ubuntu, le istruzioni fornite da https://hunseblog.wordpress.com/2014/09/15/installing-numpy-and-openblas/ dovrebbero funzionare bene per Debian.

0

Questa è la lista di tutte le dipendenze del pacchetto "python-scikits-imparare":

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

Se tutte le dipendenze sono soddisfatte e il programma non funziona, è necessario disinstallare tali file binari e installarli dal sorgente, un'installazione manuale rileverà le impostazioni corrette per il proprio sistema.

Si può anche provare a reinstallare il pacchetto:

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

migliori saluti

0

È necessario disinstallarlo, eliminare manualmente la cartella di disinstallazione, perché non pulisce correttamente. Nel mio caso, ho disinstallato scikit-learn-0.17.1 e installato scikit-learn-0.18.1

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