安装步骤
因为我们的工具箱是基于C++写的,所以要将package下载下来,然后使用cMake编译成C++文件,最后使用MATLAB和C++编译成的dll文件进行混编,接下来介绍一下安装步骤。
步骤一:编译生成 xgboost.dll
- 上Github原地址下载package,注意这里面套娃的要单独下载,然后将里面的文件在复制到xgboost-master对应的文件夹里
图1. Github的package
- 将上述的包下载好以后,再下载cMake进行编译,注意在cMake的安装过程中,最后一步勾选第2个选项,即 “Add all users to the Path”,不然在后面的编译中,会产生找不见cmake选项。
- 进入我们的cmd,然后逐步运行以下命令
然后我么可以看到多了一个lib文件夹,里面有 xgboost.dll文件cd /d f:
cd 浏览器下载/xgboost
mkdir build
cd build
cmake .. -G"Visual Studio 15 2017" -A x64
cmake --build . --config Release
图2. lib文件夹步骤二:下载c_api.h文件
在上述的Github地址中找到这个文件,然后下载下来,把 c_api.h改名为 xgboost.h,然后把这个文件添加到之前的 lib文件夹中。xgboost.h
图3. lib文件夹中的内容步骤三:运行xgboost_install.m
我们要下载wheel文件,下载地址。然后将xgboost_install.m
中的地址改成自己文件的地址,之后运行。xgboostWheel.zip
图4. xgboost_install.m中的文件地址运行例子
在xgboost_train.m
文件中有对应的例子,我们运行一下
注意:这时可能会产生错误Xtrain = [25,93,43;5,90,98;66,73,49;69,36,40;51,5,99]; ytrain = [0,1,1,0,0]';
params = struct;
params.booster = 'gbtree';
params.objective = 'binary:logistic';
params.eta = 0.1;
params.min_child_weight = 1;
params.subsample = 1; % 0.9
params.colsample_bytree = 1;
params.num_parallel_tree = 1;
params.max_depth = 5;
num_iters = 3;
model = xgboost_train(Xtrain,ytrain,params,num_iters,'None',[]);
Yhat = xgboost_test(Xtrain,model,0);
figure; plot(Yhat)
figure; scatter(Yhat,ytrain + 0.1*rand(length(ytrain),1)); grid on
错误使用 loadlibrary 无法对输入文件进行预处理。 预处理器生成的输出为: 系统找不到指定的路径。
- 进入我们的cmd,然后逐步运行以下命令
关于这个错误是因为我们没有给MATLAB找到C++编译器,我们就下载一下MinGW编译器,然后配置一下。
配置C++编译器
下载好MinGW文件后,在系统的环境变量->path中添加上路径mingw.7z
查看MinGW配置教程。
图5. 配置环境变量
在MATLAB窗口输入命令
setenv('MW_MINGW64_LOC', 'D:\MingWin')
mex -setup
图6. 配置
运行结果
我们选择好编译器以后,就可以使用例子然后运行,看一下结果,代码如上,结果如图所示。
图7. 运行结果
例子2
bedroom = load('C:\Users\*****\Desktop\数据集\bedroom.mat');
bedroom = bedroom.('bedroom');
forest = load('C:\Users\*****\Desktop\数据集\forest.mat');
forest = forest.('MITforest');
label = load('C:\Users\*****\Desktop\数据集\labelset.mat');
label = label.('lableset');
label(11:end) = 0;
summaryData = [bedroom; forest];
[N, D] = size(summaryData);
randVector = randperm(N);
xTrain = summaryData(randVector(1:15), :);
yTrain = label(randVector(1:15));
xTest = summaryData(randVector(16:end), :);
yTest = label(randVector(16:end));
params = struct;
params.booster = 'gbtree';
params.objective = 'binary:logistic';
params.eta = 0.1;
params.min_child_weight = 1;
params.subsample = 1; % 0.9
params.colsample_bytree = 1;
params.num_parallel_tree = 1;
params.max_depth = 5;
num_iters = 3;
model = xgboost_train(xTrain, yTrain, params, num_iters, 'None', []);
yHat = xgboost_test(xTest, model,0);
smallPosition = find(yHat <= 0.5); yHat(smallPosition) = 0;
bigPosition = find(yHat > 0.5); yHat(bigPosition) = 1;
error = numel(find(yHat ~= yTest))/numel(yTest);
fprintf('错误率是%f', error);
错误率是0.000000