機器學習筆記(一)

接灰的電子產品發表於2017-11-20

說起來感覺不可思議,現在竟然 python 成為人工智慧領域的一個最普及的程式語言,原來我學習機器學習時,大家用的是 Matlab 或者 Prolog 。應該是 python 作為主流程式語言之一,由於其簡單易學的特性,是的很多資料科學相關的類庫發展的比較好,然後由於其類庫齊全,就又有更多的開發者為其開發更多的類庫,這是一個典型的正向迴圈。其實除了 Python 外,R 在做資料分析和資料視覺化上也很有優勢,再有現在的學術圈好像比較流行 Octave (一個和 Matlab 非常像的免費開源程式語言)。而遇到這種選擇時,而我一般的學習習慣是都嘗試一下。

Python 環境搭建

Python 領域目前比較流行沙箱的環境配置,這樣一個沙箱環境可以為每一個 Python 應用建立屬於自己的執行環境和配置,彼此互不影響。

在 macOS 下,我採用了 pyenv + pyenv-virtualenv 外掛的形式進行環境配置。其中 pyenv 是一個 Python 的版本管理工具,也就是說使用 pyenv,你可以安裝多個 Python 版本,2.x 也好,3.x 也好,都可以安裝在同一個作業系統中。 如果你和我一樣在使用 Mac 的話,那麼通過 brew 可以很方便的安裝 brew install pyenv

這樣之後,我們可以安裝任意版本的 python ,比如 pyenv install 3.6.3 就是安裝 Python 3.6.3,類似的 pyenv install 2.7.13 就是安裝 Python 2.7.13。如果你沒有科學上網的話,python 的下載速度會非常感人,但所幸的是,我們可以採用搜狐的映象將安裝包下載下來 wget http://mirrors.sohu.com/python/x.y.z/Python-x.y.z.tar.xz -P ~/.pyenv/cache/ (其中 x.y.z 為版本號),然後再進行 pyenv install 。值得指出的一點是這樣安裝的 python 並非以 Library Framework 形式安裝,有些軟體需要這種安裝形式的 python,那麼我們如果要支援的話,需要設定環境變數如下進行安裝: env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install <your version>

切換 Python 版本的時候呢,pyenv 給我們幾個命令用於不同條件下的切換, global 顧名思義是把版本切換應用到全域性, pyenv global 2.7.13 這條命令執行之後,你的 Python 環境就全域性性的切換到了 2.7.13。 pyenv local 2.7.13 用於設定應用的 Python 版本,而 pyenv shell 2.7.3 指的就是在當前視窗設定版本。

但我們為了機器學習方便,需要安裝一個 Anaconda ,這個東東可以理解成一個專注於機器學習和資料探勘的 python 整合環境。所幸的是, pyenv 同樣支援安裝 Anaconda ,在寫這篇文章的時候, Anaconda 的最新版本是 5.0.0,所以我們通過 pyenv install anaconda3-5.0.0 來安裝這個版本,注意這個版本比普通 python 要大很多(大概 500-600 MB)

pyenv 並不負責管理虛擬沙箱環境,但是我們可以通過一個外掛 pyenv-virtualenv 來完成虛擬環境的管理。也是通過 brew 安裝: brew install pyenv-virtualenv ,安裝後就可以通過下面的命令建立一個虛擬環境 mlpypyenv virtualenv anaconda3-5.0.0 mlpy,以後要切換到這個環境呢,就使用 pyenv local mlpy 或者 pyenv activate mlpy 來切換到 mlpy 這個虛擬環境。

當然 pip install 安裝的時候,如果不科學上網,也會很慢,我們這裡配置一下 ~/.pip/pip.conf (沒有就自己建立哈),採用豆瓣映象。

[global]
index-url = https://pypi.douban.com/simple複製程式碼

安裝 conda 後,有的時候會產生一些系統命令上的衝突,這時候需要安裝一個 pyenv 的外掛 pyenv-which-ext

brew install pyenv-which-ext複製程式碼

Octave 的安裝

Octave 我們就不採用沙箱安裝環境了,因為 Python 之所以推薦沙箱安裝環境,是因為使用 python 可以做的事情很多,除了機器學習,我們可以寫指令碼、寫 web、寫爬蟲等等。這麼多的應用可能依賴的環境各有區別,有的需要 2.x 和一些特定的包,有的需要 3.x,有的還需要 python 以 framework 形式安裝。這樣的一些需求導致沙箱對於 python 是必要的,但 Octave 的應用範圍很明確,就是資料科學,起碼我的目的就是這樣,所以我選擇了更簡單的安裝方式。

brew install octave複製程式碼

IDE 的選擇 -- VSCode

我當然安裝了大名鼎鼎的 PyCharm,但我目前更喜歡輕量級的 editor,而在前端領域我使用的是 VSCode,於是我就琢磨者怎麼把 VSCode 作為一個用於 python 開發的 IDE (程式設計師愛折騰是天性吧)。VSCode 的 extension 中已經有不少好用的 python 外掛了,我挑選的這款叫做 Python Extension Pack,裡面含有幾款非常好用的外掛:PythonJupyterMagicPythonJinjaDjango TemplateDjango Snippets。基本覆蓋了 Python 開發的各個方面,從普通 python 開發到 web 開發。

但在開發中我們很多時候需要 lint 來幫助我們儘早發現錯誤,這就需要使用 pylint,如果使用了沙箱環境的的話,這個 pylint 需要安裝到沙箱環境中。比如,我們建立了一個沙箱環境 pyenv virtualenv 3.6.3 myapp_env ,那麼我們為該程式設定自己的環境 pyenv local myapp_env ,這樣之後就可以安裝 pylint 等工具了。

pip install pylint
pip install pep8
pip install autopep8複製程式碼

題外話,如果做 Django 開發,我們還需要多做一些步驟,首先安裝 pylint 的 Django 外掛 pip install pylint-django。而且,
對於 VSCode 來說,我們還需要設定一下 python 的引數,以便讓 python 外掛可以在啟動時載入 pylint 的支援。

{
  "python.linting.pylintArgs": [
    "--load-plugins",
    "pylint_django",
    "--disable=missing-docstring"
  ],
  "python.formatting.provider": "autopep8",
  "editor.formatOnSave": true,
  "python.linting.pep8Enabled": true
}複製程式碼

相關文章