Statistik regularisasi masalah terbalik yang salah untuk mereka. Turchin (bagian 1)

Halo, Habr! Hari ini kami ingin memberi tahu Anda apa yang dilakukan laboratorium metode eksperimen fisika nuklir , bagian dari JetBrains Research .

Di mana JetBrains dan di mana fisika nuklir, Anda bertanya. Kami sepakat atas dasar cinta untuk Kotlin, meskipun dalam posting ini kami tidak akan membicarakannya. Kelompok kami berfokus pada pengembangan analisis data, pemodelan, dan perangkat lunak penulisan untuk para ilmuwan, dan karena itu berfokus pada kerja sama dan berbagi pengetahuan dengan perusahaan IT.

Dalam artikel ini kami ingin berbicara tentang metode regularisasi statistik yang kami mempopulerkan , yang diusulkan oleh V.F Turchin pada 70-an abad XX, dan implementasinya dalam bentuk kode dalam Python dan Julia.

Presentasi akan sangat rinci, sehingga mereka yang jelas tentang masalah terbalik dapat langsung menuju ke contoh dan membaca teori dalam artikel ini .


Terjadinya masalah: mengapa harus ada yang mengatur sama sekali?


Jika cukup untuk diabaikan, pengukuran apa pun dalam percobaan dapat dijelaskan sebagai berikut: ada perangkat tertentu yang menangkap spektrum atau sinyal dari suatu proses dan menunjukkan beberapa angka sesuai dengan hasil pengukuran. Tugas kita sebagai peneliti, melihat angka-angka ini dan mengetahui struktur perangkat, adalah untuk memahami apa spektrum atau sinyal yang diukur. Yaitu, di muka apa yang disebut masalah terbalik . Jika Anda membayangkan ini secara matematis, kita mendapatkan persamaan ini (yang, kebetulan, disebut persamaan Fredholm dari jenis pertama ):

f(y)=∫abdxK(x,y)Ο†(x)

Bahkan, persamaan ini menjelaskan hal berikut: perangkat pengukur kami diwakili di sini oleh fungsi perangkat kerasnya K(x,y)yang bekerja pada spektrum yang dipelajari atau sinyal input lainnya φmenyebabkan peneliti mengamati sinyal output f(y). Tujuan peneliti adalah mengembalikan sinyalφ oleh terkenal f(y)dan K(x,y). Anda juga dapat merumuskan ungkapan ini dalam bentuk matriks, mengganti fungsi dengan vektor dan matriks:

fm=Kmnφn

Tampaknya rekonstruksi sinyal bukan tugas yang sulit, karena persamaan Fredholm dan sistem persamaan linear (bahkan overdetermined) memiliki solusi yang tepat. Jadi mari kita coba. Biarkan sinyal yang diukur digambarkan sebagai jumlah dari dua gausses:

Ο†(x)=2βˆ—N(2,0.16)+N(4,0.04)

Sebagai instrumen, kami mengambil integrator yang paling sederhana - sebuah matriks yang menerjemahkan sinyal kami ke jumlah kumulatif menggunakan fungsi Heaviside:

Kmn=ΞΈ(xmβˆ’yn)

Jenis sinyal yang diukur dan perangkat kami, serta hasil pengukuran ditampilkan pada grafik.

Penting bahwa setiap pengukuran nyata memiliki kesalahan, jadi kami akan sedikit merusak hasil kami dengan menambahkan noise normal, memberikan kesalahan pengukuran lima persen.

Kami akan mengembalikan sinyal dengan metode kuadrat terkecil:

Ο†=(KTK)βˆ’1KTf

Dan sebagai hasilnya kita dapatkan:

Sebenarnya, pada ini kita bisa menyelesaikan artikel, sekali lagi setelah meyakinkan diri kita sendiri tentang ketidakberdayaan metode matematika idealis dalam menghadapi kenyataan fisik yang keras dan kejam, dan pergi untuk merokok setrika.

