系列文章目录

近红外光谱分析技术属于交叉领域,需要化学、计算机科学、生物科学等多领域的合作。为此,在(北京邮电大学杨辉华老师团队)指导下,近期准备开源传统的PLS,SVM,ANN,RF等经典算和SG,MSC,一阶导,二阶导等预处理以及GA等波长选择算法以及CNN、AE等最新深度学习算法,以帮助其他专业的更容易建立具有良好预测能力和鲁棒性的近红外光谱模型。


文章目录

  • 系列文章目录
  • 前言
  • 一、数据来源
  • 二、代码解读
    • 1.读取数据并显示光谱曲线
    • 2.划分训练集和测试集
    • 3.PCA降维并显示
    • 4.建立校正模型(数据拟合)
    • 5.模型评估(使用R2、RMSE、MSE指标)
    • 6.绘制拟合差异曲线图
  • 总结

前言

NIRS是介于可见光和中红外光之间的电磁波,其波长范围为(1100∼2526 nm。 由于近红外光谱区与有机分子中含氢基团(OH、NH、CH、SH)振动的合频和 各级倍频的吸收区一致,通过扫描样品的近红外光谱,可以得到样品中有机分子含氢 基团的特征信息,常被作为获取样本信息的一种有效的载体。 基于NIRS的检测方法具有方便、高效、准确、成本低、可现场检测、不 破坏样品等优势,被广泛应用于各类检测领域。但 近红外光谱存在谱带宽、重叠较严重、吸收信号弱、信息解析复杂等问题,与常用的 化学分析方法不同,仅能作为一种间接测量方法,无法直接分析出被测样本的含量或 类别,它依赖于化学计量学方法,在样品待测属性值与近红外光谱数据之间建立一个 关联模型(或称校正模型,Calibration Model) ,再通过模型对未知样品的近红外光谱 进行预测来得到各性质成分的预测值。现有近红外建模方法主要为经典建模 (预处理+波长筛选进行特征降维和突出,再通过pls、svm算法进行建模)以及深度学习方法(端到端的建模,对预处理、波长选择等依赖性很低)


本篇主要讲述基于基于PCA和PLS的近红外光谱建模方法,

一、数据来源

使用开源玉米数据集,共80个样本,下载地址
图片如下:

二、代码解读

1.读取数据并显示光谱曲线

#载入数据
data_path = './/data//m5.csv' #数据
label_path = './/data//label.csv' #标签(反射率)data = np.loadtxt(open(data_path, 'rb'), dtype=np.float64, delimiter=',', skiprows=0)
label = np.loadtxt(open(label_path, 'rb'), dtype=np.float64, delimiter=',', skiprows=0)# 绘制原始后图片
plt.figure(500)
x_col = np.linspace(0,len(data[0,:]),len(data[0,:]))  #数组逆序
y_col = np.transpose(data)
plt.plot(x_col, y_col)
plt.xlabel("Wavenumber(nm)")
plt.ylabel("Absorbance")
plt.title("The spectrum of the corn dataset",fontweight= "semibold",fontsize='x-large')
plt.savefig('.//Result//MSC.png')
plt.show()

2.划分训练集和测试集

#随机划分数据集
x_data = np.array(data)
y_data = np.array(label[:,2])test_ratio = 0.2
X_train,X_test,y_train,y_test = train_test_split(x_data,y_data,test_size=test_ratio,shuffle=True,random_state=2)

3.PCA降维并显示

#载入数据
#PCA降维到10个维度,测试该数据最好
pca=PCA(n_components=10)  #只保留2个特征
pca.fit(X_train)
X_train_reduction = pca.transform(X_train)
X_test_reduction = pca.transform(X_test)# PCA降维后图片绘制
plt.figure(100)
plt.scatter(X_train_reduction[:, 0], X_train_reduction[:, 1],marker='o')
plt.xlabel("Wavenumber(nm)")
plt.ylabel("Absorbance")
plt.title("The  PCA for corn dataset",fontweight= "semibold",fontsize='large')
plt.savefig('.//Result//PCA.png')
plt.show()

PCA降维后的数据分布:

4.建立校正模型(数据拟合)

#pls预测
pls2 = PLSRegression(n_components=3)
pls2.fit(X_train_reduction, y_train)train_pred = pls2.predict(X_train_reduction)
pred = pls2.predict(X_test_reduction)

5.模型评估(使用R2、RMSE、MSE指标)

#计算R2
train_R2 = r2_score(train_pred,y_train)
R2 = r2_score(y_test,pred) #Y_true, Pred
print('训练R2:{}'.format(train_R2))
print('测试R2:{}'.format(R2))
#计算MSE
print('********************')
x_MSE = mean_squared_error(train_pred,y_train)
t_MSE = mean_squared_error(y_test,pred)
print('训练MSE:{}'.format(x_MSE))
print('测试MSE:{}'.format(t_MSE))#计算RMSE
print('********************')
print('测试RMSE:{}'.format(sqrt(x_MSE)))
print('训练RMSE:{}'.format(sqrt(t_MSE)))

模型评估结果:

6.绘制拟合差异曲线图

#绘制拟合图片
plt.figure(figsize=(6,4))
x_col = np.linspace(0,16,16)  #数组逆序
# y = [0,10,20,30,40,50,60,70,80]
# x_col = X_test
y_test = np.transpose(y_test)
ax = plt.gca()
ax.set_xlim(0,16)
ax.set_ylim(6,11)
# plt.yticks(y)
plt.scatter(x_col, y_test,label='Ture', color='blue')
plt.plot(x_col, pred,label='predict', marker='D',color='red')
plt.legend(loc='best')
plt.xlabel("测试集的样本")
plt.ylabel("样本的值")
plt.title("The Result of corn dataset",fontweight= "semibold",fontsize='large')
plt.savefig('.//Result//Reslut.png')
plt.show()

结果如图:

若有问题,可以相互学习,探讨

总结

完整代码可从获得GitHub仓库
代码仅供学术使用,如有问题,联系方式:QQ:1427950662,微信:Fu_siry

基于PCA和PLS的近红外光谱建模相关推荐

  1. 基于PCA的特征提取和两级匹配的激光雷达SLAM(翻译)

    同时定位和建图(SLAM)在机器人领域已经研究了几十年,其中光探测和测距(LiDAR)由于其可直接.准确和可靠的三维测量而广泛应用于各种应用领域.然而,当在退化场景中运行时,LiDAR SLAM的性能 ...

  2. 基于PCA与LDA的数据降维实践

    基于PCA与LDA的数据降维实践 描述 数据降维(Dimension Reduction)是降低数据冗余.消除噪音数据的干扰.提取有效特征.提升模型的效率和准确性的有效途径, PCA(主成分分析)和L ...

  3. 六个最佳的软件工程实践(基于构件的体系结构、可视化建模)

    昨天图文介绍了迭代化开发和需求管理,今天我们介绍基于构件的体系结构和可视化建模.基于构件的体系结构是软件开发中最体现创造力的地方,可以通过"修建桥梁"来理解为什么要贯彻基于构件的体 ...

  4. 基于MDA的移动应用开发建模及实现

    基于MDA的移动应用开发建模及实现 http://www.doc88.com/p-579399842974.html 转载于:https://www.cnblogs.com/sqlite3/archi ...

  5. 基于PCA方法的ORL人脸识别及Python代码实现

    基于PCA方法的ORL人脸识别及Python代码实现 PCA算法 方案设计 代码实现 结果分析 参考文献 PCA的理论知识已经有很多博客做了清晰的解释,主要概括为找到投影的面使得类间误差最大,转化为找 ...

  6. 文献记录(part73)--基于 PCA 的信息压缩 : 从一阶到高阶

    学习笔记,仅供参考,有错必究 关键词:主成分分析 , 信息压缩 , 高阶张量 , Tucker 分解 , 各向异性 文章目录 基于 PCA 的信息压缩 : 从一阶到高阶 摘要 引言 从一阶PCA到高阶 ...

  7. pca图像压缩python_基于PCA的图像降维及图像重构

    1 PCA简述 PCA(Principal Component Analysis)主成分分析算法,在进行图像识别以及高维度数据降维处理中有很强的应用性,算法主要通过计算选择特征值较大的特征向量来对原始 ...

  8. 利用计算机绘制地质图的思路和方法,基于平面地质图的三维地质建模方法研究...

    摘要: 平面地质图综合了地质野外勘察工作成果与地质专家知识,揭示了地区的岩石.地层和地质构造等信息,是人们了解区域地质最易获取和最直接的数据源.研究基于平面地质图的三维地质体建模方法,能够有效地解决缺 ...

  9. 模式识别与机器学习(作业5)基于PCA–LDA的人脸识别

    基于PCA–LDA的人脸识别 ORC数据集 提取码: cggh 本次的实验是在模式识别与机器学习(作业4),PCA降维的基础上加入了线性判别分析,对维度进行了进一步的降低. 1. 导入数据 一共有40 ...

最新文章

  1. python内置排序算法_2021-01-05 排序算法(Python语言实现)
  2. Understanding your audience
  3. 银行的相关计算机知识,银行计算机基础知识试题及答案正式版.doc
  4. 指数分布java_python-numpy-指数分布实例详解
  5. [JavaWeb-MySQL]多表查询练习
  6. 11个小技巧,玩转Spring!
  7. java关于贪吃蛇的源代码_完整的贪吃蛇(蛇吃蛋)Java源代码
  8. sem_wait sem_post信号量操作进本函数
  9. python怎么使用预训练的模型_Tensorflow加载Vgg预训练模型操作
  10. C++包含头文件尖括号和双引号的区别
  11. handlersocket mysql_[原创]MongoDB、HandlerSocket和MySQL性能测试及其结果分析
  12. Unity学习01-unity物体移动三种方式
  13. stm32F407的串口6卡死问题
  14. 如何提升客户的信任,实现与客户的连接,带动业绩的转变
  15. PDF补丁丁( PDFPatcher.)
  16. linux 去掉终端控制符,Linux终端显示控制字符
  17. RTL8723BU移植
  18. hadoop 历史版本下载
  19. 程序阅读_全面详解LTE_MATLAB建模仿真与实现_自学笔记(2)OFDM_程序阅读
  20. Go-在linux系统安装配置

热门文章

  1. 笑面的学校日常(14)最近一次更新2017 04 06
  2. 电路设计学习一:DAC/ADC原理
  3. 天龙八部服务端数据传递
  4. ValueError('need at least one array to stack') ValueError: need at least one array to stac
  5. 统一配置中心对比介绍
  6. [转]用“树莓派“打造一款智能音响(也许有点智障。。。)
  7. 清华大学2019计算机录取分数线,清华大学2019录取分数线是多少
  8. 【李开复】成功、自信、快乐(三)
  9. Effective STL之算法
  10. 绘制地图格网时,如何只显示度的数值