赞
踩
目录
如果文章对你有帮助,请帮我点个赞,谢谢 : )
测试环境:
环境最好与我相同,如果不同会有一定问题,比如说boost1.83有的header已经弃用,但是shark3.0还在用
shark库依赖boost库所以在装shark库之前需要先安装boost
其中有三种方式,最推荐直接官网exe安装:选择1.73.0_b1(如果是exe安装后缀是b1,省去了编译过程!本地编译会有很多坑)
Boost C++ Libraries - Browse /boost-binaries at SourceForge.netboost官网:Boost C++ Libraries - Browse /boost-binaries at SourceForge.net
随便装到你想要的地方后配置boost环境变量:
- D:\software\boost_1_73_0_b1_rc1
- D:\software\boost_1_73_0_b1_rc1\lib64-msvc-14.2
做个测试看看能不能运行:
win10下boost安装的三种方式,及cmake编译boost代码例子_windows安装boost-CSDN博客
自己总结的一些安装问题,如果你非要本地编译
boost编译bootstrap.bat失败,无法打开ctype.h,cl找不到问题汇总-CSDN博客
shark3.0:Downloads — Shark 3.0a documentation
随便解压cmake到任何地方,因为它只是一个生成工程的工具,shark3.0也是随便放在哪里,在cmake中选择 browse source(就是shark解压的位置),browse build随便,我就直接在D:\software\Shark-3.0.0中自己创建了一个build文件夹了(这里出现红色界面是因为我已经有内容在build里了,正常这里不显示这个红色界面)
点击cinfigue、finish
应该不会有错误的,然后点击Generate,就会在刚刚设置的路径下生成shark的VS工程文件了。
打开 shark.sln 文件后,生成shark_debug.lib
如果报错:
1)error C2065: “M_PI”: 未声明的标识符"
VS2017 C++ 程序报错“error C2065: “M_PI”: 未声明的标识符"_m_pi 未声明的标识符-CSDN博客
2)make_iterator_range 找不到标识符。
在错误行前面添加boost::
3)shark::size()对重载函数调用不明确
在错误处添加shark::
4)cout 不是std成员
添加头文件#include <iostream>
5)运行时缺少xxxxx.dll
找到这个dll文件,将其拷贝到项目Debug文件内
如图所示在项目配置shark的附加包含目录、附加库目录、附加依赖项
以下是测试代码:
- #include <shark/Data/Csv.h>
- #include <shark/Algorithms/Trainers/LDA.h>
- using namespace shark;
-
-
- #include <iostream>
- using namespace std;
-
-
- int main(int argc, char** argv) {
- //create a Dataset from the file "quickstartData"
- if (argc < 2) {
- cerr << "usage: " << argv[0] << " (filename)" << endl;
- exit(EXIT_FAILURE);
- }
-
- ClassificationDataset data;
- try {
- importCSV(data, argv[1], LAST_COLUMN, ' ');
- }
- catch (...) {
- cerr << "unable to read data from file " << argv[1] << endl;
- exit(EXIT_FAILURE);
- }
-
- //create a test and training partition of the data
- ClassificationDataset test = splitAtElement(data, static_cast<std::size_t>(0.8 * data.numberOfElements()));
-
- //create a classifier for the problem
- LinearClassifier<> classifier;
- //create the lda trainer
- LDA lda;
- //train the classifier using the training portion of the Data
- lda.train(classifier, data);
-
-
- //now use the test data to evaluate the model
- //loop over all points of the test set
- //be aware that in this example a single point consists of an input and a label
- //this code here is just for illustration purposes
- unsigned int correct = 0;
- BOOST_FOREACH(ClassificationDataset::element_reference point, test.elements()) {
- unsigned int result = classifier(point.input);
- if (result == point.label) {
- correct++;
- }
- }
-
- //print results
- cout << "RESULTS: " << endl;
- cout << "========\n" << endl;
- cout << "test data size: " << test.numberOfElements() << endl;
- cout << "correct classification: " << correct << endl;
- cout << "error rate: " << 1.0 - double(correct) / test.numberOfElements() << endl;
- }
运行程序后,如果正确的话,会得到如下的结果。
这样就说明你的开发库没有问题了。后面就可以跟着官方上面的例子一步一步的学习这个强大的机器学习库了!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。