记某年某日写某篇论文

2019年7月14日

在给某老师完善篇论文,本来只是打算无偿帮帮忙(学生党思维o(∩_∩)o ),毕竟举手之劳而已,后来给了我费用,再后来要在论文上加上我的名字。其实我一开始也没想那么多,但前期做了大量打杂工作。

这篇论文简单说就是设计一个分类器对文章进行分类,分类结果有两种,是或否。已经设计好了相应的算法以及实现好了的系统。而我的工作就是利用那个系统进行结果验证,验证这个算法的实现效果。

算法有两个参数 \( p_{1 \times 3} \), \( w_{4 \times 1} \),对应每篇文章,可以得到一个系数矩阵 \( C_{3 \times 4} \) ,然后对于每篇文章,可以得到一个分数

$$score = p_{1 \times 3} \cdot C_{3 \times 4} \cdot w_{4 \times 1} $$

根据分数进行分类。我要做的,就是修改 \( p \) , \( w \) 参数的值,利用系统跑出来的得分,统计分类结果。前期花了大量时间在修改参数,跑结果上,因为这个跑起来非常花时间,有几千条记录。后来一想,大多数时间,都是花在 \( C_{3 \times 4} \) 这个矩阵的计算上,那么,为什么不能把它缓存下来呢?抱着这个想法找了工程师,跟他提了这个需求,给我回了“嗯”,就没有后文了。好想拿到系统的源码自己加。唉,我也不想催。

再仔细一想,这个矩阵就只有12个系数,那我可以跑12组数据,利用这12组数据,代入形成一个方程组,解这个方程组就行了。后来,利用 MATLAB,真的很方便地解这个方程。并且经过验证,完美的与系统计算出来的分数相匹配(中间似乎损失一点点精度,不过这个误差太小,可以忽略)。

MATLAB 解方程组很简单。在这里用 \( A \backslash b \) ,其中 \( A \) 是计算出来的 \( 12 \times 12 \) 的方程组矩阵, \( b \) 是方程组的常数项。

有了 \( C_{3 \times 4} \) 这个系数矩阵,一开始写了一个最暴力的方法去找最优参数:

 Min = 0.001;
 Max = 500; % 参数设置的最大
 Diff = 0.1; % 每次迭代增量
 best_p = [0, 0, 0];
 best_w = [0, 0, 0, 0]';
 for a=Min:Diff:Max
     for b=Min:Diff:Max
         for c=Min:Diff:Max
             for d=Min:Diff:Max
                 for e=Min:Diff:Max
                     for f=Min:Diff:Max
                         for g=Min:Diff:Max
                             p  = [a, b, c]; % 参数p
                             w = [d, e, f, g]'; % 参数w
                             score = compute_score(p, C, w);
                             % 记录...
                         end
                     end
                 end
             end
         end
     end
 end

七个循环,这个相当于指数级了,而且MATLAB跑起来又慢,有生之年自己的笔记本跑不出来系列。期间还想了能不能并行计算,用GPU?能不能去要点超算资源来计算?当然,不管如何,仍然无法解决算法高复杂度的问题。

最后,还是把遗传算法派上用场了。遗传算法是智能算法的一种,可以用来求最优化问题,而且这还只是单目标最优化问题,有七个参数。我以为有生之年不会再接触这些算法,没想到还是用上了。不得不说,利用MATLAB的 GA 工具箱来求解这个问题也很方便。而遗传算法主要还是相关参数的选取,如何选取合适的参数来跑遗传算法,这是个问题,不过也没有确定的选取方法,都是通过一定的实验,或根据先验信息选定一组初始参数,然后根据当前求解情况动态地调参。

参考:

  • https://ww2.mathworks.cn/discovery/genetic-algorithm.html
  • http://www.omegaxyz.com/2018/07/13/matlab-ga-tool

打赏 赞(0)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注