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
当使用交叉验证时,它会分割整个列车组,以便列车和测试(在cv中)具有相同的分布。如果有10个标记为“A”的对象,约占整个示例的20%,它会将其拆分为多个组,其中每个组有2个标记为“A”的对象,因此它也将占测试的20%
但是,当标签“a”只有一个对象(该类的一行)并且您尝试将其拆分为5个组时,会发生什么情况?这是一个错误。它不知道如何处理这个问题
如果不知道您的数据是什么样子以及您的需求是什么,就有点难以说出如何解决它。不同的问题可能有不同的解决方案
你可以:
KFolds
,这并不要求cv中的组具有相同的分布李>相关问题 更多 >
编程相关推荐