Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menggunakan SciPy untuk mencari taburan teori yang paling sesuai untuk set data empirikal dan mengira kebarangkalian melebihi ambang tertentu?

Bagaimanakah saya boleh menggunakan SciPy untuk mencari taburan teori yang paling sesuai untuk set data empirikal dan mengira kebarangkalian melebihi ambang tertentu?

DDD
DDDasal
2024-11-24 11:36:09470semak imbas

How can I use SciPy to find the best-fitting theoretical distribution for an empirical dataset and calculate probabilities exceeding a given threshold?

Menyesuaikan Taburan Empirikal kepada Teori dengan Scipy

Gambaran Keseluruhan Masalah

>

Pertimbangkan set data nilai integer yang dijadikan sampel daripada pengedaran berterusan yang tidak diketahui. Kami berusaha untuk menentukan kebarangkalian (nilai-p) menemui nilai yang lebih besar daripada mana-mana ambang yang diberikan. Untuk menganggarkan kebarangkalian ini dengan tepat, adalah penting untuk menyesuaikan taburan empirikal kita kepada taburan teori yang sesuai. Artikel ini meneroka cara melakukan pemasangan sedemikian menggunakan Scipy dalam Python.

Pemasangan Pengedaran

Untuk menilai kebaikan kesesuaian, kita boleh menggunakan sejumlah ralat kuasa dua (SSE) untuk membandingkan histogram data empirikal dan taburan yang dipasang. Pengagihan dengan SSE terendah dianggap paling sesuai.

Pelaksanaan Scipy

Modul statistik Scipy menyediakan pelbagai kelas pengedaran berterusan. Kita boleh mengulangi setiap pengedaran, menganggarkan parameternya, mengira SSE dan menyimpan hasilnya.

Contoh: El Niño Dataset

Mari kita gambarkan prosesnya menggunakan data Suhu Permukaan Laut (SST) daripada El Niño set data.

    Muatkan data dan plot histogramnya.
  1. Lakukan pemasangan pengedaran menggunakan metrik SSE.
  2. Kenal pasti taburan paling sesuai berdasarkan SSE terendah .
  3. Plot fungsi ketumpatan kebarangkalian (PDF) bagi taburan paling sesuai bersama dengan empirikal histogram.
Kod di bawah mempamerkan pelaksanaan ini:

import numpy as np
import pandas as pd
import scipy.stats as st
import matplotlib.pyplot as plt
from scipy.stats._continuous_distns import _distn_names
import warnings

# El Niño SST data
data = pd.Series(sm.datasets.elnino.load_pandas().data.set_index('YEAR').values.ravel())

# Function to fit distributions based on SSE
def best_fit_distribution(data):
    return sorted(
        [
            (getattr(st, distribution), distribution.fit(data), np.sum(np.power(data.hist(bins=50).values - distribution.pdf(data.index), 2.0))) 
            for distribution in _distn_names 
            if not distribution in ['levy_stable', 'studentized_range']
        ], 
    key=lambda x:x[2]
)

# Find best fit
best_dist = best_fit_distribution(data)[0]

# Plot distribution
fig, ax = plt.subplots(figsize=(12,8))
ax.plot(data.hist(bins=50, density=True, alpha=0.5, color='gray'))
param_names = best_dist[0].shapes + ', loc, scale' if best_dist[0].shapes else ['loc', 'scale']
param_str = ', '.join(['{}={:0.2f}'.format(k, v) for k, v in zip(param_names, best_dist[1])])
dist_str = '{}({})'.format(best_dist[0].name, param_str)

ax.plot(best_dist[0].pdf(data.index, **best_dist[1]), lw=2, label=dist_str)
ax.set_title('Fitted Distribution: ' + dist_str)
ax.set_xlabel('SST (°C)')
ax.set_ylabel('Frequency')
ax.legend()
Output menunjukkan taburan paling sesuai sebagai taburan Weibull dengan parameter:

Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan SciPy untuk mencari taburan teori yang paling sesuai untuk set data empirikal dan mengira kebarangkalian melebihi ambang tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn