[PYTHON] Exécutez XGBoost sur Bash sur Ubuntu sous Windows

(Ajout de la procédure d'installation du package R. Http://qiita.com/TomokIshii/items/b43321448ab9fa21dc10#%E8%BF%BD%E8%A8%98r-package-%E3%81%AE%E3% 82% A4% E3% 83% B3% E3% 82% B9% E3% 83% 88% E3% 83% BC% E3% 83% AB 2016/9/2)

La mise à jour anniversaire pour Windows 10 a été publiée et Bash sur Ubuntu sur Windows peut être utilisé. Il y a un rapport que "TensorFlow a également fonctionné!", Mais cette fois, j'ai décidé d'essayer d'améliorer l'environnement de XGBoost (paquet Python). XGBoost est une bibliothèque (Xgboost = eXtreme Gradient Boosting) qui implémente la méthode d'amplification de gradient. Bien qu'il s'agisse d'un programme C ++, il prend également en charge l'utilisation de Python, R, Julia et Java.

Je me souviens que lorsque j'ai installé XGBoost sur Windows il y a quelque temps, il a fallu beaucoup de travail pour commencer l'installation de MinGW. Dans l'espoir d'une amélioration, j'ai continué le travail en pensant à écrire un article comme "Cette fois, c'est tellement facile à installer!", Mais j'ai eu quelques soucis, donc je vais vous présenter la situation.

(L'environnement sur lequel j'ai travaillé cette fois-ci est Windows 10, ver.1607, Bash sur Ubuntu sur Windows (Windows Sybsystem pour Linux), Python 3.5.2, pyenv, miniconda3-4.0.5, xgboost ver.0.6.)

Présentation des outils de base

Si vous installez Bash sur Ubuntu sous Windows en vous référant à l'article de blog de Microsoft, l'environnement d'Ubuntu 14.04LTS sera inclus, mais il n'y a presque pas de programmes comme environnement de développement. Par conséquent, nous avons d'abord introduit les outils de base.

installation de git

sudo apt-get install git

installation de gcc, g ++

sudo apt-get install gcc
sudo apt-get install g++
$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Donc, gcc 4.8.4 est inclus.

faire l'installation

Installez make car il n'est pas inclus par défaut.

sudo apt-get install make

Build XGBoost et installation liée à Python

Maintenant que gcc, g ++, etc. ont été installés, compilez XGBoost.

XGBoost build

git clone --recursive https://github.com/dmlc/xgboost 
cd xgboost
make -j4

Dans l'environnement natif Windows 10 que j'ai essayé auparavant, j'ai eu beaucoup de problèmes jusqu'à ce que je puisse le construire, mais cette fois, la construction est terminée en un seul coup. Dans le répertoire xgboost / lib, il y avait libxgboost.a et libxgboost.so.

installation pyenv

Puisqu'il peut y avoir des cas où Python2 est encore nécessaire, créez un environnement pour pyenv et basculez entre Python2 et 3. (Référence) https://github.com/yyuu/pyenv#installation

Il est nécessaire d'ajouter des variables d'environnement liées à PATH, mais ici j'ai édité .bashrc en utilisant vi qui était inclus depuis le début.

installation miniconda

Sélectionnez python à installer à l'aide de pyenv. La liste des choix est présentée ci-dessous.

pyenv install -l

Ici, je ne sais pas si je dois sélectionner le système Anaconda (package complet) ou le système miniconda (package minimum), mais cette fois, j'ai choisi miniconda3-4.0.5.

pyenv install miniconda3-4.0.5

Après cela, installez les modules nécessaires au calcul numérique.

conda install numpy, scipy, scikit-learn
conda install ipython

Installation du package XGBoost Python

Cela aurait dû aller jusqu'à présent, mais à la fin, j'ai trébuché. Tout d'abord, lorsque vous tapez la commande conformément à la documentation XGBoost,

cd python-package; sudo python setup.py install

Une erreur se produit avec un message indiquant que diverses choses ne suffisent pas. Pour cela, python-setuptools est requis. (Il a été correctement écrit dans la documentation XGBoost.)

sudo apt-get install python-setuptools

Après cela, revenez à l'étape suivante et

sudo python setup.py install

Je pensais qu'il serait récupéré, mais une erreur liée à "commande non trouvée". La cause est une incompatibilité que la commande ci-dessus a tenté d'exécuter au niveau du système (autorité racine) alors que l'environnement de pyenv était maintenu au niveau de l'utilisateur. (Pyenv bascule entre plusieurs environnements en plaçant shim sous $ HOME / .pyenv par défaut (?).)

Par conséquent, réinstallez au niveau de l'utilisateur.

python setup.py install

Installation terminée avec succès. (J'ai pensé ...) Testez xgboost avec le code de distribution predict_first_ntree.py.

$ python predict_first_ntree.py
OMP: Error #100: Fatal system error detected.
OMP: System error #22: Invalid argument
Annuler(Vidage de base)

Ceci est le résultat d'une cause inconnue (inattendue). Le seul indice est le mot ** "OMP" **. Recherche sur le net, OMP = OpenMP (Open Multi-Processing). Celui qui semble être lié à cela est la bibliothèque de calcul numérique ** MKL ** (Math Kernel Library) faite par Intel, qui a été installée dans Miniconda. (Installé en tant que bibliothèque de prérequis pour Numpy et Scipy.)

MKL prend en charge les bibliothèques liées au calcul numérique telles que Numpy et Scipy, et améliore les performances, mais il faut noter que cela cause souvent des problèmes en termes de maintenance de l'environnement. Auparavant, dans un environnement Ubuntu (sans environnement virtuel) (je ne sais pas ce qui l'a déclenché), tout à coup, le Deep Learning Framework Theano et TensorFlow ont généré une erreur en même temps, et à la suite d'une enquête précipitée, elle a été causée par MKL. était là.

Cette fois, il semble que MKL n'a pas pu être pris en charge car il s'agit d'un environnement virtuel Ubuntu. J'ai remplacé les bibliothèques liées à MKL et l'ai essayé. Le remplacement est une commande pour installer nomkl. La bibliothèque MKL a été supprimée et openblas a été installé à sa place.

conda install nomkl

Après cela, predict_fist_ntree.py est exécuté, et c'est une démonstration d'un simple problème de classification binaire. (Au début, le code de distribution a été modifié.)

import os
# check os environment
if os.name == 'nt':  # Windows case ... add mingw lib path
    mingw_path = 'C:\\usr\\mingw-w64\\x86_64-5.4.0-win32-seh-rt_v5-rev0\\mingw64\\bin'
    os.environ['PATH'] = mingw_path + ';' + os.environ['PATH']
if os.name == 'posix':  # Linux case
    break

import numpy as np
import xgboost as xgb

# load data
dtrain = xgb.DMatrix('./data/agaricus.txt.train')
dtest = xgb.DMatrix('./data/agaricus.txt.test')
param = {'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic' }
watchlist  = [(dtest,'eval'), (dtrain,'train')]
num_round = 3
bst = xgb.train(param, dtrain, num_round, watchlist)
print ('start testing prediction from first n trees')
# predict using first 1 tree
label = dtest.get_label()
ypred1 = bst.predict(dtest, ntree_limit=1)
# by default, we predict using all the trees
ypred2 = bst.predict(dtest)
print ('error of ypred1=%f' % (np.sum((ypred1>0.5)!=label) /float(len(label))))
print ('error of ypred2=%f' % (np.sum((ypred2>0.5)!=label) /float(len(label))))

Voici les résultats du calcul.

$ python predict_first_ntree.py
[15:25:08] 6513x127 matrix with 143286 entries loaded from ./data/agaricus.txt.train
[15:25:08] 1611x127 matrix with 35442 entries loaded from ./data/agaricus.txt.test
[0]     eval-error:0.042831     train-error:0.046522
[1]     eval-error:0.021726     train-error:0.022263
[2]     eval-error:0.006207     train-error:0.007063
start testing prediction from first n trees
error of ypred1=0.042831
error of ypred2=0.006207

C'est donc devenu un fonctionnement normal. Des informations selon lesquelles cet environnement (Bash sur Ubuntu sous Windows) ne prend pas en charge MKL ont déjà été publiées sur Qiita. (J'ai appris plus tard ...)

