2015-05-25 31 views
9

próbuję uruchomić prostą liniową dopasowanie w scikit-learn:Dlaczego scikit-learn powoduje, że rdzeń jest rzucony?

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

W rezultacie otrzymuję:

Illegal instruction (core dumped) 

Czy ktoś wie co jest przyczyną tego problemu i jak problem może zostać rozwiązany?

P.S. Używam wersji 0.16.1 scikit-learn. Ale miałem ten problem również ze starszą wersją. Robię to w ramach Ubuntu.

DODANO

Dzisiaj próbowałem inny estymator (KernelRidge) i mam ten sam komunikat o błędzie. Myślę, że kilka miesięcy temu próbowałem rozwiązać układ równań liniowych za pomocą scipy i miałem ten sam błąd. Muszę dodać, że przykłady, które wypróbowałem, były zawsze małe (więc rozmiar problemu nie powinien być przyczyną błędu). Na innym komputerze (w pracy) mam również Ubunutu i używam scikit-learn i nie mam ich tego problemu. Wygląda na to, że mam problem z moim domowym laptopem.

+2

Niestety, nie mogę odtworzyć problem. Otrzymuję: Out [5]: LinearRegression (copy_X = True, fit_intercept = True, n_jobs = 1, normalize = False) a współczynniki to array ([0.5, 0.5]). – Jblasco

+1

Brzmi jak niedopasowanie kompilacji/uruchomienia biblioteki. W moim systemie Fedora, właśnie zainstalowałem 'scikit-learn' (używając' pip') i twój przykład kodu działa dobrze. – rickhg12hs

+0

@Jblasco Ty w systemie Ubuntu? – rickhg12hs

Odpowiedz

3

Wychodzisz tu na kończynie, ale czy twój laptop ma przypadkiem procesor AMD?

AMD usunęło obsługę 3DNow! instrukcje od ich nowszych procesorów (source), które w poszukiwaniu błędów w systemie Ubuntu i Debian pokazują, że wiele osób jest atakowanych (eg 1, 2, 3, 4,,, 5).

Scikit-learn jest zbudowany na bazie numpy, która z kolei wykorzystuje biblioteki takie jak OpenBLAS lub Atlas do wykonywania obliczeń tak wydajnie, jak to możliwe na określonym sprzęcie w komputerze.

Jednak domyślne wersje zostały skompilowane dla starszych procesorów Debiana i Ubuntu, biorąc pod uwagę, że przyszłe procesory byłyby w stanie wykonać kod dla starszych procesorów, ale nie jest to ogólnie prawda na odwrót.

W tym przypadku jednak nowsze procesory AMD mają usunięte instrukcje, więc pojawia się błąd Illegal instruction, pomimo posiadania prawidłowego kodu Pythona, ponieważ biblioteki bazowe próbują użyć starszych instrukcji, które nie są już obecne.

Jeśli tak się dzieje, poprawka polega na zbudowaniu numpy i OpenBLAS dla rzeczywistego procesora w laptopie, zamiast ogólnego, dostarczanego przez Debiana. Chociaż ten przykład dotyczy Ubuntu, instrukcje podane przez https://hunseblog.wordpress.com/2014/09/15/installing-numpy-and-openblas/ powinny działać dobrze dla Debiana.

0

To jest lista wszystkich zależność "python-scikits-Learn" pakietu:

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

Jeśli wszystkie zależności są spełnione, a twój program nadal nie działa, należy odinstalować te pliki binarne i zainstalować je ze źródła, instalacja ręczna wykryje poprawne ustawienia systemu.

Możesz także spróbować ponownie zainstalować pakiet:

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

poważaniem

0

trzeba go odinstalować, usunąć ręcznie odinstalować bo nie posprzątać prawidłowo. W moim przypadku odinstalowane scikit-learn-0.17.1 i zainstalować scikit-learn-0.18.1

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