Mac 安装scikit-learn

4,625 views

尽管在http://scikit-learn.org/stable/install.html的官网上已经提供了相关的安装教程,但安装起来还是遇到不少困难,记录一下。

官方文档要求

Scikit-learn requires:
	Python (>= 2.6 or >= 3.3),
	NumPy (>= 1.6.1),
	SciPy (>= 0.9).

说一下我的环境

OSX 10.8.5
Python2.7

系统默认安装了多个版本的Python,可以通过

port select --list python

查看结果

Available versions for python:
none
python25-apple
python26-apple
python27 (active)
python27-apple

这样显示系统使用的是Python 2.7版本。如果显示none<active>,说明没有选择任何版本。

执行命令行可以选择相应的版本

sudo port select --set python python27

提示已经使用了Python 2.7

Selecting 'python27' for 'python' succeeded. 'python27' is now active.

文档提供了默认安装方式

pip install -U numpy scipy scikit-learn

也提供了port的第三方发行的安装方式,

sudo port install py27-scikit-learn

这种方式需要安装依赖numpy和scipy。提示
Dependencies to be installed: py27-numpy py27-scipy swig-python

而pip会自动安装numpy和scipy

执行pip命令,发现没安装。于是执行

sudo easy_install pip

然后执行pip安装scikit命令

最后发现没权限,加了sudo

sudo pip install -U numpy scipy scikit-learn

好了,经过几分钟的下载,安装,提示已经安装成功。

Successfully installed numpy-1.9.2 scikit-learn-0.16.1 scipy-0.16.0

找了一下安装路径,默认安装在了

/Library/Python/2.7/site-packages

写句命令测试一下,例如加载一下sklearn模块

python -c "import sklearn;"

然后悲催的提示

Traceback (most recent call last):
   File "", line 1, in 
ImportError: No module named sklearn

就是说模块没有加载成功,就是说还需要配置环境变量

于是

vim ~/.bash_profile

在后面添加了

export PYTHONPATH=$PYTHONPATH:/Library/Python/2.7/site-packages

再次输入测试命令

python -c "import sklearn;"

没有提示错误,应该可以了吧!

为了方便显示画图,还需要安装matplotlib(matplotlib-1.4.3.tar.gz)
以下是源码安装命令,前提是安装了上面的环境。

 cd matplotlib
 python setup.py build
 sudo python setup.py install

好了,工具安装完毕。

找了scikit-learn的一些example测试一下。例如plot_isotonic_regression.py

print(__doc__)

# Author: Nelle Varoquaux <nelle.varoquaux@gmail.com>
#         Alexandre Gramfort <alexandre.gramfort@inria.fr>
# Licence: BSD

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

from sklearn.linear_model import LinearRegression
from sklearn.isotonic import IsotonicRegression
from sklearn.utils import check_random_state

n = 100
x = np.arange(n)
rs = check_random_state(0)
y = rs.randint(-50, 50, size=(n,)) + 50. * np.log(1 + np.arange(n))

###############################################################################
# Fit IsotonicRegression and LinearRegression models

ir = IsotonicRegression()

y_ = ir.fit_transform(x, y)

lr = LinearRegression()
lr.fit(x[:, np.newaxis], y)  # x needs to be 2d for LinearRegression

###############################################################################
# plot result

segments = [[[i, y[i]], [i, y_[i]]] for i in range(n)]
lc = LineCollection(segments, zorder=0)
lc.set_array(np.ones(len(y)))
lc.set_linewidths(0.5 * np.ones(n))

fig = plt.figure()
plt.plot(x, y, 'r.', markersize=12)
plt.plot(x, y_, 'g.-', markersize=12)
plt.plot(x, lr.predict(x[:, np.newaxis]), 'b-')
plt.gca().add_collection(lc)
plt.legend(('Data', 'Isotonic Fit', 'Linear Fit'), loc='lower right')
plt.title('Isotonic regression')
plt.show()

执行

python plot_isotonic_regression.py

终于出现了界面

figure_1

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>