系列文章目錄
“光晰本質(zhì)端蛆,譜見不同”,光譜作為物質(zhì)的指紋酥泛,被廣泛應(yīng)用于成分分析中今豆。伴隨微型光譜儀/光譜成像儀的發(fā)展與普及嫌拣,基于光譜的分析技術(shù)將不只停留于工業(yè)和實(shí)驗(yàn)室,即將走入生活呆躲,實(shí)現(xiàn)萬物感知异逐,見微知著。本系列文章致力于光譜分析技術(shù)的科普和應(yīng)用
前言
典型的光譜分析模型(以近紅外光譜作為示意插掂,可見光灰瞻、中遠(yuǎn)紅外、熒光辅甥、拉曼酝润、高光譜等分析流程亦相似)建立流程如下所示,在建立過程中璃弄,需要使用算法對訓(xùn)練樣本進(jìn)行選擇要销,然后使用預(yù)處理算法對光譜進(jìn)行預(yù)處理,或?qū)庾V的特征進(jìn)行提取夏块,再構(gòu)建校正模型實(shí)現(xiàn)定量分析疏咐,最后針對不同測量儀器或環(huán)境,進(jìn)行模型轉(zhuǎn)移或傳遞拨扶。因此訓(xùn)練樣本的選擇凳鬓、光譜的預(yù)處理、波長篩選患民、校正模型缩举、模型傳遞以及上述算法的參數(shù)都影響著模型的應(yīng)用效果。
針對光譜分析流程所涉及的常見的訓(xùn)練樣本的劃分匹颤、光譜的預(yù)處理仅孩、波長篩選、校正模型算法建立了完整的算法庫印蓖,名為OpenSA(OpenSpectrumAnalysis)辽慕。整套算法庫的架構(gòu)如下所示。
樣本劃分模塊提供隨機(jī)劃分赦肃、SPXY劃分溅蛉、KS劃分三種數(shù)據(jù)集劃分方法,光譜預(yù)處理模塊提供常見光譜預(yù)處理他宛,波長篩選模塊提供Spa船侧、Cars、Lars厅各、Uve镜撩、Pca等特征降維方法,分析模塊由光譜相似度計(jì)算队塘、聚類袁梗、分類(定性分析)宜鸯、回歸(定量分析)構(gòu)建,光譜相似度子模塊計(jì)算提供SAM遮怜、SID淋袖、MSSIM、MPSNR等相似計(jì)算方法奈泪,聚類子模塊提供KMeans适贸、FCM等聚類方法,分類子模塊提供ANN涝桅、SVM拜姿、PLS_DA、RF等經(jīng)典化學(xué)計(jì)量學(xué)方法冯遂,亦提供CNN蕊肥、AE、Transformer等前沿深度學(xué)習(xí)方法蛤肌,回歸子模塊提供ANN壁却、SVR、PLS等經(jīng)典化學(xué)計(jì)量學(xué)定量分析方法裸准,亦提供CNN展东、AE、Transformer等前沿深度學(xué)習(xí)定量分析方法炒俱。模型評估模塊提供常見的評價(jià)指標(biāo)盐肃,用于模型評估。自動(dòng)參數(shù)優(yōu)化模塊用于自動(dòng)進(jìn)行最佳的模型設(shè)置參數(shù)尋找权悟,提供網(wǎng)格搜索砸王、遺傳算法、貝葉斯概率三種最優(yōu)參數(shù)尋找方法峦阁∏澹可視化模塊提供全程的分析可視化,可為科研繪圖榔昔,模型選擇提供視覺信息驹闰。可通過幾行代碼快速實(shí)現(xiàn)完整的光譜分析及應(yīng)用(注: 自動(dòng)參數(shù)優(yōu)化模塊和可視化模塊暫不開源撒会,等畢業(yè)后再說)
本篇針對OpenSA的定性分析模塊進(jìn)行演示疮方,展示如何快速的構(gòu)建光譜定性分析模型。
一茧彤、光譜數(shù)據(jù)讀入
提供一個(gè)為公開定性分析數(shù)據(jù)集,本章僅以公開定量分析數(shù)據(jù)集作為演示疆栏,該數(shù)據(jù)集為4分類的開源藥品的數(shù)據(jù)集曾掂。
1.1 光譜數(shù)據(jù)讀入惫谤。
# 分別使用一個(gè)回歸、一個(gè)分類的公開數(shù)據(jù)集做為example
def LoadNirtest(type):
if type == "Rgs":
CDataPath1 = './/Data//Rgs//Cdata1.csv'
VDataPath1 = './/Data//Rgs//Vdata1.csv'
TDataPath1 = './/Data//Rgs//Tdata1.csv'
Cdata1 = np.loadtxt(open(CDataPath1, 'rb'), dtype=np.float64, delimiter=',', skiprows=0)
Vdata1 = np.loadtxt(open(VDataPath1, 'rb'), dtype=np.float64, delimiter=',', skiprows=0)
Tdata1 = np.loadtxt(open(TDataPath1, 'rb'), dtype=np.float64, delimiter=',', skiprows=0)
Nirdata1 = np.concatenate((Cdata1, Vdata1))
Nirdata = np.concatenate((Nirdata1, Tdata1))
data = Nirdata[:, :-4]
label = Nirdata[:, -1]
elif type == "Cls":
path = './/Data//Cls//table.csv'
Nirdata = np.loadtxt(open(path, 'rb'), dtype=np.float64, delimiter=',', skiprows=0)
data = Nirdata[:, :-1]
label = Nirdata[:, -1]
return data, label
1.2 光譜可視化
#載入原始數(shù)據(jù)并可視化
data1, label1 = LoadNirtest('Cls')
plotspc(data1, "raw specturm")
采用的開源光譜如圖所示:
二珠洗、定性分析模型建立
2.1 光譜定性分析模塊
提供常見的定性分析模型溜歪,包括ANN、SVM许蓖、PLS_DA蝴猪、RF、CNN膊爪、SAE等等自阱,同時(shí)將定性分析模型與預(yù)處理模塊,波長篩選模塊米酬,數(shù)據(jù)集劃分模塊進(jìn)行了封裝沛豌,僅需要一行代碼即可快速建立定性分析模型。
"""
-*- coding: utf-8 -*-
@Time :2022/04/12 17:10
@Author : Pengyou FU
@blogs : https://blog.csdn.net/Echo_Code?spm=1000.2115.3001.5343
@github : https://github.com/FuSiry/OpenSA
@WeChat : Fu_siry
@License:Apache-2.0 license
"""
from Classification.ClassicCls import ANN, SVM, PLS_DA, RF
from Classification.CNN import CNN
from Classification.SAE import SAE
def QualitativeAnalysis(model, X_train, X_test, y_train, y_test):
if model == "PLS_DA":
acc = PLS_DA(X_train, X_test, y_train, y_test)
elif model == "ANN":
acc = ANN(X_train, X_test, y_train, y_test)
elif model == "SVM":
acc = SVM(X_train, X_test, y_train, y_test)
elif model == "RF":
acc = RF(X_train, X_test, y_train, y_test)
elif model == "CNN":
acc = CNN(X_train, X_test, y_train, y_test, 16, 160, 4)
elif model == "SAE":
acc = SAE(X_train, X_test, y_train, y_test)
else:
print("no this model of QuantitativeAnalysis")
return acc
2 .2 光譜定性模塊的使用實(shí)列
在example.py文件中赃额,提供了光譜定性分析模塊的使用方法加派,具體如下,僅需要一行代碼即可實(shí)現(xiàn)所有常見的光譜定性分析跳芳。
示意1:利用OpenSA實(shí)現(xiàn)SNV+RF的光譜定性分析
## 載入原始數(shù)據(jù)并可視化
data1, label1 = LoadNirtest('Cls')
plotspc(data1, "raw specturm")
# 光譜定性分析演示
# 示意1: 預(yù)處理算法:SNV, 波長篩選算法: 不使用, 全波長建模, 數(shù)據(jù)集劃分:隨機(jī)劃分, 定性分析模型: RF
acc = SpectralQualitativeAnalysis(data1, label1, "SNV", "None", "random", "RF")
print("The acc:{} of result!".format(acc))
結(jié)果如下:
可以看到采用SNV預(yù)處理和RF建立定性分析模型后芍锦,預(yù)測準(zhǔn)確率在72.58%左右
示意2:利用OpenSA實(shí)現(xiàn)MSC預(yù)處理+Lars波長篩選+SVM的光譜定性分析
## 載入原始數(shù)據(jù)并可視化
data1, label1 = LoadNirtest('Cls')
#plotspc(data1, "raw specturm")
# 光譜定性分析演示
# 示意1: 預(yù)處理算法:MSC , 波長篩選算法: Lars, 數(shù)據(jù)集劃分:隨機(jī)劃分, 定性分析模型: PLS_DA
acc = SpectralQualitativeAnalysis(data1, label1, "MSC", "Lars", "random", "PLS_DA")
print("The acc:{} of result!".format(acc))
可以看到采用MSC預(yù)處理+Lars波長篩選+SVM建立定性分析模型后,預(yù)測準(zhǔn)確率在75.80%左右
總結(jié)
利用OpenSA可以非常簡單的實(shí)現(xiàn)對光譜的定性分析飞盆,完整代碼可從獲得GitHub倉庫 如果對您有用娄琉,請點(diǎn)贊!
代碼現(xiàn)僅供學(xué)術(shù)使用桨啃,若對您的學(xué)術(shù)研究有幫助车胡,請引用本人的論文,同時(shí)照瘾,未經(jīng)許可不得用于商業(yè)化應(yīng)用匈棘,歡迎大家繼續(xù)補(bǔ)充OpenSA中所涉及到的算法,如有問題析命,微信:Fu_siry