我在尝试计算预测的R²,我有一段代码我认为应该是有效的,但预测的R²的输出结果是’none’。我不确定这是否意味着它是0,或者是哪里出了问题?
这是我使用的代码:
y_true= Yy_pred = xgboostmodel.predict(X)xs = Xdef 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/sstprint(r2(y_true, y_pred))print(predicted_r2(y_true, y_pred, xs))
打印R²是有效的,并且给出的结果是0.87
打印预测的R²只输出none
– 如果有问题的话,这里出了什么问题?
回答:
你似乎在定义predicted_r2
函数后缺少了return
语句。我猜你需要返回函数中之前定义的press
变量:
def predicted_r2(y_true, y_pred, xs): press = press_statistic(y_true=y_true, y_pred=y_pred, xs=xs) return press