207类(多个有一个对象),电影

2024-06-12 02:05:18 发布

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

Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=1/3, random_state=85)
models = [
    RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42),
    LinearSVC(),
    MultinomialNB(),
    LogisticRegression(random_state=0),
]

# 5 Cross-validation
CV = 5
cv_df = pd.DataFrame(index=range(CV * len(models)))

entries = []
for model in models:
  model_name = model.__class__.__name__
  accuracies = cross_val_score(model, features, labels, scoring='accuracy', cv=CV)
  for fold_idx, accuracy in enumerate(accuracies):
    entries.append((model_name, fold_idx, accuracy))
    
cv_df = pd.DataFrame(entries, columns=['model_name', 'fold_idx', 'accuracy'])

错误:

UserWarning:y中填充最少的类只有1个成员,小于n_splits=5


Tags: nametestdataframedfmodelmodelsrandomfold
1条回答
网友
1楼 · 发布于 2024-06-12 02:05:18

当使用交叉验证时,它会分割整个列车组,以便列车和测试(在cv中)具有相同的分布。如果有10个标记为“A”的对象,约占整个示例的20%,它会将其拆分为多个组,其中每个组有2个标记为“A”的对象,因此它也将占测试的20%

但是,当标签“a”只有一个对象(该类的一行)并且您尝试将其拆分为5个组时,会发生什么情况?这是一个错误。它不知道如何处理这个问题

如果不知道您的数据是什么样子以及您的需求是什么,就有点难以说出如何解决它。不同的问题可能有不同的解决方案

你可以:

  1. 从数据集中删除有问题的标签。检查所有极低频率的课程,并将它们分组为“其他”或类似的内容
  2. 放弃cv并使用KFolds,这并不要求cv中的组具有相同的分布

相关问题 更多 >