def main():
    tau = pm.rdiscrete_uniform(0, 80)
    print tau

    alpha = 1. / 20.
    lambda_1, lambda_2 = pm.rexponential(alpha, 2)
    print lambda_1, lambda_2

    data = np.r_[pm.rpoisson(lambda_1, tau), pm.rpoisson(lambda_2, 80 - tau)]

    def plot_artificial_sms_dataset():
        tau = pm.rdiscrete_uniform(0, 80)
        alpha = 1. / 20.
        lambda_1, lambda_2 = pm.rexponential(alpha, 2)
        data = np.r_[pm.rpoisson(lambda_1, tau),
                     pm.rpoisson(lambda_2, 80 - tau)]
        plt.bar(np.arange(80), data, color="#348ABD")
        plt.bar(tau - 1,
                data[tau - 1],
                color="r",
                label="user behaviour changed")
        plt.xlim(0, 80)

    plt.title("More example of artificial datasets")
    for i in range(1, 5):
        plt.subplot(4, 1, i)
        plot_artificial_sms_dataset()
    plt.show()
def data_gen(samples_n=10, tau_start=75, tau_end=100, gamma=0.1):
    alpha = 1.0 / gamma
    for x in xrange(samples_n):
        tau = pm.rdiscrete_uniform(tau_start, tau_end)
        # lam = pm.rexponential(alpha)
        lam = alpha
        yield pm.rpoisson(lam, tau)
Beispiel #3
0
def plot_artificial_sms_dataset():
    tau = pm.rdiscrete_uniform(0, 80)
    alpha = 1. / 20.
    lambda_1, lambda_2 = pm.rexponential(alpha, 2)
    data = np.r_[pm.rpoisson(lambda_1, tau), pm.rpoisson(lambda_2, 80 - tau)]
    plt.bar(np.arange(80), data, color="#348ABD")
    plt.bar(tau - 1, data[tau - 1], color="r", label="user behaviour changed")
    plt.xlim(0, 80)
def plot_artificial_sms_dataset():
    maxdays = 80
    tau = pm.rdiscrete_uniform( 0, maxdays )
    alpha = 1 / 20.
    lambda_1, lambda_2 = pm.rexponential( alpha, 2 )
    data = np.r_[
            pm.rpoisson( lambda_1, tau ),
            pm.rpoisson( lambda_2, maxdays-tau )]
    plt.bar( np.arange(maxdays), data )
    plt.bar( tau - 1, data[tau-1], color = 'r', label='change point' )
    plt.xlim( 0, 80 )
def plot_artificail_sms_dataset():
    #----------------------------------
    # initialize both deterministic and stochastic variables
    tau = pm.rdiscrete_uniform(0, 80)
    print("tau = {0}".format(tau))
    alpha = 1. / 20.
    lambda_1, lambda_2 = pm.rexponential(alpha, 2)
    print("lambda_1 = {0}\nlambda_2 = {1}".format(lambda_1, lambda_2))
    lambda_ = np.r_[lambda_1 * np.ones(tau), lambda_2 * np.ones(80 - tau)]
    print("lambda = \n{0}".format(lambda_))
    data = pm.rpoisson(lambda_)
    print("data = \n{0}".format(data))
    #-----------------------------------
    # plot the artificial
    plt.bar(np.arange(80), data, color="#348ABD")
    plt.bar(tau - 1, data[tau - 1], color="r", label="user behavior changed")
    plt.xlabel("Time(days)")
    plt.ylabel("Text messages received")
    plt.xlim(0, 80)
Beispiel #6
0
def plot_artifical_sms_dataset():
    # specify when the user's behaviour (amount of sms received) switches by sampling from DiscreteUniform
    tau = rdiscrete_uniform(0, 80)
    print('τ = {}'.format(tau,))
    alpha = 1. / 20.
    lambda_1, lambda_2 = rexponential(alpha, 2)
    print(lambda_1, lambda_2)

    # for days before tau, repr. the user's received sms count by sampling from a
    # Poisson(lambda_1), and for days after tau by sampling from Poisson(lambda_2)
    data = np.r_[rpoisson(lambda_1, tau), rpoisson(lambda_2, 80 - tau)]
    print(data)


    # plot artificial data set
    pyplot.bar(np.arange(80), data, color="#348ABD")
    pyplot.bar(tau - 1, data[tau - 1], color="r", label="user behaviour changed")
    pyplot.xlabel("time (days)")
    pyplot.ylabel("count of sms received")
    pyplot.xlim(0, 80)
    pyplot.legend()
def data_gen_for_rnn(samples_n=1, tau_start=75, tau_end=100, gamma=0.01, var=5):
    alpha = 1.0 / gamma
    lam = alpha
    for i in xrange(samples_n):
        con = []
        tau = pm.rdiscrete_uniform(tau_start, tau_end)
        for j in xrange(tau):
            if j == 0:
                val = round(pm.rnormal(lam, var), 2)
                con.append(val)
            elif j == 1:
                val = con[0] + pm.rnormal(0, var)
                val = round(val, 2)
                con.append(val)

            else:
                # n = len(con)
                # lam_n = float(np.array(con).sum())/n
                val = 0.7 * con[-1] + 0.3 * con[-2] + pm.rnormal(0, var)
                val = round(val, 2)
                con.append(val)
                # print val, lam_n
        yield con