Tapi pertama-tama, mari kita cari tahu apa yang menyebabkan kegagalan ini terjadi pada kita? Jelas, intinya adalah kesalahan pengukuran, tetapi apa pengaruhnya? Faktanya adalah bahwa Jacques Hadamard (orang yang sama yang menambahkan tanda hubung ke rumus Cauchy - Hadamard) membagi semua tugas menjadi yang benar dan salah.

Mengingat yang klasik: β€œTidak masuk akal untuk mencari solusi, jika ada. Ini tentang bagaimana menangani tugas yang tidak memiliki solusi. Ini adalah pertanyaan yang sangat mendasar ... ”- kita tidak akan berbicara tentang tugas yang benar dan segera mengambil yang salah. Untungnya, kita telah bertemu ini: persamaan Fredholm yang ditulis di atas adalah masalah terbalik yang salah - bahkan dengan fluktuasi yang sangat kecil dalam data input (dan bahkan kesalahan pengukuran kami jauh dari sangat kecil), solusi persamaan yang diperoleh dengan cara analitik yang tepat dapat berbeda secara sewenang-wenang dari yang sebenarnya .

Anda dapat membaca bukti pernyataan ini di bab pertama karya klasik akademisi A.N. Tikhonova "Metode untuk memecahkan masalah yang keliru." Buku ini memiliki tips tentang apa yang harus dilakukan dengan tugas yang salah, tetapi teknik yang diuraikan di sini memiliki sejumlah kelemahan yang diperbaiki dalam metode Turchin. Tetapi pertama-tama, kami menjabarkan prinsip umum bekerja dengan tugas yang salah: apa yang harus dilakukan jika Anda menemukan tugas seperti itu?

Karena tugas itu sendiri tidak dapat menawarkan apa pun kepada kita, kita harus melakukan kejahatan kecil: melengkapi tugas dengan data sehingga menjadi benar, dengan kata lain, masukkan beberapa * tambahan informasi a priori tentang tugas * (proses ini disebut regularisasi tugas). Berbeda dengan metode Tikhonov klasik, berdasarkan pengenalan fungsional regularisasi parametrized, metode Turchin memanggil di sisi lain menggunakan metode Bayesian.

Deskripsi Teoritis tentang Regulasi Statistik


Strategi


Kami merumuskan masalah kami dalam hal statistik matematika: sesuai dengan implementasi yang terkenal f(yang kami ukur dalam percobaan) kami perlu mengevaluasi nilai parameter Ο†. FungsionalS^ menghitung Ο†berdasarkan fkami akan memanggil strategi . Untuk menentukan strategi mana yang lebih optimal, kami memperkenalkan fungsi kerugian kuadratik . Fungsi kerugian sebenarnya dapat berupa, mengapa kita memilih yang kuadratik? Karena setiap fungsi kerugian mendekati minimumnya dapat diperkirakan dengan fungsi kuadratik:

L(Ο†,S^[f])=||Ο†^βˆ’S^[f])||L2,

Dimana Ο†^- solusi terbaik. Kemudian kerugian untuk strategi yang kita pilih ditentukan oleh fungsi risiko :

RS^[f](Ο†)≑E[L(Ο†,S^[f])]=∫L(Ο†,S^[f])P(f|Ο†)df.

Sini P(f|Ο†)menentukan kepadatan probabilitas dari ansambel kami, di mana rata-rata kerugian dilakukan. Ensembel ini dibentuk oleh pengulangan beberapa pengukuran hipotetis.f untuk diberikan Ο†. Lewat sini,P(f|Ο†) - ini adalah kepadatan probabilitas yang diketahui oleh kami fdiperoleh dalam percobaan.

Menurut pendekatan Bayesian, diusulkan untuk dipertimbangkanφsebagai variabel acak dengan kepadatan probabilitas apriori P(φ)mengekspresikan keandalan berbagai solusi untuk masalah kita.P(φ)ditentukan berdasarkan informasi yang ada sebelum percobaan. Maka pilihan strategi optimal didasarkan pada meminimalkan risiko posteriori :

rS^(Ο†)≑EΟ†Ef[L(Ο†,S^[f])|Ο†]

Dalam hal ini, strategi optimal diketahui:

S^[f]=E[Ο†|f]=βˆ«Ο†P(Ο†|f)dΟ†,