(Article de Qiita - Pikkaman V) http://qiita.com/PikkamanV/items/d308927c395d6e687a6a (La source) https://scivision.co/anaconda-python-with-windows-subsystem-for-linux/

Résumé et impressions

Je viens de commencer à utiliser l'environnement de Bash sur Ubuntu sur ..., mais j'ai de grandes attentes pour cet environnement. Je suis désolé de ne pas soutenir MKL, mais avant --Windows + bibliothèque "que" + compilateur "ce" + outil "il" D'un tel état, cela semble être une grande amélioration.

De plus, étant donné que XGBoost lui-même vient d'être mis à niveau vers la ver.0.6 (en sautant la version.0.5), j'aimerais continuer à étudier et approfondir ma compréhension de XGBoost.

À ce stade, Docker pour Windows a également été publié, et l'environnement de programmation pour Windows (bien qu'il puisse avoir un objectif différent de celui de Bash sur ..) est devenu plus intéressant. (Bien que cela puisse être ennuyeux.)

(Ajout) Installation de R-package

{Devtools} est requis comme package prérequis. De plus, comme la bibliothèque C requise pour le package R {devtools} n'est pas incluse dans l'état initial de Bash sur Ubuntu, il était nécessaire d'installer environ deux packages avec sudo apt-get install.

Lorsque {devtools} est entré, lancez l'interpréteur R et

library(devtools)
install('xgboost/R-package')

Ça aurait dû être OK. (Puisque «xgboost / R-package» est un chemin relatif, il est nécessaire de spécifier le chemin de manière appropriée en fonction du répertoire courant.)

