python - 如何从pymc3绘制概率分布?
问题描述
我一直在从输入数据中研究贝叶斯接口。我使用来自 pdf 的输入数据使用以下链接中的问题代码(PDF python 代码)创建了以下贝叶斯接口模型,
def IQR_outlier_detection(data):
##### Detecting Outliers (IQR):
## Quantiles:
S_list_O = np.array(data)
PDF_Q1 = np.quantile(S_list_O, 0.25)
PDF_Q3 = np.quantile(S_list_O, 0.75)
print('25% of PDF =', PDF_Q1)
print('75% of PDF =', PDF_Q3)
IQR = PDF_Q3 - PDF_Q1
print('IQR of PDF =', IQR)
Lower_Quantile = PDF_Q1 - (1.5 * IQR)
Upper_Quantile = PDF_Q3 + (1.5 * IQR)
print('Lower limit of IQR of PDF =', Lower_Quantile)
print('Upper limit of IQR of PDF =', Upper_Quantile)
print(S_list_O)
## Removing Outliers:
S_list_FLNO = []
Quantile_Set = (Lower_Quantile, Upper_Quantile)
for x in S_list_O.tolist():
if x >= Quantile_Set[0] and x <= Quantile_Set[1]:
S_list_FLNO.append(x)
print('PDF with outliers = ', S_list_O)
print('PDF with no outliers = ', S_list_FLNO)
return S_list_FLNO
def Stats_outlier_detection(data):
##### Detecting Outliers (Statistics):
## Mean and STD of data:
S_list_O = np.array(data)
print(S_list_O)
mean_S1 = np.mean(S_list_O)
std_S1 = np.std(S_list_O)
print('Mean of PDF =', mean_S1)
print('STD of PDF =', std_S1)
## Removing Outliers:
S_list_NO = [x for x in S_list_O if (x > mean_S1 - (2 * std_S1))]
S_list_FLNO = [x for x in S_list_NO if (x < mean_S1 + (2 * std_S1))]
print('PDF with outliers = ', S_list_O)
print('PDF with no outliers = ', S_list_FLNO)
return S_list_FLNO
def mu_and_std_beta_distribution(alpha, beta):
# # method 1:
# mean = (alpha * 1.0) / (alpha + beta)
# var = (alpha * beta * 1.0) / (alpha + beta + 1.0) / (alpha + beta) ** 2.0
# std = np.sqrt(var)
# method 2:
mean, var = best_dist.stats(alpha, beta, moments='mv')
std = np.sqrt(var)
return mean, std
def Bayesian_Interface(data):
###################################################### Outliers ########################################################
S_FLNO = IQR_outlier_detection(data)
# S_FLNO = Stats_outlier_detection(data)
########################################################################################################################
# Bayesian Model:
with pm.Model() as model_S:
# Prior Distributions for unknown model parameters:
alpha_S = pm.HalfNormal('alpha_S', sigma=10)
beta_S = pm.HalfNormal('beta_S', sigma=1)
# Observed data is from a Likelihood distributions (Likelihood (sampling distribution) of observations):
observed_data_S = pm.Beta('observed_data_S', alpha=alpha_S, beta=beta_S, observed=S_FLNO)
# draw 5000 posterior samples
trace_S = pm.sample(draws=5000, tune=2000, chains=3, cores=1)
# Obtaining Posterior Predictive Sampling:
post_pred_S = pm.sample_posterior_predictive(trace_S, samples=3000)
print(post_pred_S['observed_data_S'].shape)
print('\nSummary: ')
print(pm.stats.summary(data=trace_S))
print(pm.stats.summary(data=post_pred_S))
return trace_S, post_pred_S
print('#######################################################################################################')
print('Performing Bayesian Interface for PDF:')
trace_0, post_pred_0 = Bayesian_Interface(data=np_pdf)
print('Accessing PDF from Bayesian Interface:')
best_dist = getattr(st, 'beta')
mean_0, std_0 = mu_and_std_beta_distribution(alpha=np.mean(trace_0['alpha_S']), beta=np.mean(trace_0['beta_S']))
param_0 = [np.mean(trace_0['alpha_S']), np.mean(trace_0['beta_S']), mean_0, std_0]
print('Parameters values = ', param_0)
pdf_0, x_axis_pdf_0, y_axis_pdf_0 = make_pdf(dist=best_dist, params=param_0, size=len(np_pdf))
print('#######################################################################################################')
因此,我从 pymc3 包的发行版的 alpha 和 beta 中获取值,以便在链接中的相同代码中使用这些值。但是,我觉得我做错了什么。如何从我正在使用的bayesain 接口模型创建pdf?
解决方案
推荐阅读
- javascript - 按钮在桌面上可以正常工作,但在移动设备上不起作用
- sql-server - 用户 'rpa' 登录失败。(18456) (SQLDriverConnect)")
- reactjs - EXPO:设置 react-native-action-sheet
- typo3 - TYPO3 通过typoscript lib 包含一个扩展
- environment-variables - ExpandEnvironmentStringsA() 字符串下标超出范围
- flutter - 颤振包:facebook_audience_network 不支持空安全:
- scala - Spark ML Word2Vec 的变换函数中的 wordIndices 和 offset 到底是什么?
- networking - 如何在 Docker Swarm 专用网络中使用 Traefik v2.x?
- sql - 创建一个触发器,从另一个表的列中减去 1
- java - 如何在春季测试 LDAP 安全配置?