2015-05-25 19 views
9

Tôi cố gắng chạy một sự phù hợp tuyến tính đơn giản trong scikit-học:Tại sao scikit-tìm hiểu nguyên nhân cốt lõi bị bán phá giá?

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

Kết quả là tôi nhận được:

Illegal instruction (core dumped) 

Có ai biết lý do của vấn đề này là gì và làm thế nào các vấn đề có thể được giải quyết?

P.S. Tôi sử dụng phiên bản 0.16.1 của scikit-learn. Nhưng tôi cũng gặp vấn đề này với phiên bản cũ hơn. Tôi làm điều đó dưới Ubuntu.

THÊM

Hôm nay tôi đã cố gắng một ước lượng (KernelRidge) và tôi đã nhận được thông báo lỗi tương tự. Tôi nghĩ rằng vài tháng trước, tôi đã cố gắng giải quyết một hệ phương trình tuyến tính bằng cách sử dụng scipy và tôi đã có lỗi tương tự. Tôi cần thêm các ví dụ mà tôi đã thử luôn nhỏ (vì vậy, kích thước của vấn đề không phải là lý do của lỗi). Trên máy tính khác (tại nơi làm việc) Tôi cũng có Ubunutu và sử dụng scikit-learning và tôi không có vấn đề này. Vì vậy, có vẻ như tôi có một số vấn đề với máy tính xách tay tại nhà của tôi.

+2

Xin lỗi, tôi không thể tạo lại vấn đề. Tôi nhận được: Out [5]: LinearRegression (copy_X = True, fit_intercept = True, n_jobs = 1, normalize = False) và các hệ số là mảng ([0.5, 0.5]). – Jblasco

+1

Âm thanh như xây dựng/chạy thư viện không khớp. Trên hệ thống Fedora của tôi, tôi vừa cài đặt 'scikit-learn' (sử dụng' pip') và ví dụ mã của bạn hoạt động tốt. – rickhg12hs

+0

@Jblasco Bạn trên Ubuntu? – rickhg12hs

Trả lời

3

Đi ra ngoài ở một chi nhánh ở đây, nhưng máy tính xách tay của bạn có khả năng có CPU AMD không?

AMD đã xóa hỗ trợ cho 3DNow! hướng dẫn từ các bộ vi xử lý gần đây hơn của họ (source), một bản rà soát các trình gỡ lỗi Ubuntu và Debian cho thấy nhiều người đang bị ảnh hưởng bởi (eg 1, 2, 3, 4, 5).

Scikit-learn được xây dựng trên đầu trang của khối u, do đó sử dụng các thư viện như OpenBLAS hoặc Atlas để thực hiện các tính toán hiệu quả nhất có thể trên phần cứng cụ thể trong máy tính của bạn.

Tuy nhiên, các phiên bản mặc định được biên dịch cho Debian và Ubuntu nhắm mục tiêu các CPU cũ hơn, trên cơ sở các bộ vi xử lý trong tương lai có thể thực thi mã cho các bộ xử lý cũ hơn, nhưng điều này không đúng theo cách khác. Tuy nhiên, trong trường hợp này, các CPU AMD mới hơn đã có hướng dẫn bị loại bỏ, và do đó bạn nhận được lỗi Illegal instruction, mặc dù có mã python hợp lệ, vì các thư viện cơ bản đang cố gắng sử dụng các hướng dẫn cũ hơn không còn tồn tại nữa.

Nếu đây là những gì đang xảy ra, sau đó sửa chữa là xây dựng numpy và OpenBLAS cho bộ xử lý thực tế trong máy tính xách tay của bạn, thay vì bộ xử lý chung do Debian cung cấp. Mặc dù ví dụ này là dành cho Ubuntu, các hướng dẫn được đưa ra bởi https://hunseblog.wordpress.com/2014/09/15/installing-numpy-and-openblas/ chỉ hoạt động tốt với Debian.

0

Đây là danh sách của tất cả các phụ thuộc của "python-scikits-học" gói:

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

Nếu tất cả các phụ thuộc được đáp ứng và chương trình của bạn vẫn không hoạt động, bạn nên gỡ cài đặt các tệp nhị phân đó và cài đặt từ nguồn, cài đặt thủ công sẽ phát hiện các cài đặt chính xác cho hệ thống của bạn.

Bạn cũng có thể thử cài đặt lại gói:

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

Trân trọng

0

Bạn cần phải gỡ bỏ nó, tự xóa các thư mục vì gỡ bỏ cài đặt không đúng cách dọn dẹp. Trong trường hợp của tôi, tôi gỡ bỏ cài đặt scikit-học-0.17.1 và cài đặt scikit-học-0.18.1

pip uninstall scikit-learn 
rm -rf ~/venv/lib/python2.7/site-packages/sklearn/ 
pip uninstall scikit-learn 
Các vấn đề liên quan