PyMC3 - Как установить форму матрицы бета-распределения - PullRequest
0 голосов
/ 08 июля 2019

Я попытался воссоздать пример Многолинейная логистическая регрессия из руководства по PyMC3 API с прикрепленным набором данных (Production.csv) .

На этапе создания pm.Model() я сталкиваюсь с трудностями. Размеры матрицы не работают. Я не понимаю, почему (4,3) матрица используется в примере API, и поэтому у меня возникают трудности с преобразованием примера в мою проблему.

Спасибо за ваше время и понимание!

Приветствие Линус

Я приложил полный код, потому что я не использую все столбцы набора данных.

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 голосов
/ 09 июля 2019

Если вы посмотрите на набор данных iris, (4,3) - это (количество предикторов, количество меток). Обратите внимание, что эти предикторы являются непрерывными. Исходя из того, как вы загружаете свои данные, кажется, что вы пытаетесь предсказать FanOn и имеете (наивно) 14 предикторов, поэтому форма для β будет (14,2). Однако большинство ваших предикторов не являются непрерывными, а некоторые выглядят категорично (например, CupState). Бинарные из них хороши, но категории должны быть расширены как переменные. По сути, как только вы получите матрицу X со всеми двоичными или непрерывными записями, число столбцов будет равно числу строк β.

Кроме того, пара предикторов никогда не меняется, так что отбросьте их.

...