Le résultat de l'exécution du script ci-dessus est le suivant.

> library(devtools);install('R-package')
Installing xgboost
 URL 'https://cran.rstudio.com/src/contrib/Matrix_1.2-7.1.tar.gz'j'essaie
Content type 'application/x-gzip' length 1805890 bytes (1.7 MB)
==================================================
downloaded 1.7 MB

sh: 1: /bin/gtar: not found
sh: 1: /bin/gtar: not found
 system(cmd, intern = TRUE)Erreur dans:Une erreur s'est produite lors de l'exécution de l'instruction
Information additionnelle:Message d'alerte:
 utils::untar(src, exdir = target, compressed = "gzip")alors:
  ‘/bin/gtar -xf '/tmp/RtmplJiuv1/Matrix_1.2-7.1.tar.gz' -C '/tmp/RtmplJiuv1/devtools24847e356e71'’ returned error code 127

Il s'agit d'un message d'erreur indiquant que / bin / gtar n'existe pas lors du développement de Matrix_1.2-7.1.tar.gz. Bash sur Ubuntu a / bin / tar, donc j'aimerais que vous l'utilisiez, mais il semble que le script d'installation ne soit pas fait de cette façon. Vous pouvez créer un lien vers l'itinéraire, mais lorsque je l'ai recherché sur le net, il y avait une contre-mesure dans le débordement de pile.

Error in untar( ) while using R

Sys.setenv(TAR = '/bin/tar')

Après avoir défini ce qui précède sur l'interpréteur R, exécutez 'install (R-package)' pour terminer l'installation.

Site Web de référence

Recommended Posts

Exécutez XGBoost sur Bash sur Ubuntu sous Windows
Exécutez Jupyter sur Ubuntu sous Windows
Exécutez Tensorflow à partir de Jupyter Notebook sur Bash sur Ubuntu sous Windows
Construisez XGBoost sur Windows
Remarques sur l'utilisation de TensorFlow sur Bash sur Ubuntu sous Windows
Exécutez Openpose sur Python (Windows)
Faire fonctionner ubuntu sur VScode (Windows10)
Exécutez Jupyter Notebook sous Windows
Installation de Bash sur Ubuntu sous Windows, Ruby, Python, Jupyter, etc.
Supprimer Ubuntu installé sur une machine Windows 10
Installez et exécutez Dropbox sur Ubuntu 20.04
Installez xgboost (version python) sur Windows
Exécutez Tensorflow avec la prise en charge native de Windows
Exécutez SwitchBot avec Bleak sur Windows 10
Exécutez Yocto sur Ubuntu en utilisant QEMU.
Exécutez le GPU Radeon sous Windows sur QEMU / KVM
Exécutez le servo avec Python sur ESP32 (Windows)
Essayez d'utiliser Bash sur Windows 10 2 (installation de TensorFlow)
[Note] Procédures d'installation d'Ubuntu sur Windows 10
Exécutez bootgen sur Debian GNU / Linux, Ubuntu
Exécutez py.test sur Windows Anaconda et MinGW
Exécutez matplotlib sur un conteneur Windows Docker
Python sur Windows
Shebang sur Ubuntu 20.04
Exécutez PIFuHD dans l'environnement Windows + Anaconda + Git Bash
Installez et exécutez Python3.5 + NumPy + SciPy sur Windows 10
Mettez MicroPython sur Windows pour exécuter ESP32 sur Python
Exécutez yolov4 "pour le moment" dans Windows
Comment exécuter MeCab sur Ubuntu 18.04 LTS Python
Pylint sur Windows Atom
Linux (WSL) sous Windows
Installez Apache 2.4 sur Ubuntu 19.10 Eoan Ermine et exécutez CGI
Exécutez Django sur PythonAnywhere
Installez PySide2 sur Ubuntu
Exécutez mysqlclient sur Lambda
Utilisez pyvenv sous Windows
Installez JModelica sur Ubuntu
Anaconda sur le terminal Windows
Installez Anaconda sur Windows 10
Installez python sur Windows
Installez pycuda sur Windows10
Créez un environnement Open AI Gym avec Bash sur Windows 10
Exécutez OpenMVG sur Mac
Construire TensorFlow sous Windows
Essayez FEniCS sur Windows!
Installez pygraphviz sur Windows 10
Utilisez Ansible sur Windows
construire Python sur Ubuntu
Essayez Poerty sur Windows
Installez Python 3.3 sur Ubuntu 12.04
Installez Chainer 1.5.0 sur Windows
Installation de pyenv sur ubuntu 16.04
Utilisez QuTiP sur Windows
Installez Theano sur Ubuntu 12.04
Comment exécuter Django sur IIS sur un serveur Windows
Utiliser pip sur Windows
Installez angr sur Ubuntu 18.04
Installez pip / pip3 sur Ubuntu
Utilisez Xming pour lancer une application GUI Ubuntu sous Windows.
Installez Numpy dans virtualenv sur Windows