我是一名初次学习机器学习的初学者。目前在研究中处理4类分类的任务。我希望计算准确率、精确率和召回率。由于数据量较少(约30个),分数会受到训练集和测试集划分方式的影响。执行交叉验证时,方差较大(例如,准确率为[0.83333333 0.72727273 0.44444444])。我不知道该如何评估这个分类器。在这种情况下,我应该进行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")
回答:
首先,欢迎来到SO!
30个样本确实是非常少的数据量。与其使用k折交叉验证,不妨考虑使用留一法交叉验证,每次在n-1
个样本上训练模型,测试一次一个样本。除了计算指标外,您还可以看到模型在哪些样本上出错以及原因。
如果您的模型是确定性的,运行的折数超过样本数不会有任何影响。
无论如何,尽量想办法增加数据集的大小,无论是手动还是合成方式。