di mana kepadatan posterior P(Ο†|f)ditentukan oleh teorema Bayes:

P(Ο†|f)=P(Ο†)P(f|Ο†)∫dΟ†P(Ο†)P(f|Ο†)

Pendekatan ini akan memungkinkan kita untuk menentukan varians (fungsi korelasi) dari solusi yang dihasilkan:

D(x1,x2)=E[Ο†(x1)βˆ’S^[f](x1)][Ο†(x2)βˆ’S^[f](x2)]

Jadi, kami telah mendapatkan solusi optimal untuk masalah kami dengan memperkenalkan kepadatan a priori P(φ). Bisakah kita mengatakan sesuatu tentang dunia fungsi ituφ(x)yang diberikan oleh kepadatan apriori?

Jika jawaban untuk pertanyaan ini adalah tidak, maka kita harus menerima semua kemungkinanφ(x)sama-sama mungkin dan kembali ke solusi tidak teratur. Karena itu, kita harus menjawab pertanyaan ini dengan tegas.

Inilah yang dimaksud dengan metode regularisasi statistik dalam - regularisasi solusi dengan memperkenalkan informasi a priori tambahan tentangφ(x). Jika peneliti sudah memiliki informasi apriori (kepadatan aprioriP(φ→)), dia hanya bisa menghitung integral dan mendapatkan jawabannya.

Jika tidak ada informasi seperti itu, paragraf berikutnya menjelaskan tentang informasi minimal yang mungkin dimiliki seorang peneliti dan bagaimana menggunakannya untuk mendapatkan solusi yang teratur.

Informasi priori


Seperti yang ditunjukkan oleh para ilmuwan Inggris, di seluruh dunia mereka suka membedakan. Selain itu, jika ahli matematika akan mengajukan pertanyaan tentang legalitas operasi ini, ahli fisika optimis percaya bahwa hukum alam dijelaskan oleh fungsi "baik", yaitu, lancar.

Dengan kata lain, itu membuatnya lebih halusφ(x)lebih tinggi kepadatan probabilitas apriori. Jadi mari kita coba memperkenalkan probabilitas a priori berdasarkan kelancaran. Untuk melakukan ini, kita ingat bahwa pengenalan informasi apriori adalah suatu kekerasan terhadap dunia, memaksa hukum alam untuk mencari cara yang nyaman bagi kita.

Kekerasan ini harus diminimalkan, dan dengan memperkenalkan apriori kepadatan probabilitas, perlu bahwa informasi Shannon diφ(x)terkandung dalam P(φ→)sangat minim. Memformalkan hal di atas, kami memperoleh bentuk kepadatan apriori berdasarkan kelancaran fungsi. Untuk melakukan ini, kami akan mencari ekstrum informasi bersyarat:

I[P(Ο†β†’)]=∫ln⁑P(Ο†β†’)P(Ο†β†’)dΟ†β†’β†’min

Di bawah kondisi berikut:

  1. Kondisi kehalusan Ο†(x). Biarkan sajaΞ©Merupakan matriks tertentu yang mencirikan kelancaran fungsi. Maka kita mengharuskan nilai fungsional kelancaran tertentu tercapai:

    ∫(Ο†β†’,Ωφ→)P(Ο†β†’)dΟ†β†’=Ο‰

    Pembaca yang penuh perhatian harus mengajukan pertanyaan tentang menentukan nilai parameter.
    Ο‰. Jawabannya akan diberikan lebih lanjut dalam teks.
  2. Normalisasi probabilitas per unit: ∫P(Ο†β†’)dΟ†β†’=1
    Dalam kondisi ini, fungsi berikut akan memberikan fungsionalitas minimum:

    PΞ±(Ο†β†’)=Ξ±Rg(Ξ©)/2detΞ©1/2(2Ο€)N/2exp⁑(βˆ’12(Ο†β†’,αΩφ→))

    Parameter Ξ±Terhubung dengan Ο‰, tetapi karena kami tidak memiliki informasi tentang nilai-nilai spesifik dari kelancaran fungsional, mencari tahu persis bagaimana itu terhubung tidak ada gunanya. Lalu apa yang harus dilakukan denganΞ±, Anda bertanya. Di sini tiga cara diungkapkan kepada Anda:

    1. Nilai parameter yang cocok Ξ±secara manual dan dengan demikian benar-benar melanjutkan ke regularisasi Tikhonov
    2. Rata-rata (mengintegrasikan) dari semua yang mungkin Ξ±dengan asumsi semua mungkin Ξ±sama-sama mungkin
    3. Pilih yang paling mungkin αoleh kepadatan probabilitas posteriornya P(α|f→). Pendekatan ini benar karena memberikan perkiraan integral yang baik jika data eksperimen mengandung cukup banyak informasiα.

