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?
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!