这里写自定义目录标题

  • 绘制近红外光谱特征选择筛选出的变量分布图(特征波长图)
    • 用python绘制变量分布图
    • 用MATLAB绘制特征波长图

绘制近红外光谱特征选择筛选出的变量分布图(特征波长图)

在近红外光谱数据分析建模过程中,特征选择是其中关键的一步。特征选择的原因是全部样本信息(全波长)中存在冗余信息,使得有些有效信息被抵消同时也无法突出有用的信息,这样建立的分析模型准确度和可靠性不高且计算量较大,特征选择就是最大限度的筛选出光谱数据中的有效信息,使得筛选出来的这些信息可以代表全部的样本信息,这样筛选出来的就是特征波长。写论文时需要画出筛选出来的特征波长图,去看特征波长落在哪个波段,从而查找相应作用的官能团。本文分别用python和matlab来实现两种不同的变量分布图。此处说明一下,特征波长和特征变量是同样的意思,只是叫法不一样。

用python绘制变量分布图

直接上代码:

import matplotlib.pyplot as plt
import pandas as pd# 添加文件名即可,最多九个name = ['full_wave.csv','cor_wavelength.csv','wave_noclass.csv','wave_2class.csv','wave_3class.csv']new_name = ['全波长','相关系数变量选择','不分类','分为2类','分为3类']# name = ['Full_NMir.csv',
#         'NMir_index.csv']
# new_name = ['近—中红外融合全波长',
#             '近—中红外融合UDPFS波长']sign = ['+', 'x', '*', 'o', 'v', '^', '_', 'h', '.']  # 符号
gap = 5  # 间隔plt.figure(figsize=(7.5,6))
ax = plt.axes()
ax.spines['top'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
for i in range(len(name)):y = pd.read_csv(name[i])y = y.values.T[0]y = y[::gap]plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签# plt.scatter([i + 1000 for i in y], [i+1] * len(y), marker=sign[i], s=30, label=name[i][:-4])plt.scatter([i + 1000 for i in y], [i+1] * len(y), marker=sign[i], s=30, label=new_name[i])
plt.scatter([1000]*605, [len(name)+1]*605, alpha=0)
plt.scatter([1000]*605, [len(name)+2]*605, alpha=0)
plt.scatter([1000]*605, [0]*605, alpha=0)   # 0坐标空行# plt.legend()
plt.legend(loc="upper center",ncol=5,fontsize=11)    #生成legend
# plt.legend(ncol=5)
plt.yticks([])
plt.show()

将获得的特征波长向量(向量即为筛选出的变量序列)保存为.csv文件,name后是文件名称,最多可以输入九个文件(一般是三四个就可以,不会超过九个),new name是显示的图例。我的结果如下:![在这里插入图片描述](https://img-blog.csdnimg.cn/c24dbd0d57cf471896257ea40b87c6dc.png?x-oss-process=image/wa
可以自行修改代码(改变字的大小函数plt.legend中的fontsize,图的比例plt.figure中的figsize等)。

用MATLAB绘制特征波长图

直接上代码:

%%载入数据%%画近红外光谱图[row,lie] = size(data_re);  X = data_re;figure(1)     for j =1:rowi =1:lie;xlabel('Wavelength/nm');ylabel('Abosorbance');title('近中红外光谱图');plot(i+2800,X(j,:),'y');hold onend
%%画特征波长图
% Y = data_re(:,NMir_index-860);
%     for j =1:1
%         i =1:lie;
%         xlabel('Wavelength/nm');
%         ylabel('Abosorbance');
%         title('近中红外光谱图');
%         plot(NMir_index+1940,Y(j,:),'*r');
%         hold on
%     end%%变量分布区H_pa = patch([2834,2834,3120,3120],[-0.05,0.4,0.4,-0.05],[.6 .6 .8]);%%%特征波长所在阴影部分set(H_pa,'EdgeColor',[.8 .8 .8],'EdgeAlpha',0.5,'FaceAlpha',0.5)H_pa1 = patch([3572,3572,3878,3878],[-0.05,0.4,0.4,-0.05],[.6 .6 .8]);set(H_pa1,'EdgeColor',[.8 .8 .8],'EdgeAlpha',0.5,'FaceAlpha',0.5) H_pa2 = patch([4150,4150,4698,4698],[-0.05,0.4,0.4,-0.05],[.6 .6 .8]);set(H_pa2,'EdgeColor',[.8 .8 .8],'EdgeAlpha',0.5,'FaceAlpha',0.5) 

由于数据是正在发表的一篇论文,就不在此处展示。首先需要画出预处理之后的光谱图,在此基础上,查找特征,特征落在哪一段就在哪一段画出阴影。最后整体显示出来就是下文的图形。
在此,需要说明一下阴影图的画法。
网上有patch这个函数。是这么写的:patch([X down left, X top left, X top right, X down right], [Y left down, Y left up, Y rigth up, Y rigth down],[阴影颜色])。这里简单说一下patch后的第一个[]里放的是左边最低的X对应的值,左边最高的X对应的值,右边最高的对应X的值,右边最低的对应X的值。因为问我画的是矩形,所以前后两数字都相同。后面类似。
这里分享个寻找XY值的小窍门
先画出特征波长图,查看特征波长大致落在几个区间。查看存放特征波长值的文件,找出每个区间的最左最右面的值,即为我们画图时用的X对应的左右值。

欢迎交流!
2021-12-6

绘制近红外光谱特征选择筛选出的变量分布图相关推荐

  1. RFE筛选出的特征变量竟然是Boruta的4倍之多

    机器学习第21篇 - 特征递归消除RFE算法 理论 RFE算法实战 rfe函数有 4 个关键参数: x: 训练集数值矩阵 (不包含响应值或分类信息) y: 响应值或分类信息向量 sizes: 一个整数 ...

  2. 近红外光谱特征选择、特征提取区别及稀疏表示

    近红外光谱分析技术已经在很多领域得到了广泛应用,但是实际分析过程中所采集的数据都是高维.复杂的数据信号,如何从复杂的信号中选择出建模所需要的基本数据就是所谓的近红外光谱数据特征筛选或特征选择,特征提取 ...

  3. python distplot 图_Python可视化23 |seaborn.distplot公司单变量分布图(直方图|核密度图),23seaborndistplot...

    本文介绍seaborn.distplot绘制 单变量分布图 : 之前文章介绍的 核密度图 (kernel density estimate (KDE))以及 二者结合图. 目录 本文内容概要 直方图 ...

  4. 风控建模十二:数据淘金——如何从APP数据中挖掘出有效变量

    风控建模十二:数据淘金--如何从APP数据中挖掘出有效变量 1.常识知识 2.个例分析 3.分布排查 智能手机的诞生改变了人类的生活方式,智能手机所承载的功能日臻完善.强大,人们在衣.食.住.行.工作 ...

  5. 【python文件操作之利用os筛选出想要的数据集】

    [python文件操作之利用os筛选出想要的数据集] 文章目录 [python文件操作之利用os筛选出想要的数据集] 前言 一.OS模块是什么? 二.使用步骤 1.引入库 2.读入数据 3.观察数据, ...

  6. java服务器面试_如何面试筛选出动手能力强的Java服务端程序员

    最近要招一名中高级程序员, 有位同学的面试表现我们几位面试官都觉得不错: 思维很活跃, 知识面也还挺广, 尤其是主动提及最近还在研究Disruptor这个高性能框架, 并说出了基本实现原理, 表现出喜 ...

  7. 【运筹学】人工变量法总结 ( 人工变量法解的分析 | 标准型变换 | 构造单位阵 | 目标函数引入 M | 计算检验数 | 选择入基变量 | 选择出基变量 | 中心元变换 | ) ★★

    文章目录 一.人工变量法及解的分析 二.案例 三.线性规划标准型变换 四.人工变量法构造单位阵 五.初始单纯形表 六.初始单纯形表 : 计算非基变量检验数 七.初始单纯形表 : 最优解判定 八.初始单 ...

  8. 【运筹学】单纯形法总结 ( 单纯形法原理 | 单纯形法流程 | 单纯形表 | 计算检验数 | 最优解判定 | 入基变量 | 出基变量 | 方程组同解变换 ) ★★★

    文章目录 一.单纯形法原理 二.单纯形法流程 三.单纯形法案例一 1.线性规划示例 2.转化标准形式 3.查找初始基可行解 4.初始基可行解的最优解判定 5.第一次迭代 : 入基与出基变量选择 6.第 ...

  9. 【运筹学】线性规划 人工变量法 ( 人工变量法案例 | 第二次迭代 | 中心元变换 | 检验数计算 | 最优解判定 | 选择入基变量 | 选择出基变量 )

    文章目录 一.第二次迭代 : 中心元变换 二.第二次迭代 : 单纯形表 三.第二次迭代 : 计算检验数 四.第二次迭代 : 最优解判定 五.第二次迭代 : 选择入基变量 六.第二次迭代 : 选择出基变 ...

最新文章

  1. 用上Pytorch Lightning的这六招,深度学习pipeline提速10倍!
  2. Juniper EX3400堆叠配置 + 链路捆绑配置
  3. 【arduino】最近在搞的项目,ESP32常用模块连接原理图连线图。TTGO-T8-ESP32arduino开发注意事项...
  4. 拼音输入法功能大比拼
  5. LeetCode 707. 设计链表(List)
  6. YUM更换源(1)--yum找不到安装包
  7. 用IDEA进行git版本控制
  8. steam 经典 android,游戏玩家必备 Android版Steam试用
  9. 微型计算机原理与接口技术 试卷,微机原理与接口技术试卷和答案4套.doc
  10. python实现快递地址分拣程序(代码有详细注释)
  11. 计算机软考答题卡填涂格式,2020年计算机软件水平考试答题卡填涂技巧
  12. html5图片自动滑动,超简单的图片左右切换滑动
  13. 成都中忻嘉业:抖音怎样查看直播回放
  14. 树的结点?结点的度?
  15. 奥林匹克杯,授予中国人民!
  16. 金三银四求职季,前端面试题小梳理(HTML、CSS、JS)
  17. 7-Zip压缩包如何删除密码
  18. 蓝桥杯-算法提高-Cowboys
  19. [译] TypeScript 3.0: unknown 类型
  20. 沪嘉杭共建G60科创走廊

热门文章

  1. [恒泰医软] windows gettext.py raise ValueError('invalid token in plural form:%s' % value)
  2. linux mdadm 源码,Linux下软RAID管理工具mdadm的基本操作实践
  3. React Js 微信支付 简单封装
  4. 从“存数”到“用数”,知识图谱为智慧城市注入新动能
  5. pyqt中QSettings保存上次设置信息
  6. 哈工大机器学习复习笔记(一)
  7. SkyForm CMP管理异构资源池案例
  8. D. Jon and Orbs (概率dp)
  9. Elasticsearch 权限控制
  10. 打击“老赖” 大数据可以更给力