windows下在Java中使用xgboost 详细配置教程

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

1. 资源准备

1.1 最新的xgboost4.07 版还没有windows下的编译工程,所以建议大家暂时先使用前一个版本的,官网上已经没有下载地址,下面是下载地址:http://blog.csdn.net/eddy_zheng/article/details/50496194

1.2 java 环境等自行搭建,jre建议使用1.7。使用VS2013 编译(xgboost JAVA编译,需使用2013及以上版本). 下载安装 maven,配置路径.

2. 编译

这里编译参考前面的博文,比较详细,依次编译完成。http://blog.csdn.net/eddy_zheng/article/details/50184563 ;4个,依次都生成一下,这里记得在工程里面选 release X64 Or X32 ~

3. 打包

3.1 为了减少以后的导包麻烦,就将 ./xgboost-master/java/ 中的 xgboost4j 与 xgboost4j-demo 和二为一; 本想这里整理好供大家下载,想想还是写出来,供大家参考,以后可以自行更换版本~

进入以下路径:D:\xgboost-master\java\xgboost4j-demo\src\main\java\org\dmlc\xgboost4j ;复制 demo 整个文件夹,到以下文件夹中:
D:\xgboost-master\java\xgboost4j\src\main\java\org\dmlc\xgboost4j; 将 demo 文件夹 copy 进来;完成之后如下:

这里写图片描述

3.2 改写 xgboost-master\java\xgboost4j中的pom.xml

将以下代码,添加进pom.xml 文件:

<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>

以下为添加完成之后的文件,可以对比下添加的位置,以后能自行添加。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.dmlc</groupId>
    <artifactId>xgboost4j</artifactId>
    <version>1.1</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    <reporting>
        <plugins>
            <plugin>          
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.10.3</version>
            </plugin>
        </plugins>
    </reporting>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
</project>

3.3 copy java xgboost 依赖库

进入到以下路径 :D:\xgboost-master\java (以自己的安装路径为准),双击:create_wrap.bat 。成功之后,就会将你之前编译生成的 xgboostjavawrapper.dll 文件拷贝到 D:\xgboost-master\java\xgboost4j\src\main\resources\lib 下,如果刚才那个 .bat 文件没有执行成功,可手动将文件拷贝进去,自己根据路径创建文件夹就可以了。( ,应该是不需要的)

3.4 mvn package

cmd 命令行,切换到以下路径,D:\xgboost-master\java\xgboost4j ,执行命令:mvn package

这里写图片描述

4 测试

打包成功就会在 D:\xgboost-master\java\xgboost4j\target 处生成 : xgboost4j-1.1.jar 导入你的工程就可以工作了。这里还要提一下,xgboost 还依赖了两个 jar 包,在下面的工程里可以看到,自行下载添加。

具体测试步骤:找时间再写吧,眼花了,贴几个图,大家对照着看下应该没问题(图片有点大,看不清的可以 Ctri + 鼠标滑轮,放大点看,^_^!)。

这里写图片描述

测试代码在下面贴着:


import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.dmlc.xgboost4j.Booster;
import org.dmlc.xgboost4j.DMatrix;
import org.dmlc.xgboost4j.util.Trainer;

import org.dmlc.xgboost4j.demo.util.CustomEval;
import org.dmlc.xgboost4j.demo.util.Params;
import org.dmlc.xgboost4j.util.XGBoostError;


public class PredictFirstNtree {   
    public static void main(String[] args) throws XGBoostError {
        // load file from text file, also binary buffer generated by xgboost4j
        DMatrix trainMat = new DMatrix("D:/xgboost-master/demo/data/agaricus.txt.train");
        DMatrix testMat = new DMatrix("D:/xgboost-master/demo/data/agaricus.txt.test");

        //specify parameters
        Params param = new Params() {
            {
                put("eta", 0.001);
                put("max_depth", 3);
                put("eval_metric","auc");
                put("silent", 1);
                put("objective", "binary:logistic");
            }
        };

        //specify watchList
        List<Map.Entry<String, DMatrix>> watchs =  new ArrayList<>();
        watchs.add(new AbstractMap.SimpleEntry<>("train", trainMat));
        watchs.add(new AbstractMap.SimpleEntry<>("test", testMat));

        //train a booster
        int round = 1002;
        Booster booster = Trainer.train(param, trainMat, round, watchs, null, null);

        //predict use 1 tree
        float[][] predicts1 = booster.predict(testMat, false, 1);
        //by default all trees are used to do predict
        float[][] predicts2 = booster.predict(testMat);

        //use a simple evaluation class to check error result
        CustomEval eval = new CustomEval();
        System.out.println("error of predicts1: " + eval.eval(predicts1, testMat));
        System.out.println("error of predicts2: " + eval.eval(predicts2, testMat));
    }
}

猜你喜欢

转载自blog.csdn.net/Eddy_zheng/article/details/51049435
今日推荐