Как рассчитать прогнозируемое r2 в python? - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь вычислить прогнозируемый r2, у меня есть код, который, как мне кажется, должен работать, но вывод для прогнозируемого r2 - «нет». Я не уверен, означает ли это 0 или что-то не так?

Вот код, который я использую:

y_true= Y
y_pred = xgboostmodel.predict(X)
xs = X

def press_statistic(y_true, y_pred, xs):
    res = y_pred - y_true
    hat = xs.dot(np.linalg.pinv(xs))
    den = (1 - np.diagonal(hat))
    sqr = np.square(res/den)
    return sqr.sum()

def predicted_r2(y_true, y_pred, xs):
    press = press_statistic(y_true=y_true,
                            y_pred=y_pred,
                            xs=xs
    )
    
def r2(y_true, y_pred):
    """
    Calculation of the unadjusted r-squared, goodness of fit metric
    """
    sse  = np.square( y_pred - y_true ).sum()
    sst  = np.square( y_true - y_true.mean() ).sum()
    return 1 - sse/sst

print(r2(y_true, y_pred))
print(predicted_r2(y_true, y_pred, xs))

Печать r2 работает и дает 0,87

Печать предсказанного r2 просто выводит none - что здесь не так?

1 Ответ

1 голос
/ 10 июля 2020

Кажется, вам не хватает return после определения функции predicted_r2. Я предполагаю, что вам нужно вернуть переменную press, ранее определенную в функции:

def predicted_r2(y_true, y_pred, xs):
    press = press_statistic(y_true=y_true,
                            y_pred=y_pred,
                            xs=xs)
    return press
...