【问题标题】:Model of a Probability Distribution概率分布模型
【发布时间】:2018-10-10 14:06:50
【问题描述】:

我正在尝试运行一个 python 脚本,该脚本用作此数据科学网站上的示例: https://www.datascience.com/blog/introduction-to-bayesian-inference-learn-data-science-tutorials

import numpy as np
from scipy.misc import factorial
import matplotlib.pyplot as plt
%matplotlib inline

plt.rcParams['figure.figsize'] = (16,7)

def likelihood(theta, n, x):
    """
    likelihood function for a binomial distribution

    n: [int] the number of experiments
    x: [int] the number of successes
    theta: [float] the proposed probability of success
    """
    return (factorial(n) / (factorial(x) * factorial(n - x))) \
            * (theta ** x) * ((1 - theta) ** (n - x))

# The number of impressions for our facebook-yellow-dress campaign
n_impressions = 10

# The number of clicks for our facebook-yellow-dress campaign
n_clicks = 7

# Observed click through rate
ctr = n_clicks / n_impressions

# 0 to 1, all possible click through rates
possible_theta_values = map(lambda x: x/100., range(100))

# Evaluate the likelihood function for possible click through rates
likelihoods = map(lambda theta: likelihood(theta, n, x)\
                                , possible_theta_values)

# Pick the best theta
mle = possible_theta_values[np.argmax(likelihoods)]

# Plot
f, ax = plt.subplots(1)
ax.plot(possible_theta_values, likelihoods)
ax.axvline(mle, linestyle = "--")
ax.set_xlabel("Theta")
ax.set_ylabel("Likelihood")
ax.grid()
ax.set_title("Likelihood of Theta for New Campaign")
plt.show()

我正在使用 Spyder。我得到的错误包括:

    %matplotlib inline
    ^
SyntaxError: invalid syntax

还有

mle = possible_theta_values[np.argmax(likelihoods)]
TypeError: 'map' object is not subscriptable

likelihoods = list(map(lambda theta: likelihood(theta, ctr, x)\
NameError: name 'x' is not defined

我尝试了一个在这里找到的解决方案: Python map object is not subscriptable

# Evaluate the likelihood function for possible click through rates
likelihoods = list(map(lambda theta: likelihood(theta, n_clicks, ctr)\
                                , possible_theta_values))

但它给出了错误

TypeError: object of type 'map' has no len()

请问如何修复脚本以在 Spyder 中运行?

【问题讨论】:

  • %matplotlib inline 用于在 JuPyter 笔记本中启用绘图,为 Spyder 删除它
  • 其他问题听起来可能是 python 2/3 问题。您确定此脚本使用的版本与您拥有的版本相对应吗?
  • 我不确定那个 J。我使用的是 Python 3.6

标签: python dictionary lambda spyder


【解决方案1】:

对代码进行少量修改以使其正常工作。由于您提到的原因,我不得不将您的 map 可迭代对象转换为列表以使您的代码正常工作:TypeError: 'map' object is not subscriptable。我还必须明确定义 x 数组才能在计算 likelihoods 时使用它。

# 0 to 1, all possible click through rates
possible_theta_values = list(map(lambda x: x/100., range(100)))

n = n_impressions
x = n_clicks

# Evaluate the likelihood function for possible click through rates
likelihoods = list(map(lambda theta: likelihood(theta, n, x)\
                                , possible_theta_values))

【讨论】:

  • 我仍然收到“NameError: name 'n' is not defined”
  • 哦,是的,我拿了n = 5。只需选择您想要的任何数字。我编辑了我的答案
  • 我发现如果我使用“n = n_impressions”和“x = n_clicks”,我会得到与数据科学网站上相同的图表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 2022-06-27
  • 2016-07-09
  • 2021-12-21
相关资源
最近更新 更多