机器学习笔记(一)

说起来感觉不可思议,现在竟然 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

R 的安装

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
}

推荐阅读更多精彩内容