Я пытаюсь вычислить прогнозируемый 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
- что здесь не так?