【问题标题】:PyMC3 - How to set the matrix shape of the beta distributionPyMC3 - 如何设置 beta 分布的矩阵形状
【发布时间】:2019-07-08 13:41:54
【问题描述】:

我尝试从 PyMC3 API 指南中重新创建 Multilabel logistic regression 示例,并附上 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)

【问题讨论】:

    标签: python theano montecarlo pymc3 pymc


    【解决方案1】:

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

    另外,有几个预测变量永远不会改变,所以放弃那些。

    【讨论】:

    • 抱歉回复晚了,之前没时间看。他们剩下的唯一问题是,为什么它是(14,2) 矩阵?这个第二维度从何而来? FanOn 是 0 和 1 吗?
    • 还是X_hmc和y_hmc向量?
    • @Linus 是的,它来自预测的类别,FanOn,其中 2 是它拥有的级别(标签)数。
    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2021-09-10
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多