xgboost_matlab.zip MathWork地址

安装步骤

因为我们的工具箱是基于C++写的,所以要将package下载下来,然后使用cMake编译成C++文件,最后使用MATLAB和C++编译成的dll文件进行混编,接下来介绍一下安装步骤。

步骤一:编译生成 xgboost.dll

    1. Github原地址下载package,注意这里面套娃的要单独下载,然后将里面的文件在复制到xgboost-master对应的文件夹里

image.png
图1. Github的package

    1. 将上述的包下载好以后,再下载cMake进行编译,注意在cMake的安装过程中,最后一步勾选第2个选项,即 “Add all users to the Path”,不然在后面的编译中,会产生找不见cmake选项。
    1. 进入我们的cmd,然后逐步运行以下命令
      1. cd /d f:
      2. cd 浏览器下载/xgboost
      3. mkdir build
      4. cd build
      5. cmake .. -G"Visual Studio 15 2017" -A x64
      6. cmake --build . --config Release
      然后我么可以看到多了一个lib文件夹,里面有 xgboost.dll文件
      image.png
      图2. lib文件夹

      步骤二:下载c_api.h文件

      在上述的Github地址中找到这个文件,然后下载下来,把 c_api.h改名为 xgboost.h,然后把这个文件添加到之前的 lib文件夹中。xgboost.h
      image.png
      图3. lib文件夹中的内容

      步骤三:运行xgboost_install.m

      我们要下载wheel文件,下载地址。然后将 xgboost_install.m中的地址改成自己文件的地址,之后运行。xgboostWheel.zip
      image.png
      图4. xgboost_install.m中的文件地址

      运行例子

      xgboost_train.m文件中有对应的例子,我们运行一下
      1. Xtrain = [25,93,43;5,90,98;66,73,49;69,36,40;51,5,99]; ytrain = [0,1,1,0,0]';
      2. params = struct;
      3. params.booster = 'gbtree';
      4. params.objective = 'binary:logistic';
      5. params.eta = 0.1;
      6. params.min_child_weight = 1;
      7. params.subsample = 1; % 0.9
      8. params.colsample_bytree = 1;
      9. params.num_parallel_tree = 1;
      10. params.max_depth = 5;
      11. num_iters = 3;
      12. model = xgboost_train(Xtrain,ytrain,params,num_iters,'None',[]);
      13. Yhat = xgboost_test(Xtrain,model,0);
      14. figure; plot(Yhat)
      15. figure; scatter(Yhat,ytrain + 0.1*rand(length(ytrain),1)); grid on
      注意:这时可能会产生错误

      错误使用 loadlibrary 无法对输入文件进行预处理。 预处理器生成的输出为: 系统找不到指定的路径。

关于这个错误是因为我们没有给MATLAB找到C++编译器,我们就下载一下MinGW编译器,然后配置一下。

配置C++编译器

下载好MinGW文件后,在系统的环境变量->path中添加上路径mingw.7z
查看MinGW配置教程
image.png
图5. 配置环境变量
在MATLAB窗口输入命令

  1. setenv('MW_MINGW64_LOC', 'D:\MingWin')
  2. mex -setup

image.png 图6. 配置

选择C++,然后就编译成功了。

运行结果

我们选择好编译器以后,就可以使用例子然后运行,看一下结果,代码如上,结果如图所示。
image.png
图7. 运行结果

例子2

  1. bedroom = load('C:\Users\*****\Desktop\数据集\bedroom.mat');
  2. bedroom = bedroom.('bedroom');
  3. forest = load('C:\Users\*****\Desktop\数据集\forest.mat');
  4. forest = forest.('MITforest');
  5. label = load('C:\Users\*****\Desktop\数据集\labelset.mat');
  6. label = label.('lableset');
  7. label(11:end) = 0;
  8. summaryData = [bedroom; forest];
  9. [N, D] = size(summaryData);
  10. randVector = randperm(N);
  11. xTrain = summaryData(randVector(1:15), :);
  12. yTrain = label(randVector(1:15));
  13. xTest = summaryData(randVector(16:end), :);
  14. yTest = label(randVector(16:end));
  15. params = struct;
  16. params.booster = 'gbtree';
  17. params.objective = 'binary:logistic';
  18. params.eta = 0.1;
  19. params.min_child_weight = 1;
  20. params.subsample = 1; % 0.9
  21. params.colsample_bytree = 1;
  22. params.num_parallel_tree = 1;
  23. params.max_depth = 5;
  24. num_iters = 3;
  25. model = xgboost_train(xTrain, yTrain, params, num_iters, 'None', []);
  26. yHat = xgboost_test(xTest, model,0);
  27. smallPosition = find(yHat <= 0.5); yHat(smallPosition) = 0;
  28. bigPosition = find(yHat > 0.5); yHat(bigPosition) = 1;
  29. error = numel(find(yHat ~= yTest))/numel(yTest);
  30. fprintf('错误率是%f', error);

错误率是0.000000