1.近红外建模平台
这是我这六个月一直在做的工作,之前公司的近红外建模平台确实太老了,功能做的很全,但是耦合比较严重,很难加入新的算法进去。刚开始我是准备重构那个软件的,重构了几天后,发现这个任务有点困难,所以我就寻思着自己来写一个建模软件,也当是提高自己的业务能力吧。
1.语言的选型
刚开始来算法部这边就是因为水质建模算法和算法部的同事认识了,在他的介绍下就转了过来。水质的算法是使用python写的,基本上就是通过python脚本调用的方式来完成建模和预测业务的。所以刚开始是想选用pyqt作为界面框架来写这个建模软件的,写了一段时间发现,python确实难以打包,在软件部署方面实在太麻烦了。pyqt本身也比较大,打包后整个压缩包都有上百兆了,另外教程都是针对C++端的qt,学起来有点吃力,还有就是pyqt对于商用要收费,对于我们公司这种白嫖党来说,肯定是不太愿意的。所以我就一直在.Net平台上寻找有没有类似scikit的库,先后调研了ml.net,accord.net之后,最终选定了accord.net作为我们的算法库,里面有各种各样的机器学习的库,方便搭建建模平台。
2.理论指导
近红外建模平台主要业务逻辑是参考之前的老版软件的,其中的算法原理主要是看褚小立老师的《化学计量学方法与分子光谱分析技术》这本书,这本书主要就是介绍光谱分析中的数学知识和经典算法知识,可以感觉作者在此领域上确实认真在研究。主要介绍整个建模过程中的所有知识,我用到的也是其中最基本的一些算法知识,在工程上,简单的办法意味着能解决更普适的问题。
3.这个软件我从数据库设计,建模流程优化,预处理算法组合,建模算法优化等所有功能都是我自己想的,然后再开发出来,给我们研究人员使用,最后不断反馈,优化建模软件。这也是敏捷开发里面一个重要原则,先把软件原型开发出来,这样后续的迭代才有了基础。
4.这里面我也是用到了一些混合编程的知识,numpy.net就是一个典型代表,基本上就是开发一套numpy的.net接口,这里面用到的pythonnet库很是牛逼,后续net和python的所有业务互调都可以基于该库,算法集成也将简单很多。
2.其他工作
除了建模平台的开发,还做了一些其他的小的支持工作。使用tdd将python上的小波平滑算法移植到C#上,通过对关键方法创建单元测试确保移植过程中的准确性。tdd是个有效提高开发质量的好方法,但是用的人确实很少。天天去追求新技术,真不如把这些经典软件开发流程整明白。
另外还写了一篇论文,主要就是介绍自己建模平台的工作,投了两个期刊都说我的文章创新不够,搜了一下发现早在十年前人家就在写类似的文章了。想发论文看来还是得写一个具体的一个案例,这样更容易有创新点。
3.后期计划
最近这半年通过了对建模软件的开发思考还有tdd模式的实践,自己的软件开发技能有了很大的提升。以前对于敏捷开发,tdd只是书本上的理解,现在是实践中的理解。对于C#语言的深层挖掘少了些许,够用就行哦。
从自己做这光谱算法的研究来看,在各行各业均有应用,还是可以在这个领域深耕下去。后续半年的学习计划是:
1.继续学习光谱的最新应用知识和光学基础知识,理解光谱处理基本算法,学习光谱处理高级算法。另外还需继续学习算法基础知识,对一些基础算法知识要熟练掌握,将自己的算法技能有效提升。
2.继续学习python和C#相关知识,从kaggle上学习最新的算法领域的知识,规范!