Анализът на чувствителността се използва за определяне на въздействието на колекция от независими фактори върху зависима променлива при определени условия.
Това е силен подход за определяне на това как продукцията на модела се влияе от входните данни на модела като цяло. В тази публикация ще дам бърз преглед на анализа на чувствителността с помощта на SALib, безплатен пакет за анализ на чувствителността на Python.
Числова стойност, известна като индекс на чувствителност, често представлява чувствителността на всеки вход. Има много видове индекси на чувствителност:
- Индекси от първи ред: изчислява приноса на един входен модел към изходната дисперсия.
- Индекси от втори ред: изчислява приноса на два входа на модела към изходната дисперсия.
- Индекс на общия ред: количествено определя приноса на входа на модела към изходната дисперсия, обхващайки както ефектите от първи ред (входът се колебае самостоятелно), така и всички взаимодействия от по-висок ред.
Какво е SALib?
SALib е базиран на Python с отворен код инструментариум за извършване на оценки на чувствителността. Той има отделен работен поток, което означава, че не взаимодейства директно с математическия или изчислителния модел. Вместо това, SALib отговаря за производството на входните данни на модела (чрез една от извадковите функции) и изчисляването на индексите на чувствителност (чрез една от функциите за анализ) от изходите на модела.
Типичният анализ на чувствителността на SALib се състои от четири стъпки:
- Определете входните данни (параметри) на модела и обхвата на извадката за всеки.
- За да създадете входни данни за модела, стартирайте примерната функция.
- Оценете модела, като използвате генерираните входни данни и запазете резултатите от модела.
- За да изчислите индексите на чувствителност, използвайте функцията за анализ на изходите.
Sobol, Morris и FAST са само някои от методите за анализ на чувствителността, предоставени от SALIb. Много фактори влияят кой подход е най-добър за дадено приложение, както ще видим по-късно. За момента имайте предвид, че трябва да използвате само две функции, проба и анализ, независимо от техниката, която използвате. Ще ви преведем през основен пример, за да илюстрираме как да използвате SALIb.
Пример за SALib – Анализ на чувствителността на Собол
В този пример ще разгледаме чувствителността на Sobol на функцията Ishigami, както е показано по-долу. Поради високата си нелинейност и немонотонност, функцията Ishigami се използва широко за оценка на методологиите за анализ на несигурността и чувствителността.
Стъпките са както следва:
1. Импортиране на SALib
Първата стъпка е да добавите необходимите библиотеки. Функциите за извадка и анализ на SALib се поддържат отделни в модулите на Python. Импортирането на сателитната проба и функциите за анализ на Sobol, например, е показано по-долу.
Ние също така използваме функцията Ishigami, която е налична като тестова функция в SALib. И накрая, ние импортираме NumPy, тъй като SALIb го използва за съхраняване на входове и изходи на модела в матрица.
2. Вход за модел
След това трябва да се дефинират входните данни на модела. Функцията Ishigami приема три входа: x1, x2 и x3. В SALib изграждаме dict, който определя броя на входовете, техните имена и ограниченията за всеки вход, както се вижда по-долу.
3. Генерирайте образци и модел
След това се генерират пробите. Трябва да създадем проби с помощта на семплера Saltelli, тъй като правим анализ на чувствителността на Sobol. В този случай стойностите на параметрите са NumPy матрица. Можем да наблюдаваме, че матрицата е 8000 на 3, като изпълним param values.shape. 8000 проби бяха създадени с семплера Saltelli. Семплерът Saltelli създава проби, където N е 1024 (параметърът, който предоставихме) и D е 3. (броя на входните данни на модела).
Както беше посочено по-горе, SALib не се занимава с оценка на математически или изчислителен модел. Ако моделът е написан на Python, обикновено ще преминете през всеки входен пример и ще оцените модела:
Примерите могат да бъдат записани в текстов файл, ако моделът не е разработен в Python:
Всеки ред в param values.txt представлява един входен модел. Изходът на модела трябва да бъде запазен в друг файл в подобен стил, с по един изход на всеки ред. След това изходите могат да бъдат заредени с:
В този пример ще използваме функцията Ishigami от SALib. Тези тестови функции могат да бъдат оценени, както следва:
4. Извършете анализ
Най-накрая можем да изчислим индексите на чувствителност след зареждане на резултатите от модела в Python. В този пример ще използваме sobol.analyze, за да изчислим първия, втория и индексите на общия ред.
Si е речник на Python с ключовете „S1“, „S2“, „ST“, „S1 conf“, „S2 conf“ и „ST conf“. Ключовете _conf съдържат свързаните доверителни интервали, които обикновено са настроени на 95 процента. За да изведете всички индекси, използвайте параметъра на ключовата дума print to console=True. Като алтернатива, както е илюстрирано по-долу, можем да отпечатаме отделните стойности от Si.
Можем да видим, че x1 и x2 имат чувствителност от първи ред, но x3 изглежда няма никакви въздействия от първи ред.
Ако индексите на общия ред са значително по-големи от индексите от първи ред, със сигурност се осъществяват взаимодействия от по-висок ред. Можем да видим тези взаимодействия от по-висок порядък, като разгледаме индексите от втори ред:
Можем да наблюдаваме, че x1 и x3 имат значителни взаимодействия. След това резултатът може да бъде трансформиран в Pandas DataFrame за по-нататъшно проучване.
5. Начертаване
За ваше удобство са осигурени основни съоръжения за картографиране. Функцията plot() произвежда обекти на оста matplotlib за последваща манипулация.
Заключение
SALib е сложен инструментариум за анализ на чувствителността. Други техники в SALib включват тест за амплитудна чувствителност на Фурие (FAST), метод на Морис и независима мярка от делта-момента. Въпреки че е библиотека на Python, тя е предназначена да работи с модели от всякакъв вид.
SALib предлага лесен за използване интерфейс на командния ред за създаване на входни данни на модела и оценка на изходите на модела. Разгледайте Документация на SALib за да научите повече.
Оставете коментар