Я определил специальную функцию в python для вычисления оценок au c по классам в режиме «один против остальных». Он принимает истинные классы и вероятности для разных классов в качестве входных данных и возвращает по классам au c оценки.
from sklearn.metrics import roc_curve, auc
import pandas as pd
def mclass_auc(y_true, y_pred, n_class):
tp = {}
fp = {}
aucs = {}
for i in range(n_class):
classes = [0]*n_class
classes[i] = 1
fp[i] tp[i], th = roc_curve(y_true.replace(list(range(n_class)), classes), y_pred[:, i])
aucs[i] = auc(fp[i], tp[i])
return aucs
Для простоты я генерирую некоторые значения вероятности, которые не суммируются на единицу.
cola = [np.random.randint(40, 81)/100 for i in range(10000)]
colb = [np.random.randint(30, 801)/1000 for i in range(10000)]
colc = [np.random.randint(40, 81)/200 for i in range(10000)]
coly = [np.random.randint(0, 4) for i in range(10000)]
sample_df = pd.DataFrame({'0':cola, '1':colb, '2':colc, 'y':coly})
y_true = sample_df['y']
y_pred = sample_df[['1','2','3']].values
auc_multiclass(y_true, y_pred, 3)
sql.createDataFrame(sample_df)
В python я могу использовать указанную выше функцию. Может ли кто-нибудь помочь мне рассчитать это в настройке фрейма данных PySpark? Изменение его на pandas фрейм данных и вычисление в этом случае не удалось.