Kasus pertama kurang menarik bagi kami. Dalam kasus kedua, kita harus menghitung integral jelek di sini:

βŸ¨Ο†i⟩=∫dφφiP(f|Ο†)∫dΞ±P(Ξ±)Ξ±Rg(Ξ©)2exp⁑(βˆ’Ξ±2(Ο†β†’,Ωφ→))∫dΟ†P(f|Ο†)∫dΞ±P(Ξ±)Ξ±Rg(Ξ©)2exp⁑(βˆ’Ξ±2(Ο†β†’,Ωφ→))

Untuk kasus ketiga, kita dapat memperoleh nilai integral secara analitis untuk kebisingan Gaussian dalam percobaan (ini akan dipertimbangkan melalui bagian).

Perlu juga dicatat bahwa kita belum pernah menggunakannya di mana pun, ituΞ©Adalah operator kelancaran. Bahkan, kita dapat menggunakan operator lain (atau kombinasi liniernya) di sini, hanya kelancaran fungsi adalah bentuk paling jelas dari informasi apriori yang dapat kita gunakan.

Contoh


Kami berbicara tentang fungsi, tetapi perangkat nyata tidak dapat mengukur tidak hanya sebuah kontinum, tetapi bahkan satu set poin yang dapat dihitung. Kami selalu melakukan pengukuran dalam himpunan titik yang terbatas, oleh karena itu kami terpaksa melakukan prosedur diskritisasi dan transisi dari persamaan integral ke matriks. Dalam metode regularisasi statistik, kami melanjutkan sebagai berikut: kami akan membusukφ(x) lebih dari beberapa sistem fungsi {Tn}:

Ο†(x)=βˆ‘nΟ†nTn(x).

Dengan demikian, koefisien ekspansi ini membentuk beberapa vektor Ο†β†’yang merupakan vektor dalam ruang fungsi.

Sebagai ruang fungsional, kita dapat mengambil ruang Hilbert, atau, misalnya, ruang polinomial. Selain itu, pilihan dasar dalam ruang-ruang ini hanya dibatasi oleh imajinasi Anda (kami mencoba untuk bekerja dengan deret trigonometri Fourier, poligandra dan kubik splines).

Kemudian elemen-elemen dari matriksK dihitung sebagai:

Kmn=(K^Tn(x))(ym),

Dimana ym- titik di mana pengukuran dilakukan. Elemen MatriksΞ© kami akan menghitung dengan rumus:

Ωij=∫ab(dpTi(x)dx)(dpTj(x)dx)dx,

Dimana adan b- batas-batas interval di mana fungsi didefinisikan Ο†(x).

Untuk menghitung ulang kesalahan, gunakan rumus dispersi kombinasi linear dari variabel acak:

D[Ο†(x)]=D[βˆ‘nΟ†nTn(x)]=βˆ‘i,jΟ†iΟ†jcov(Ti(x),Tj(x)).

Harus diingat bahwa dalam beberapa kasus, representasi fungsi menggunakan vektor dimensi terbatas menyebabkan hilangnya sebagian atau perubahan informasi. Faktanya, kita dapat menganggap aljabar sebagai sejenis regularisasi, betapapun lemah dan tidak cukupnya untuk mengubah tugas yang salah menjadi tugas yang benar. Tapi, bagaimanapun, kami sekarang telah beralih dari pencarianφ(x) untuk pencarian vektor φ→dan di bagian selanjutnya kita menemukannya.

