关于分类评价方法

2024-09-30 20:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我还是第一次学习机器学习的初学者。在我的研究中,我正在处理四类分类的问题。我想计算准确度,精密度和召回率。由于数据量小(约30个),如何划分成列车组和测试组对分数有影响。当执行交叉验证时,方差很大(例如精度为[0.83333333 0.727273 0.444444]),我无法评估这个分类器。在这种情况下,我是否执行100或500次交叉验证并计算验证分数的平均值?这是一个很初级的问题,英语很差,我想让你回答这个问题

ava = []
avp = []
avr = []
estimators = [("MinMaxScaler", MinMaxScaler()), 
              ("SVC", SVC(kernel='linear', class_weight='balanced', 
                C=1, decision_function_shape='ovr'))]
pl = Pipeline(estimators)

for i in range(ITER):       
    accuracy = cross_val_score(pl, X, y, cv=StratifiedKFold(n_splits=3, shuffle=True))
    precision = cross_val_score(pl, X, y, scoring='precision_macro', cv=StratifiedKFold(n_splits=3, shuffle=True))
    recall = cross_val_score(pl, X, y, scoring='recall_macro', cv=StratifiedKFold(n_splits=3, shuffle=True))
    ava.append(np.mean(accuracy))
    avp.append(np.mean(precision))
    avr.append(np.mean(recall))
print("cross-val-score accuracy {}times average: ".format(ITER), np.mean(ava), "\n")
print("cross-val-score precision {}times average: ".format(ITER), np.mean(avp), "\n")
print("cross-val-score recall {}times average: ".format(ITER), np.mean(avr), "\n")

Tags: npvalmeancvprecisionplscoreavr
1条回答
网友
1楼 · 发布于 2024-09-30 20:19:21

首先,欢迎来到SO

30个样本确实是很小的数据。代替k-fold CV,考虑做leave-one-out CV,在n-1样本上训练模型n次,每次测试一个样本。除了计算度量之外,您还可以看到模型中哪些样本出错以及为什么出错

如果您的模型是确定性的,那么运行比样本更多的折叠不会产生任何影响

在任何情况下,试着想办法手动或综合地增加数据集的大小

相关问题 更多 >