PyMC3-如何设置Beta分布的矩阵形状

时间:2019-07-08 13:41:54

标签: python theano montecarlo pymc3 pymc

我尝试使用随附的Multilabel logistic regression从PyMC3 API指南中重新创建data set (Production.csv)示例。

在创建pm.Model()的步骤中,我遇到了困难。矩阵维不可行。我不明白为什么在API示例中使用(4,3)矩阵,因此我很难将示例转换为我的问题。

感谢您的时间和理解!

欢呼 莱纳斯

我附上了完整的代码,因为我没有使用数据集的所有列。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from math import *
import theano
import theano.tensor as tt
import pandas as pd
import pymc3 as pm
from sklearn import preprocessing 

from sklearn.model_selection import train_test_split

data = pd.read_csv("Production.csv") 
data_hmc = data.copy()

X_hmc = data_hmc.iloc[:, [False, True, True, True, False, True, True, True, True, True, True, True, True, True, True, True,]]
y_hmc = data_hmc.iloc[:, [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False]]

le = preprocessing.LabelEncoder()
y_hmc = y_hmc.apply(le.fit_transform) 

X_train_hmc, X_test_hmc, y_train_hmc, y_test_hmc = train_test_split(X_hmc, y_hmc, test_size = 0.20) 

from sklearn.preprocessing import StandardScaler  
scaler = StandardScaler()  
scaler.fit(X_train_hmc)

X_train_hmc = scaler.transform(X_train_hmc)  
X_test_hmc = scaler.transform(X_test_hmc) 


Xt = theano.shared(X_train_hmc)
yt = theano.shared(y_train_hmc)


with pm.Model() as hmc:

    # Coefficients for features
    β = pm.Normal('β', 0, sd=1e2, shape=(61482, 3))
    # Transoform to unit interval
    a = pm.Flat('a', shape=(3,))
    p = tt.nnet.softmax(Xt.dot(β) + a)

    observed = pm.Categorical('obs', p=p, observed=yt)

1 个答案:

答案 0 :(得分:0)

如果您查看iris数据集,则(4,3)为(预测变量数,标签数)。请注意,这些预测变量是连续的。从加载数据的方式来看,您似乎正在尝试预测FanOn并(实际上)有14个预测变量,因此β的形状为(14,2)。但是,您的大多数预测变量都不是连续的,有些看起来是分类的(例如CupState)。二进制的很好,但是分类需要扩展为虚拟变量。基本上,一旦获得包含所有二进制或连续条目的X矩阵,列数就是β的行数。

此外,几个预测变量永远不会改变,因此请删除这些预测变量。