【问题标题】:About evaluation method of classification关于分类的评价方法
【发布时间】:2019-05-03 20:43:36
【问题描述】:

我还是第一次学习机器学习的初学者。我正在处理我的研究中的 4 类分类问题。我想计算准确率、精度和召回率。由于数据的数量很少(大约 30 个),因此分数受如何划分为 train-set 和 test-set 的影响。执行交叉验证时,方差很大。(例如准确度为 [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")

【问题讨论】:

    标签: python machine-learning scikit-learn classification


    【解决方案1】:

    首先,欢迎来到 SO!

    30 个样本确实是很小的数据。考虑使用leave-one-out CV,而不是k-fold CV,在n-1 样本上训练你的模型n 次,并且每次测试一个样本。除了计算指标外,您还可以查看模型出错的样本以及原因。

    如果您的模型是确定性的,则运行的折叠数多于样本不会有任何影响。

    无论如何,试着想办法手动或综合增加数据集的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      相关资源
      最近更新 更多