在 Raspberry Pi 上安裝 scikit-learn 機器學習套件
非常方便,且功能完備的機器學習套件!
使用 arm64
架構的映像檔
因為套件支援的關係,我們必須使用 64 位元的 ARM 映像檔。因為目前官方尚未提供 arm64
的作業系統,為了方便,我們將使用 Ubuntu 官方釋出的專用映像檔(僅適用於 3B 或 3B+)
小獅建議使用 Etcher.io 寫入映像檔,因為它會檢查寫入的時候有沒有出錯,而且跨平台(Linux / MacOS / Windows)
下載 : https://www.balena.io/etcher/
檢查 SWAP
因為等一下編譯會用到很多記憶體,請務必確認你有 1GB 以上的 SWAP 空間
free -h
total used free shared buff/cache available
Mem: 912M 87M 299M 52K 525M 809M
Swap: 1.0G 45M 978M
如果沒有的話,請參考這篇文章
安裝 scikit-learn
首先安裝 Python 3.7(或者 3.6 也可以)和 virtualenv
sudo apt install python3.7-dev python3.7-venv virtualenv
安裝一些編譯時必要的工具
sudo apt install build-essential
sudo apt install gfortran libopenblas-dev liblapack-dev
建立 venv
python3.7 -m venv ~/py3
切換到 venv
$ source ~/py3/bin/activate
(py3) $ python --version
Python 3.7.1
更新一下 Python 的工具
pip install pip --upgrade
pip install setuptools --upgrade
pip install wheel --upgrade
安裝相依套件(不要鐵齒,一定要先裝)這個步驟大概需要花 1 個小時,請耐心等候!
pip install Cython --upgrade
pip install numpy --upgrade
pip install scipy --upgrade
終於要開始安裝了!這個步驟也請耐心等候!
pip install scikit-learn
測試 scikit-learn
試一下能不能用(參考:Ex 1: Recognizing hand-written digits – machine-learning)
from sklearn import datasets, svm, metrics
digits = datasets.load_digits()
images_and_labels = list(zip(digits.images, digits.target))
n_samples = len(digits.images)
data = digits.images.reshape((n_samples, -1))
classifier = svm.SVC(gamma=0.001)
classifier.fit(data[:n_samples // 2], digits.target[:n_samples // 2])
expected = digits.target[n_samples // 2:]
predicted = classifier.predict(data[n_samples // 2:])
print('Confusion matrix:\n{}'.format(metrics.confusion_matrix(expected, predicted)))
輸出大概長這樣:
Confusion matrix:
[[87 0 0 0 1 0 0 0 0 0]
[ 0 88 1 0 0 0 0 0 1 1]
[ 0 0 85 1 0 0 0 0 0 0]
[ 0 0 0 79 0 3 0 4 5 0]
[ 0 0 0 0 88 0 0 0 0 4]
[ 0 0 0 0 0 88 1 0 0 2]
[ 0 1 0 0 0 0 90 0 0 0]
[ 0 0 0 0 0 1 0 88 0 0]
[ 0 0 0 0 0 0 0 0 88 0]
[ 0 0 0 1 0 1 0 0 0 90]]