敏感性分析用於確定在特定條件下獨立因素的集合對因變量的影響。
這是一種強有力的方法,用於確定模型的輸出如何受到模型輸入的一般影響。 在這篇文章中,我將簡要介紹使用 SALib(一個免費的 Python 敏感性分析包)進行敏感性分析。
一個稱為敏感度指數的數值經常代表每個輸入的敏感度。 敏感性指數有多種類型:
- 一階指數:計算單個模型輸入對輸出方差的貢獻。
- 二階指數:計算兩個模型輸入對輸出方差的貢獻。
- 全階指數:量化模型輸入對輸出方差的貢獻,包括一階效應(輸入單獨波動)和任何高階交互。
什麼是 SALib?
SALib 是一個基於 Python 的 開放源碼 進行敏感性評估的工具包。 它有一個獨立的工作流程,這意味著它不直接與數學或計算模型交互。 相反,SALib 負責生成模型輸入(通過樣本函數之一)並從模型輸出計算靈敏度指數(通過分析函數之一)。
典型的 SALib 敏感性分析包括四個步驟:
- 確定模型輸入(參數)和每個的樣本範圍。
- 要創建模型輸入,請運行示例函數。
- 使用生成的輸入評估模型並保存模型結果。
- 要計算靈敏度指數,請對輸出使用分析功能。
Sobol、Morris 和 FAST 只是 SALib 提供的一些敏感性分析方法。 許多因素會影響哪種方法最適合給定的應用程序,我們將在後面看到。 目前,請記住,無論您採用何種技術,您只需要使用採樣和分析這兩個功能。 我們將引導您通過一個基本示例來說明如何使用 SALib。
SALib 示例 – Sobol 的敏感性分析
在此示例中,我們將檢查 Ishigami 函數的 Sobol' 靈敏度,如下所示。 由於其高非線性和非單調性,Ishigami 函數被廣泛用於評估不確定性和靈敏度分析方法。
步驟如下:
1. 導入 SALib
第一步是添加所需的庫。 SALib 的示例和分析功能在 Python 模塊中保持不同。 例如,導入衛星樣本和 Sobol 分析函數如下所示。
我們還使用了 Ishigami 函數,該函數可作為 SALib 中的測試函數使用。 最後,我們導入 NumPy,因為 SALib 使用它將模型輸入和輸出存儲在矩陣中。
2.模型輸入
然後必須定義模型輸入。 Ishigami 函數接受三個輸入:x1、x2 和 x3。 在 SALib 中,我們構造了一個 dict 來指定輸入的數量、它們的名稱以及每個輸入的限制,如下所示。
3. 生成樣本和模型
然後生成樣本。 我們需要使用 Saltelli 採樣器創建樣本,因為我們正在進行 Sobol 靈敏度分析。 在這種情況下,參數值是一個 NumPy 矩陣。 我們可以通過運行 param values.shape 觀察到矩陣是 8000 x 3。 使用 Saltelli 採樣器創建了 8000 個樣本。 Saltelli 採樣器創建樣本,其中 N 為 1024(我們提供的參數),D 為 3。(模型輸入的數量)。
如前所述,SALib 不從事數學或計算模型評估。 如果模型是用 Python 編寫的,您通常會遍歷每個樣本輸入並評估模型:
如果模型不是用 Python 開發的,可以將示例保存到文本文件中:
param values.txt 中的每一行代表一個模型輸入。 模型的輸出應該以類似的樣式保存到另一個文件中,每一行都有一個輸出。 之後,輸出可能會加載:
在本例中,我們將使用 SALib 中的 Ishigami 函數。 這些測試功能可以評估如下:
4. 執行分析
將模型結果加載到 Python 後,我們終於可以計算靈敏度指數。 在這個例子中,我們將使用 sobol.analyze 來計算一階、二階和全階索引。
Si 是一個 Python 字典,具有鍵“S1”、“S2”、“ST”、“S1 conf”、“S2 conf”和“ST conf”。 _conf 鍵保存相關的置信區間,通常設置為 95%。 要輸出所有索引,請使用關鍵字參數 print 到 console=True。 或者,如下圖所示,我們可以從 Si 打印各個值。
我們可以看到 x1 和 x2 具有一階敏感性,但 x3 似乎沒有任何一階影響。
如果總階指數明顯大於一階指數,則肯定會發生高階相互作用。 我們可以通過查看二階索引來查看這些高階交互:
我們可以觀察到 x1 和 x3 具有顯著的交互作用。 之後,可以將結果轉換為 Pandas DataFrame 以供進一步研究。
5. 繪圖
為了您的方便,我們提供了基本的圖表設施。 plot() 函數為後續操作生成 matplotlib 軸對象。
結論
SALib 是一個複雜的敏感性分析工具包。 SALib 中的其他技術包括傅立葉幅度靈敏度測試 (FAST)、莫里斯方法和 Delta-Moment Independent Measure。 雖然它是一個 Python 庫,但它旨在與任何類型的模型一起操作。
SALib 提供了一個易於使用的命令行界面,用於創建模型輸入和評估模型輸出。 查看 SALib 文檔 了解更多信息。
發表評論