Как выбрать лучшую модель машинного обучения с тестом A / B? - PullRequest
0 голосов
/ 01 октября 2019

Не знаю, правильно ли выбрать этот способ, чтобы выбрать лучшую модель машинного обучения.

Я использую иерархическое моделирование (тест A / B), чтобы выбрать лучшую модель машинного обучения:

mae_CV = Это средняя абсолютная ошибка, наблюдаемая при перекрестной проверке mae_real = Это средняя абсолютная ошибка, наблюдаемая напроверка 80/20

модель mae_CV mae_real A 0,000000114393863 0,000000002895284 B 0,000134346477960 0,017123410797252. ,,

import pandas as pd
import numpy as np
import pymc


@pymc.stochastic(dtype=np.float64)
def beta_priors(value=[1.0, 1.0]):
    a, b = value
    if a <= 0 or b <= 0:
        return -np.inf
    else:
        return np.log(np.power((a + b), -2.5))

a = beta_priors[0]
b = beta_priors[1]

#The hidden, true rate for each website.
true_rates = pymc.Beta('true_rates', a, b, size=9)

# This is what we observed
#MAE 
trials=np.array([0.000000114393863,
0.000134346477960,0.001020389795303,0.089087649019484,
0.115352112676056,0.115352112676056,
0.173451179235308,0.129136280993193,0.152391728386209])

#STD
successes = np.array([0.000000002895284,0.017123410797252,
0.017437934875488,
0.098840323926234,0.172929447852761,0.181849364817947,
0.195693320489636,0.280658808002116,0.280965435804803])

observed_values = pymc.Binomial('observed_values', trials, true_rates, 
observed=True, value=successes)

model = pymc.Model([a, b, true_rates, observed_values])
mcmc = pymc.MCMC(model)

# Generate 1M samples, and throw out the first 500k
mcmc.sample(1000000, 500000)

#show
for i in range(9):
    sns.kdeplot(mcmc.trace('true_rates')[:][:,i], shade = True, label = 
    "MODEL %s" % chr(65+i))

# is model A best than model b?
diff_BA = mcmc.trace('true_rates')[:][:,1] - mcmc.trace('true_rates')[:][:,0]
sns.kdeplot(diff_BA, shade = True, label = "Difference model B - model A")
plt.axvline(0.0, color = 'black')

print("Probability that model A gets MORE MAE than model B: %0.3f" % 
(diff_BA < 0).mean())
print("Probability that model A gets LESS MAE than model B: %0.3f" % (diff_BA > 0).mean())

Я ожидаю получить лучшую модель, используя Мэй, полученную в перекрестной проверке, и результат проверки

...