当前位置: 首页 > 知识库问答 >
问题:

如何最好地确定模型的准确性?重复的训练/测试分裂还是CV?

杜元明
2023-03-14

我正在创建一个分类器,它将矢量化的书籍文本作为输入,并作为输出预测书籍是“好”还是“坏”。

我想到的两个选择是:

  1. 运行一个循环,对模型进行测试训练拆分X次,并查看每次拆分的精度
  2. 使用交叉验证(专门使用GroupKFold,以便将每本账簿的5个记录保存在一起,否则将是重大泄漏)

我想尽可能快地在一个小的误差范围内估计精度。重复训练测试的分裂速度较慢,因为即使我按标签分层(选择8本好书和4本坏书进行测试),特定模型的精度也可以从0.6到0.8不等,所以我必须跑很多次才能得到一个准确的估计。

for i in range(0,5):
    dfcopy = df.copy()
    dfcopy = dfcopy.sample(frac=1).reset_index(drop=True)
    X, y = dfcopy.text, dfcopy.label
    groups = dfcopy.title.tolist()

    
    model = MultinomialNB()
    name = 'LR'

    pipe = Pipeline([('cleaner', clean_transformer()),
                     ('vectorizer', bow_vector),
                     ('classifier', model)])

    score = cross_val_score(estimator=pipe, X=X, y=y, groups=groups, cv=GroupKFold())
    print(score)
    print(np.mean(score))

共有1个答案

高晋
2023-03-14

我试着按顺序走:

>

  • 估计模型精度的最佳方法是什么?我还将使用此估计值进行模型比较、调优等。

    CV速度快得多,所以我更愿意使用它。CV在这里使用有意义吗?

      null
      null

    还有一个可能有用的东西是使用Train/Test/Validate集和超参数优化,比如Gridsearch,设置可能需要几个小时,但肯定会有回报。

    如果您决定使用train/test/validate,scikit-learn为您提供了train_test_split函数:

    X, y = df.text, df.label    
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
    
    X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, random_state=1)
    

    如果您决定使用gridsearch进行超参数优化,则需要:

    grid_1 = { 
      "n_estimators": [100,200,500],
      "criterion": ["gini", "entropy"],
      "max_features": ['sqrt','log2',0.2,0.5,0.8],
      "max_depth": [3,4,6,10],
      "min_samples_split": [2, 5, 20,50] 
    }
    
    model = RandomForestClassifier()
    grid_search = GridSearchCV(model, grid_1, n_jobs=-1, cv=5)
    grid_search.fit(X_train, Y_train)
    

    Gridsearch作为优化技术非常简单,但将非常有助于提供更好的结果。如果您希望加深对此主题的理解并进一步增强代码,可以在这里找到使用更复杂的超参数优化策略(如TPE)的示例代码

    最后,您的数据集似乎很小,如果您正在经历一列火车和另一列火车之间的长时间等待,我建议您考虑编写一个小的缓存系统,以减少加载和处理时间。您可以在这里找到一个使用小型缓存系统的示例代码

  •  类似资料:
    • 关于使用Lenet5网络解释MNIST上某些优化器的性能,我有几个问题,以及验证损失/精度与训练损失/精度图确切地告诉我们什么。因此,所有的事情都是在Keras中使用标准的LeNet5网络完成的,它运行了15个历元,批处理大小为128。 有两个图,列车acc vs val acc和列车损失vs val损失。我生成了4个图,因为我运行了两次,一次是validation_split=0.1,一次是va

    • *种子为重复性设置为123,我运行的是3.63 R。

    • 使用Weka对鲍鱼数据集进行ANN和KNN。 ANN正确分类实例的结果3183 76.203%错误分类实例994 23.797%平均绝对误差0.214均方根误差0.3349相对绝对误差58.6486% KNN结果|正确分类实例3211 76.8734%错误分类实例966 23.1266%平均绝对误差0.2142均方根误差0.3361相对绝对误差58.7113% KNN具有较高的精度,而ANN具有较

    • 本文向大家介绍Tensorflow实现在训练好的模型上进行测试,包括了Tensorflow实现在训练好的模型上进行测试的使用技巧和注意事项,需要的朋友参考一下 Tensorflow可以使用训练好的模型对新的数据进行测试,有两种方法:第一种方法是调用模型和训练在同一个py文件中,中情况比较简单;第二种是训练过程和调用模型过程分别在两个py文件中。本文将讲解第二种方法。 模型的保存 tensorflo

    • 本文向大家介绍如何最好地在Google地图上显示HTML5地理位置的准确性?,包括了如何最好地在Google地图上显示HTML5地理位置的准确性?的使用技巧和注意事项,需要的朋友参考一下 要在Google Map上显示HTML5地理位置的准确性,请使用以下代码-

    • 我有这样的代码 现在,为了打印值,如果T是一个类,我想调用对象的打印函数,但是如果T是一个基本数据类型,我只想使用printf。 那么,如何确定模板类型是基本数据类型还是类?