网格搜索 C++实现 机器暴力参数优化
来源:互联网 发布:单片机协议栈开发 编辑:程序博客网 时间:2024/06/09 19:43
网格搜索 C++实现 机器暴力参数优化:
参数设置和实现原理见下图,后面附带C++源码(个人原创),帮助解决C++程序参数优化问题。
一般放那跑一夜,最好的参数就出来了,哈哈,还是比较方便滴。
有问题记得留言讨论。。
class JrGrid{public:JrGrid() {/* --搜索初始化设置-- */m_para_num = 3; // 参数个数m_iter = 10;// 迭代次数m_parts = 5;// 每次迭代的搜索分片数m_upper = new double[m_para_num];m_lower = new double[m_para_num];set_lower_and_upper(0, 10, 15); // 设置第1个参数的下限是10 上限是15set_lower_and_upper(1, 1, 5000);// 设置第2个参数的下限是1 上限是5000set_lower_and_upper(2, 5, 10); // 设置第3个参数的下限是5 上限是10}private:/* --将你的代码写到这个函数里,从para中获取参数,返回其得分(默认选择得分高的参数组合)-- */double validate(double *para);public:~JrGrid() { delete m_upper; delete m_lower; delete m_score; delete m_paras; }/* --调用此函数启动网格搜索-- */void do_grid_search() {int size = (int)pow(m_parts + 1, m_para_num);m_score = new double[size];m_paras = new double[size*m_para_num];for (int i = 0; i < m_iter; i++) {std::cout <<"GS ITER "<<i+1<<" -->"<<std::endl;double *para = new double[m_para_num];double *delta = new double[m_para_num];for (int j = 0; j < m_para_num; j++) {delta[j] = (m_upper[j] - m_lower[j]) / m_parts;para[j] = m_lower[j];}m_count_para = 0;m_count_part = 0;m_count_s = 0;iter_search2(para, delta, 0);double set = -9999999.0;int locate = 0;for (int j = 0; j < size; j++) {if (m_score[j] > set) {locate = j;set = m_score[j];}}for (int j = 0; j < m_para_num; j++) {std::cout <<"para"<<j+1<<"="<< m_paras[locate*m_para_num + j]<<",";double next_lower = m_paras[locate*m_para_num + j] - delta[j];if (next_lower > m_lower[j]) {m_lower[j] = next_lower;}double next_upper = m_paras[locate*m_para_num + j] + delta[j];if (next_upper < m_upper[j]) {m_upper[j] = next_upper;}}std::cout <<"score="<< set << std::endl;delete para;delete delta;}}private:void iter_search2(double *para, double *delta, int layer){if (layer == m_para_num) {m_score[m_count_s] = validate(para);for (int j = 0; j < m_para_num; j++) {m_paras[m_count_s*m_para_num + j] = para[j];}m_count_s++;}else {for (int i = 0; i <= m_parts; i++) {double *spara = new double[m_para_num];memcpy(spara, para, m_para_num*sizeof(double));spara[layer] += i*delta[layer];iter_search2(spara, delta, layer + 1);delete spara;}}}void set_lower_and_upper(int para_i, double low, double up) { m_lower[para_i] = low; m_upper[para_i] = up; }private:int m_para_num;int m_iter;int m_parts;double *m_upper;double *m_lower;int m_count_para;int m_count_part;int m_count_s;double *m_score;double *m_paras;};
0 0
- 网格搜索 C++实现 机器暴力参数优化
- 机器学习 libsvm交叉验证与网格搜索(参数选择)
- 机器学习-sklearn网格搜索法
- 搜索商品,实现网格布局
- 超参数搜索之网格搜索与并行搜索
- 机器学习精简教程之九——用scikit-learn的网格搜索快速找到最优模型参数
- 【机器学习实战】网格搜索--贝叶斯新闻文本分类器调优
- Python机器学习库sklearn网格搜索与交叉验证
- libsvm交叉验证与网格搜索(参数选择)
- libsvm交叉验证与网格搜索(参数选择)
- libsvm交叉验证与网格搜索(参数选择)
- libsvm交叉验证与网格搜索(参数选择)
- 暴力搜索
- 暴力搜索
- 暴力搜索
- 暴力搜索中的强度优化练习之Codeforces:Two Circles
- 为什么贝叶斯优化比网格搜索和随机搜索更高效呢?
- Sklearn-GridSearchCV网格搜索
- Qt中mouseMoveEvent和mousePressEvent实现鼠标滑动换label颜色
- 关于如何显示tomcat未显示的启动异常
- Linux格式化并重新加载磁盘
- 关于inputStream.available()方法获取下载文件的总大小
- C++Socket编程步骤
- 网格搜索 C++实现 机器暴力参数优化
- 正则表达式随笔
- C++ string测试
- poj 2479 Maximum sum(简单dp,最大连续和拓展)
- [Android Camera]关于Android Camera Orientation的一些总结
- IaaS, PaaS和SaaS
- Js的四舍五入和进一(保留两位小数)
- hibernate常见面试题
- android视频播放器