Kasus Gaussian Noise


Kasus ketika kesalahan dalam percobaan didistribusikan menurut Gauss luar biasa
karena solusi analitis untuk masalah kita dapat diperoleh. Karena informasi dan kesalahan apriori memiliki bentuk Gaussian, produk mereka juga memiliki bentuk Gaussian, dan kemudian integral jelek yang kami tulis di atas mudah diambil. Solusi dan kesalahannya adalah sebagai berikut:

Ο†β†’=(KTΞ£βˆ’1K+Ξ±βˆ—Ξ©)βˆ’1KTΞ£βˆ’1Tfβ†’

Σφ→=(KTΞ£βˆ’1K+Ξ±βˆ—Ξ©)βˆ’1,

Dimana Ξ£- matriks kovarians dari distribusi Gaussian multidimensi, Ξ±βˆ—- nilai parameter yang paling memungkinkan Ξ±, yang ditentukan dari kondisi maksimum kemungkinan kepadatan a posteriori:

P(Ξ±|fβ†’)=Cβ€²Ξ±Rg(Ξ©)2|(KTΞ£βˆ’1K+Ξ±Ξ©)βˆ’1|exp⁑(12fβ†’TΞ£βˆ’1KT(KTΞ£βˆ’1K+Ξ±Ξ©)βˆ’1KTΞ£βˆ’1Tfβ†’)


Dan jika saya tidak memiliki kesalahan Gaussian?


Bagian kedua dari artikel ini akan dikhususkan untuk ini, tetapi untuk sekarang mari kita uraikan esensi masalahnya.

βŸ¨Ο†i⟩=∫dφφiP(f|Ο†)∫dΞ±P(Ξ±)Ξ±Rg(Ξ©)2exp⁑(βˆ’Ξ±2(Ο†β†’,Ωφ→))∫dΟ†P(f|Ο†)∫dΞ±P(Ξ±)Ξ±Rg(Ξ©)2exp⁑(βˆ’Ξ±2(Ο†β†’,Ωφ→))


Masalah utama adalah bahwa integral yang mengerikan ini, pertama multidimensi, dan kedua, dalam batas tak terbatas. Selain itu, sangat multidimensi, vektorΟ†β†’ dapat dengan mudah memiliki dimensi m=30βˆ’50, dan metode grid untuk menghitung integral memiliki kompleksitas tipe O(nm), oleh karena itu, tidak berlaku dalam kasus ini. Saat mengambil integral multi-dimensi, integrasi Monte Carlo berfungsi dengan baik.

Selain itu, karena batas kami tidak terbatas, kami harus menggunakan metode pengambilan sampel yang penting, tetapi kemudian kami harus memilih fungsi untuk pengambilan sampel. Untuk membuat semuanya lebih otomatis, Anda harus menggunakan Markov Chain Monte Carlo (MCMC) , yang dapat secara mandiri mengadaptasi fungsi pengambilan sampel ke integral yang dihitung. Kami akan berbicara tentang penerapan MCMC di artikel selanjutnya.

Bagian praktis


Implementasi pertama dari metode regularisasi statistik ditulis kembali pada tahun 70-an di Algol dan berhasil digunakan untuk perhitungan dalam fisika atmosfer. Terlepas dari kenyataan bahwa kami masih memiliki sumber-sumber algoritma tulisan tangan, kami memutuskan untuk menambahkan sedikit modernisme dan membuat implementasi dengan Python, dan kemudian pada Julia.

Python


Instalasi

Instal melalui pip:

pip install statreg

atau unduh kode sumber .

Contohnya

Sebagai contoh, pertimbangkan cara menggunakan modul stareguntuk memulihkan data untuk persamaan matriks dan integral.

Kami mengimpor paket-paket ilmiah yang diperlukan.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.integrate import quad
%matplotlib inline

Kami menentukan sinyal yang benar, yang akan kami pulihkan.

a = 0
b = 5
#  
phi = lambda x: 4*norm.pdf(x-2, scale=0.4) + 2*norm.pdf(x-4, scale = 0.5)
x = np.linspace(a, b,100)
plt.plot(x, phi(x));


