以前试着玩了下shootout的药物有效浓度和NIR光谱的数据集。
一块钱买中巴:用python进行近红外光谱解析zhuanlan.zhihu.com结果如下
![4f02e518f498a95c068e77aa31534c45.png](https://i-blog.csdnimg.cn/blog_migrate/5eb4f4448875f3f674e551868b161122.png)
用线性的手法岭回归比非线性的随机森林的结果要好很多。这可能是因为数据集不是很大吧。然后使用了自带的基于随机森林的特征量重要度来筛选特征值的模组来去掉了一些特征值,重新建回归模型,结果随机森林好了一些,但是岭回归反而变差了一点,整体上好像没啥改进。
在网上找了一篇论文Application of genetic algorithm–PLS for feature selection in spectral data sets
https://onlinelibrary.wiley.com/doi/abs/10.1002/1099-128X%28200009/12%2914%3A5/6%3C643%3A%3AAID-CEM621%3E3.0.CO%3B2-Eonlinelibrary.wiley.com这是一个2000年左右的老文。使用的是genetic algorithm–PLS(GAPLS)来解析的波长数据。估计是同样的有高维度和数据集不大的限制吧,用的是线性回归手法的偏最小二乘法。这个文章挺有意思的,有对用机器学习的方法解析NIR数据的一些简单介绍。这篇文章使用了大豆粉,汽油,间苯二酚,不知名食品,小麦五组近红外光谱的数据集。结果还可以而且清楚地选择出来了相关的频段。
![38545cd269651f5e1149e9efabd30e1a.png](https://i-blog.csdnimg.cn/blog_migrate/b8d90658d36da421f17ad2647900a1ab.jpeg)
原来论文里的代码使用matlab实装的。Python的话遗传算法一般用deap这个包。老实说感觉遗传算法还挺复杂的。关于遗传算法的文章挺多就不详细介绍了。优化算法都是这样的,有一个函数,里面有一堆参数,找到一个最好的参数组合使得函数输出达到最大或最小
导入shootout数据集并进行处理
import urllib.request
import pandas as pd
import numpy as np
import rando