光譜定性分析流程與實(shí)現(xiàn)---基于OpenSA開源庫完成

系列文章目錄

“光晰本質(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)用效果。


建模流程.jpg

針對光譜分析流程所涉及的常見的訓(xùn)練樣本的劃分匹颤、光譜的預(yù)處理仅孩、波長篩選、校正模型算法建立了完整的算法庫印蓖,名為OpenSA(OpenSpectrumAnalysis)辽慕。整套算法庫的架構(gòu)如下所示。


OpenSA.jpg

樣本劃分模塊提供隨機(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")

采用的開源光譜如圖所示:


image.png

二珠洗、定性分析模型建立

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é)果如下:


image.png

可以看到采用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))
image.png

可以看到采用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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末主卫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鹃愤,更是在濱河造成了極大的恐慌簇搅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件软吐,死亡現(xiàn)場離奇詭異瘩将,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門姿现,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肠仪,“玉大人,你說我怎么就攤上這事备典∫炀桑” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵提佣,是天一觀的道長吮蛹。 經(jīng)常有香客問我,道長拌屏,這世上最難降的妖魔是什么潮针? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮槐壳,結(jié)果婚禮上然低,老公的妹妹穿的比我還像新娘。我一直安慰自己务唐,他們只是感情好雳攘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枫笛,像睡著了一般吨灭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刑巧,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天喧兄,我揣著相機(jī)與錄音,去河邊找鬼啊楚。 笑死吠冤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恭理。 我是一名探鬼主播拯辙,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颜价!你這毒婦竟也來了涯保?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤周伦,失蹤者是張志新(化名)和其女友劉穎夕春,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體专挪,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡及志,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年片排,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片速侈。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡划纽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锌畸,到底是詐尸還是另有隱情,我是刑警寧澤靖避,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布潭枣,位于F島的核電站,受9級特大地震影響幻捏,放射性物質(zhì)發(fā)生泄漏盆犁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一篡九、第九天 我趴在偏房一處隱蔽的房頂上張望谐岁。 院中可真熱鬧,春花似錦榛臼、人聲如沸伊佃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽航揉。三九已至,卻和暖如春金刁,著一層夾襖步出監(jiān)牢的瞬間帅涂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工尤蛮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媳友,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓产捞,卻偏偏與公主長得像醇锚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子轧葛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容