def main():
    tau = pm.rdiscrete_uniform(0, 80)
    print tau

    alpha = 1. / 20.
    lambda_1, lambda_2 = pm.rexponential(alpha, 2)
    print lambda_1, lambda_2

    data = np.r_[pm.rpoisson(lambda_1, tau), pm.rpoisson(lambda_2, 80 - tau)]

    def plot_artificial_sms_dataset():
        tau = pm.rdiscrete_uniform(0, 80)
        alpha = 1. / 20.
        lambda_1, lambda_2 = pm.rexponential(alpha, 2)
        data = np.r_[pm.rpoisson(lambda_1, tau), pm.rpoisson(lambda_2, 80 - tau)]
        plt.bar(np.arange(80), data, color="#348ABD")
        plt.bar(tau - 1, data[tau - 1], color="r", label="user behaviour changed")
        plt.xlim(0, 80)

    plt.title("More example of artificial datasets")
    for i in range(1, 5):
        plt.subplot(4, 1, i)
        plot_artificial_sms_dataset()
    plt.show()
import numpy as np
import pymc as pm
from matplotlib import pyplot as plt

tau = pm.rdiscrete_uniform(0, 80)
print(tau)

alpha = 1. / 20.
lambda_1, lambda_2 = pm.rexponential(alpha, 2)
print(lambda_1, lambda_2)

data = np.r_[pm.rpoisson(lambda_1, tau), pm.rpoisson(lambda_2, 80 - tau)]

plt.bar(np.arange(80), data, color="#348ABD")
plt.bar(tau - 1, data[tau - 1], color="r", label="user behaviour changed")
plt.xlabel("Time (days)")
plt.ylabel("count of text-msgs received")
plt.title("Artificial dataset")
plt.xlim(0, 80)
plt.legend();

plt.show()

fixed_variable.value

# fix txt msg to observed data set
data = np.array( [10, 20, 15, 20, 49] )
obs = pm.Poisson( "obs", lambda_, value=data, observed=True )
obs.value

# 
# Model class - analyze variables as a single unit
model = pm.Model( [obs, lambda_, lambda_1, lambda_2, taus] )

#
# Creating new datasets
#
maxdays = 80
tau = pm.rdiscrete_uniform( 0, maxdays )

alpha = 1 / 20.
lambda_1, lambda_2 = pm.rexponential( alpha, 2 )

data = np.r_[
        pm.rpoisson( lambda_1, tau ),
        pm.rpoisson( lambda_2, maxdays-tau )]

plt.bar( np.arange(maxdays), data )
plt.bar( tau - 1, data[tau-1], color = 'r', label='change point' )
plt.xlabel( "Time (days)" )
plt.ylabel( "count" )
plt.title( "Artificial Data" )
plt.xlim( 0, 80 )
plt.legend()
import numpy as np
import pymc as pm
from matplotlib import pyplot as plt

true_N = 500
D = pm.rdiscrete_uniform(1, true_N, size=10)

N = pm.DiscreteUniform("N", lower=D.max(), upper=10000)

observation = pm.DiscreteUniform("obs",
                                 lower=0,
                                 upper=N,
                                 value=D,
                                 observed=True)

model = pm.Model([observation, N])

mcmc = pm.MCMC(model)
mcmc.sample(40000, 10000, 1)

N_samples = mcmc.trace('N')[:]

# histogram of the samples:

plt.hist(N_samples, normed=True)
plt.show()
from IPython.core.pylabtools import figsize
from matplotlib import pyplot as plt
figsize(12.5, 4)


samples = [lambda_1.random() for i in range(20000)]
plt.hist(samples, bins=70, normed=True, histtype="stepfilled")
plt.title("Prior distribution for $\lambda_1$")
plt.xlim(0, 8);

# Take the case of the sms data in the previous chapter, knowing what we do
# about parent and child variables and taking an omniscient view on the data
# and determining a modeling procedure we can work backwards to create the 
# data mimicing the expected creation of the data. i.e.

tau = pm.rdiscrete_uniform(0, 80)
print( tau )

alpha = 1. / 20.
lambda_1, lambda_2 = pm.rexponential(alpha, 2)
print( lambda_1, lambda_2)

data = np.r_[pm.rpoisson(lambda_1, tau), pm.rpoisson(lambda_2, 80 - tau)]

# Plot the distribution

plt.bar(np.arange(80), data, color="#348ABD")
plt.bar(tau - 1, data[tau - 1], color="r", label="user behaviour changed")
plt.xlabel("Time (days)")
plt.ylabel("count of text-msgs received")
plt.title("Artificial dataset")