本系列:
贝叶斯模型的一个核心优势就是简单灵活,可以实现一个分层模型。这一节将实现和比较整体合并模型和局部融合模型。
1234567891011121314151617181920 | import itertoolsimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport pymc3 as pmimport scipyimport scipy.stats as statsimport seaborn.apionly as sns from IPython.display import Imagefrom sklearn import preprocessing %matplotlib inline plt.style.use(\’bmh\’)colors = [\’#348ABD\’, \’#A60628\’, \’#7A68A6\’, \’#467821\’, \’#D55E00\’, \’#CC79A7\’, \’#56B4E9\’, \’#009E73\’, \’#F0E442\’, \’#0072B2\’] messages = pd.read_csv(\’data/hangout_chat_data.csv\’) |
让我们采取一种不同的方式来对我的 hangout 聊天回复时间进行建模。我的直觉告诉我回复的快慢与聊天的对象有关。我很可能回复女朋友比回复一个疏远的朋友更快。这样,我可以对每个对话独立建模,对每个对话i估计参数 μi 和 αi。
一个必须考虑的问题是,有些对话相比其他的含有的消息很少。这样,和含有大量消息的对话相比,我们对含有较少消息的对话的回复时间的估计,就具有较大的不确定度。下图表明了每个对话在样本容量上的差异。
12345 | ax = messages.groupby(\’prev_sender\’)[\’conversation_id\’].size().plot( kind=\’bar\’, figsize=(12,3), title=\’Number of messages sent per recipient\’, color=colors[0])_ = ax.set_xlabel(\’Previous Sender\’)_ = ax.set_ylabel(\’Number of messages\’)_ = plt.xticks(rotation=45) |
对于每个对话i中的每条消息j,模型可以表示为:
1234567891011121314151617181920212223 | indiv_traces = {} # Convert categorical variables to integerle = preprocessing.LabelEncoder()participants_idx = le.fit_transform(messages[\’prev_sender\’])participants = le.classes_n_participants = len(participants) for p in participants: with pm.Model() as model: alpha = pm.Uniform(\’alpha\’, lower=0, upper=100) mu = pm.Uniform(\’mu\’, lower=0, upper=100) data = messages[messages[\’prev_sender\’]==p][\’time_delay_seconds\’].values y_est = pm.NegativeBinomial(\’y_est\’, mu=mu, alpha=alpha, observed=data) y_pred = pm.NegativeBinomial(\’y_pred\’, mu=mu, alpha=alpha) start = pm.find_MAP() step = pm.Metropolis() trace = pm.sample( class=\”crayon-sy\”>() trace = pm.sample(ܚ
第3节:分层模型贝叶斯模型的一个核心优势就是简单灵活,可以实现一个分层模型。这一节将实现和比较整体合并模型和局部融合模型。
模型合并让我们采取一种不同的方式来对我的 hangout 聊天回复时间进行建模。我的直觉告诉我回复的快慢与聊天的对象有关。我很可能回复女朋友比回复一个疏远的朋友更快。这样,我可以对每个对话独立建模,对每个对话i估计参数 μi 和 αi。 一个必须考虑的问题是,有些对话相比其他的含有的消息很少。这样,和含有大量消息的对话相比,我们对含有较少消息的对话的回复时间的估计,就具有较大的不确定度。下图表明了每个对话在样本容量上的差异。
对于每个对话i中的每条消息j,模型可以表示为:
|