sklearn安装

(如果原机器上gcc版本太低,推荐先升级gcc)

1. gcc包依赖于gmp、mpfr和mpc这3个包,需要首先安装这3个包才能安装gcc4.7.0。

其中mpfr依赖gmp包,mpc包又依赖gmp和mpfr,所以这三个包的安装顺序应当严格遵循gmp–>mpfr–>mpc的顺序。

本例中选择的是gmp5.0.1、mpfr2.4.2和mpc0.9.

2. 安装完gmp、mpfr和mpc之后,就可以安装gcc了。

首先将,gmp、mpfr和mpc的lib路径写入LD_LIBRARY

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.9/lib:/usr/local/gmp-5.0.1/lib:/usr/local/mpfr-2.4.2/lib

然后采用如下的configure进行编译

./configure --prefix=${HOME}/local --enable-threads=posix --disable-checking --enable--long-long --disable-multilib --with-gmp=${HOME}/local --with-mpfr=${HOME}/local --with-mpc=${HOME}/local (这里的路径取决于之前安装几个包时选定的prefix路径)

注意:由于开发机没有安装32位的lib库,所以一定要加 –disable-multilib,否则会报错说找不到某个文件

然后在$HOME/tools/bin下为刚编译好的gcc g++ gfortran做链接,方便之后的程序调用。

3. 要安装scipy,需要先安装BLAS,BLAS是一个线性代数计算库标准,它有多种实现,使用ATLAS可以编出BLAS和LAPACK,但是不是很靠谱(在编numpy时一直失败),我就直接自己编译了BLAS

安装过程如下:

mkdir -p ~/src/
cd ~/src/
wget http://www.netlib.org/blas/blas.tgz --no-check-certificate
tar xzf blas.tgz
cd BLAS
## NOTE: The selected fortran compiler must be consistent for BLAS, LAPACK, NumPy, and SciPy.## For GNU compiler on 32-bit systems:#g77 -O2 -fno-second-underscore -c *.f # with g77#gfortran -O2 -std=legacy -fno-second-underscore -c *.f # with gfortran## OR for GNU compiler on 64-bit systems:#g77 -O3 -m64 -fno-second-underscore -fPIC -c *.f # with g77
gfortran -O3 -std=legacy -m64 -fno-second-underscore -fPIC -c *.f # with gfortran## OR for Intel compiler:#ifort -FI -w90 -w95 -cm -O3 -unroll -c *.f
# Continue below irrespective of compiler:
ar r libfblas.a *.o
ranlib libfblas.a
rm -rf *.o
export BLAS=~/src/BLAS/libfblas.a
mkdir -p ~/src
cd ~/src/
wget http://www.netlib.org/lapack/lapack.tgz --no-check-certificate
tar xzf lapack.tgz
cd lapack-*/
cp INSTALL/make.inc.gfortran make.inc # on Linux with lapack-3.2.1 or newer

打开make.inc,在make.inc之后添加OPTS = -O2 -fPIC and NOOPT = -O0 -fPIC,这两个参数的作用是强制使用相对路径。

make lapacklib
make clean
export LAPACK=~/src/lapack-*/liblapack.a

注意,BLAS和lapack要使用同一个fortran编译器编译,

4. 安装numpy

直接装numpy时可能报error“unrecognizable insn”,这是gcc的一个bug,是由gcc的版本过低造成的

解决办法:

在numpy/core/src/multiarray/einsum.c.src文件中,在ifdef之后添加如下代码:

/*
* TODO: Only some SSE2 for float64 is implemented.
*/

#ifdef NPY_HAVE_SSE2_INTRINSICS
#define EINSUM_USE_SSE2 1
#else
#define EINSUM_USE_SSE2 0
#endif
//change begin
#define EINSUM_USE_SSE1 0
#define EINSUM_USE_SSE2 0
//change end 

5.

wget http://sourceforge.net/projects/scipy/files/scipy/0.14.0/scipy-0.14.0.tar.gz --no-check-certificate
tar zxvf scipy-0.14.0.tar.gz
cd scipy-0.14.0
python setup.py install --prefix=${HOME}/local

至此,scipy编译完成。

6.

下载sklearn(scikit-learn-master)的官方代码包,然后python setup.py install –prefix=${HOME}/local 即可。

最后在此鸣谢宋鑫同学对本文的帮助。

This entry was posted in machine learning and tagged , , , . Bookmark the permalink.

Leave a Reply

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