Windows7下Python安装最新xgboost步骤记录及注意事项

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013738531/article/details/70299611

实验目的:

还是熟悉的实验报告写法,最近开始看机器学习,到现在算是基本的公式都能推过,对于一些常用的方法,比如lr,svm,adaboost,神经网络都有一定程度的了解,感觉看书已经不能带来什么快感了,开始准备在数据平台上打比赛,参加了京东的JData大赛,首先接触了xgboost这个方法,花了一个晚上的时间对基本的概念和公式有个大致的了解,关于xgboost是啥,可以看这一篇:机器学习(四)--- 从gbdt到xgboost 

像我这种重度GitHub依赖者,免不了要到官网主页上去膜一发。看到xgboost提供了Python的接口,一开始以为只是去终端下pip install xgboost下就可以了,没想到这行指令输下去的时候就开始了今天苦逼的一天。

实验环境:

操作系统:    Windows7 64位

语言        :    Python

资料分享:

Git for Windows:链接:http://pan.baidu.com/s/1mhGoMUW 密码:5sfb

Python2.7.12 64位:链接:http://pan.baidu.com/s/1qYRmli8 密码:sdyl

mingw64:链接:http://pan.baidu.com/s/1o7THSD0 密码:yncu

预编译xgboost:链接:http://pan.baidu.com/s/1dFd39pZ 密码:13wb

numpy+mkl+scipy:链接:http://pan.baidu.com/s/1bDRvXk 密码:0mms

实验步骤:

1)从第一个地方开始,输下pip install xgboost这条指令以后不会像其他Python比较高端的库一样,出现一堆红字,这样缺那样错的,只有一行,缺少一个什么egg文件(鸡蛋?)后来仔细想想,是自己想得太理所当然了,xgboost是C++实现的方法,只不过提供了Python接口,本质上还是用C++写的,要想通过pip来做简直有点异想天开。网上查了一下,这个东西的一般安装步骤是先编译,后安装。所以去clone了官方的版本。

2)关于xgboost的编译,大家可以看这两篇博文:

windows 新版xgboost Python包安装教程 win10 64

64位win10下安装xgboost python包的教程

网上那么多为啥是这两篇,这里有几个原因,第一,现在网上搜东西,很多都是以前过时的信息,博客,对于一些文章来说,可能时间久了依然很经典,但是对于另外一些文章,可能涉及的技术领域比较前沿,更新换代特别快,这种文章看起来就很致命了,可能没问题的都会搞出问题来;其次,这两篇文章依然会有一些问题存在(后面会说到),但是是问题最少的。

要在Windows上编译xgboost是这篇文章的重点,也是最模糊不清的地方,换做以前在Linux平台上,几个命令就可以搞定的,但是在win7里面,首先是终端很不科学,其次是编译器会是一个难点,这里记录一下几个比较重要的步骤;

  • Python(注意一定要是64位的,否则后面import之后会报错,上面一篇博文提到的!!!
  • 编译器:mini gnu for Windows,也就是mingw64(这里也有坑,后面说
  • Git for Windows:推荐使用64位版本的,同时git bash也可以当做Linux终端来用
  • pip安装numpy和scipy
  • 编译xgboost

好了,主要就是上面的步骤,具体步骤我就不重复了,第一个Python注意的已经在红色字体里面了,就这么简单,不要问为什么,下了64位就走;

重点说第二个,mingw64,关于这个东西的介绍,网上一大把,是个好东西,用惯了Linux的童鞋在Windows上也能飞起来了,这个东西我建议不要去下载安装器来安装,浪费时间,直接下载预编译版本,地址上面已给;好了,重点来了,这里需要注意,下载的是64位的mingw,而不是32位的:

在32为的编译环境中,会出现这个错误:

sorry, unimplemented: 64-bit mode not compiled in

这就是操作系统版本不对应的原因,具体原因这篇博文有说:

解决:cc1.exe: sorry, unimplemented: 64-bit mode not compiled in

其次,按照上面两篇博客给的地址下载下来的mingw64,到最后编译的时候会报错:make on Windows has failed #771


作者没有给出指示,这也正常,人家负责算法的实现,没有职责面面俱到的解决部署问题,使用者适当的自己要去Google,baidu一下,扯远了。这个问题我后面解决了,主要区别是基本的操作系统库函数的调用有区别,win32和POSIX系统在C++ 的STL库中,对于多线程和互斥变量这些同步行为操作实现是不一致的(不负责任的猜测),这就是平台的区别,所以我们下载的mingw一定要说明是std POSIX的而不是win32的,上面两篇博客之所以能够正常编译,是因为Windows10系统对于POSIX系统的底层API接口有对应支持,联想于Windows10的powershell应用。

这个问题解决之后一切都编译顺利了。注意在生成Python接口的时候最好已经预先安装了numpy和scipy库,不然会自己链接国外的服务器,安装成不成功是一回事,等时间很长那就是另外一回事了。


注意!!由于mingw我们使用的是预编译的版本,所以关于POSIX下的API库和include路径,还有mingw的make,gcc,g++都要添加到环境变量里面去,否则在ld步骤时会出现类似于以下错误:

bad reloc错误,参考这篇博文解决:MinGW的win7安装与配置PATH等环境变量


说下pip安装numpy和scipy,numpy倒是没啥大问题,在Windows上一样pip搞定,scipy比较麻烦,需要安装一些计算库,类似于CBlas这种,mkl,建议通过whl安装,在Python的工具库网站可以下载,上面也会把网盘地址给出。具体的安装方式可以参考这篇博客:Windows环境Python2.7安装Scipy

先装numpy+mkl,在安装scipy,注意选择正确的平台:

写在最后:

最后测试一下:

一切OK,可以正常导入,其实回望一下,这些步骤都挺简单的,无奈平时Linux用习惯了,思维有时候转不过来,不过每一次配置环境都可以让我对于操作系统的了解更进一步,挺有意思的一件事情,其实关于xgboost的安装还有一个小窍门,只要numpy和scipy这种依赖库先装好了,可以拷贝别人的编译好的xgboost文档,到python-package这个目录下执行命令安装就好,所以我决定把自己预编译的版本分享出来,方便之后大家使用,要注意,我是在Windows7 64位系统+mingw64-posix下编译完成的,numpy和scipy建议都使用664位的。

展开阅读全文

没有更多推荐了,返回首页