Tentukan kernel dan operasi konvolusi fungsi (Catatan: np.convolutionkhusus untuk array):

kernel = lambda x,y : np.heaviside(x-y, 1) #  
convolution =  np.vectorize(lambda y: quad(lambda x: kernel(x,y)*phi(x), a,b)[0])

Kami menghasilkan data yang diukur dan mengeluarkannya menggunakan distribusi normal:

y = np.linspace(a, b, 50)
ftrue = convolution(y)
sig = 0.05*ftrue +0.01 #  
f = norm.rvs(loc = ftrue, scale=sig)
plt.errorbar(y, f, yerr=sig);



Kami memecahkan persamaan integral

Kami mengimpor kelas solver dan auxiliary untuk diskritisasi:

from statreg.model import GaussErrorUnfolder
from statreg.basis import CubicSplines

Sebagai dasar fungsional untuk diskritisasi, kami menggunakan splines kubik, dan sebagai kondisi tambahan, kami mengindikasikan bahwa fungsi tersebut mengambil nilai nol pada tepinya.

basis = CubicSplines(y, boundary='dirichlet')
model = GaussErrorUnfolder(basis, basis.omega(2))

Kami memecahkan persamaan:

phi_reconstruct = model.solve(kernel, f, sig, y)

Kami sedang menyusun jadwal solusi:

plt.plot(x,phi(x))
phir = phi_reconstruct(x)
phiEr = phi_reconstruct.error(x)
plt.plot(x, phir, 'g')
plt.fill_between(x, phir-phiEr, phir + phiEr, color='g', alpha=0.3);



Kami memecahkan persamaan matriks

Kami mengimpor kelas solver dan auxiliary untuk diskritisasi:

from statreg.model import GaussErrorMatrixUnfolder
from statreg.basis import CubicSplines

Untuk mendapatkan matriks, kami menggunakan basis fungsional kami, tetapi jelas bahwa matriks dapat diperoleh dengan cara apa pun.

cubicSplines = CubicSplines(y, boundary='dirichlet')
omega = cubicSplines.omega(2)
Kmn = cubicSplines.discretizeKernel(kernel,y)

Kami memecahkan persamaan matriks:

model = GaussErrorMatrixUnfolder(omega)
result = model.solve(Kmn, f, sig)

Buat bagan:

phir = lambda x: sum([p*bf(x) for p, bf in zip(result.phi,cubicSplines.basisFun)])
plt.plot(x,phir(x))
plt.plot(x,phi(x));



Julia


Seperti yang kami sebutkan, pengembangan lebih lanjut dari teknik ini membutuhkan integrasi Monte Carlo yang canggih. Kita dapat menggunakan beberapa jenis modul dengan Python (misalnya, kita bekerja dengan PyMC3), tetapi kita, antara lain, berpartisipasi dalam proyek bersama dengan Max Planck Institute di Munich.

Proyek ini disebut Bayesian Analysis Toolkit . Tujuannya adalah untuk menciptakan kerangka kerja dengan alat untuk metode analisis Bayesian, terutama termasuk alat untuk MCMC. Sekarang tim sedang mengerjakan versi kedua kerangka kerja, yang ditulis dalam Julia (yang pertama ditulis dalam C ++ buruk). Salah satu tugas kelompok kami adalah menunjukkan kemampuan kerangka kerja ini dengan menggunakan contoh regularisasi statistik, jadi kami menulis sebuah implementasi di Julia .

using PyCall
include("../src/gauss_error.jl")
include("../src/kernels.jl")

a = 0.
b = 6.

function phi(x::Float64)
    mu1 = 1.
    mu2 = 4.
    n1 = 4.
    n2 = 2.
    sig1 = 0.3
    sig2 = 0.5

    norm(n, mu, sig, x) = n / sqrt(2 * pi*sig^2) * exp(-(x - mu)^2 / (2 * sig^2))
    return norm(n1, mu1, sig1, x) + norm(n2, mu2, sig2, x)
end
x = collect(range(a, stop=b, length=300))

import PyPlot.plot

myplot = plot(x, phi.(x))
savefig("function.png", dpi=1000)


