我正在尝试使用一种名为“SERA”(平方误差相关区域)的新指标作为本文中提到的不平衡回归的自定义评分函数。https://link.springer.com/article/10.1007/s10994-020-05900-9 https://link.springer.com/article/10.1007/s10994-020-05900-9
以下是该论文的简要介绍。为了计算 SERA,每个特征标签对都需要用户定义的称为“相关性”的特征。相关性从 0 到 1 变化。0 表示不相关,1 表示高度相关。
这就是SERA 的计算过程。
相关性从 0 到 1 小步变化。对于每个相关性 (phi) 值(例如 0.45),选择训练数据集的一个子集,其中相关性大于或等于该值(例如 0.45)。对于选定的训练子集,计算平方误差之和,即 sum(y_true - y_pred)**2,称为平方误差相关性 (SER)。然后计算我们为 SER 与 phi 和曲线下面积创建的图,即 SERA。
这是我使用 make_scorer 在 python 中为 sklearn 编写的代码。我运行了这段代码,但出现错误。
import pandas as pd
from scipy.integrate import simps
from sklearn.metrics import make_scorer
def calc_sera(y_true, y_pred, x_relevance=None):
# creating a list from 0 to 1 with 0.001 interval
start_range = 0
end_range = 1
interval_size = 0.001
list_1 = [round(val * interval_size, 3) for val in range(1, 1000)]
list_1.append(start_range)
list_1.append(end_range)
epsilon = sorted(list_1, key=lambda x: float(x))
# Initiating lists to store relevance(phi) and squared-error relevance (ser)
relevance = []
ser = []
# Converting the dataframe to a numpy array
rel_arr = x_relevance.to_numpy()
# selecting a phi value
for phi in epsilon:
relevance.append(phi)
error_squared_sum = 0
for i in rel_arr:
# Getting the subset of the training data
if i >= phi:
# Error calculation
error_squared_sum += (y_true - y_pred)**2
ser.append(error_squared_sum)
# squared-error relevance area (sera)
# numerical integration using simps(y, x)
sera = simps(ser, relevance)
return sera
score = make_scorer(calc_sera, x_relevance=df['Relevance'], greater_is_better=False)
VisibleDeprecationWarning:不推荐从不规则的嵌套序列(这是具有不同长度或形状的列表或元组或 ndarray 的列表或元组)创建 ndarray 。如果您打算这样做,则必须在创建 ndarray 时指定 'dtype=object'
返回数组(a,dtype,复制=假,顺序=顺序)
作业异常:评分必须返回一个数字,而是得到 [.....] () 。 (得分者=得分)
谁能帮我解决这个问题吗?