Модель вероятностного распределения - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь запустить скрипт 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 не является подписным

# 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, пожалуйста?

1 Ответ

0 голосов
/ 10 октября 2018

Незначительные изменения в коде, чтобы заставить его работать.Мне пришлось преобразовать ваши 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))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...