Kali ini kami menggunakan inti yang berbeda, kami tidak akan mengambil langkah integrasi, tetapi konvolusi dengan Gaussian, yang sebenarnya mengarah pada "blur" tertentu ke data kami:

function kernel(x::Float64, y::Float64)
    return getOpticsKernels("gaussian")(x, y)
end

convolution = y -> quadgk(x -> kernel(x,y) * phi(x), a, b, maxevals=10^7)[1]
y = collect(range(a, stop = b, length=50))
ftrue = convolution.(y)
sig = 0.05*abs.(ftrue) +[0.01 for i = 1:Base.length(ftrue)]
using Compat, Random, Distributions
noise = []
for sigma in sig
    n = rand(Normal(0., sigma), 1)[1]
    push!(noise, n)
end
f = ftrue + noise
plot(y, f)


Demikian pula, kami mengambil dasar splines dengan ujung tetap:

basis = CubicSplineBasis(y, "dirichlet")
Kmn = discretize_kernel(basis, kernel, y)
model = GaussErrorMatrixUnfolder([omega(basis, 2)], "EmpiricalBayes", nothing, [1e-5], [1.], [0.5])
result = solve(model, Kmn, f, sig)
phivec = PhiVec(result, basis)

x = collect(range(a, stop=b, length=5000))
plot(x, phi.(x))

phi_reconstructed = phivec.phi_function.(x)
phi_reconstructed_errors = phivec.error_function.(x)

plot(x, phi_reconstructed)
fill_between(x, phi_reconstructed - phi_reconstructed_errors, phi_reconstructed + phi_reconstructed_errors, alpha=0.3)



Contoh dunia nyata

Sebagai contoh analisis data nyata, kami akan mengembalikan spektrum hamburan elektron dari campuran hidrogen-deuterium. Dalam percobaan, spektrum integral diukur (yaitu, jumlah elektron di atas energi tertentu), dan kita perlu mengembalikan spektrum diferensial. Untuk data ini, spektrum awalnya direkonstruksi menggunakan fitting, sehingga kami memiliki dasar untuk memeriksa kebenaran algoritma kami.

Beginilah tampilan spektrum terintegrasi awal:

Dan - hasil restorasi:

Analisis dengan fit memiliki tiga kelemahan utama:

  • , .
  • , .
  • .

Regulasi statistik menghindari semua masalah ini dan memberikan hasil model-independen dengan kesalahan pengukuran. Solusi yang diperoleh dengan regularisasi sesuai dengan kurva pas. Perhatikan dua puncak kecil pada 25 dan 30 eV. Diketahui bahwa puncak pada 25 eV terbentuk selama hamburan ganda, dan dipulihkan oleh pas, karena jelas ditentukan dalam fungsi pemasangan. Puncak 30 eV mungkin anomali statistik (kesalahannya cukup besar pada titik ini), atau, mungkin, menunjukkan adanya hamburan disosiatif tambahan.

Kesimpulan dan pengumuman bagian selanjutnya


Kami memberi tahu Anda tentang teknik yang berguna yang dapat disesuaikan dengan banyak tugas analisis data (termasuk pembelajaran mesin), dan mendapatkan jawaban "jujur" yang jujur ​​- solusi paling rasional untuk persamaan dalam menghadapi ketidakpastian yang disebabkan oleh kesalahan pengukuran. Sebagai bonus yang menyenangkan, kami mendapatkan nilai untuk kesalahan keputusan. Mereka yang ingin berpartisipasi dalam pengembangan atau menerapkan metode regularisasi statistik dapat berkontribusi dalam bentuk kode dengan Python, Julia atau pada hal lain.

Pada bagian selanjutnya kita akan berbicara tentang:

  • Menggunakan MCMC
  • Dekomposisi Cholesky
  • Sebagai contoh praktis, kami mempertimbangkan penggunaan regularisasi untuk memproses sinyal dari model detektor orbital proton dan elektron

Referensi



Diposting oleh Mikhail Zeleny , Peneliti di Laboratorium Metode Percobaan Fisika Nuklir di JetBrains Research .

All Articles