【发布时间】:2016-05-15 12:03:10
【问题描述】:
我正在研究二进制分类模型,分类器是朴素贝叶斯。我有一个几乎平衡的数据集,但是当我预测时收到以下错误消息:
UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.
'precision', 'predicted', average, warn_for)
我正在使用带有 CV k-fold 10 的 gridsearch。测试集和预测包含这两个类,所以我不明白这个消息。我正在为其他 6 个模型处理相同的数据集、训练/测试拆分、cv 和随机种子,并且这些模型运行良好。数据从外部摄取到数据帧中,随机化并固定种子。然后朴素贝叶斯分类模型类在这段代码sn-p之前的文件开头。
X_train, X_test, y_train, y_test, len_train, len_test = \
train_test_split(data['X'], data['y'], data['len'], test_size=0.4)
pipeline = Pipeline([
('classifier', MultinomialNB())
])
cv=StratifiedKFold(len_train, n_folds=10)
len_train = len_train.reshape(-1,1)
len_test = len_test.reshape(-1,1)
params = [
{'classifier__alpha': [0, 0.0001, 0.001, 0.01]}
]
grid = GridSearchCV(
pipeline,
param_grid=params,
refit=True,
n_jobs=-1,
scoring='accuracy',
cv=cv,
)
nb_fit = grid.fit(len_train, y_train)
preds = nb_fit.predict(len_test)
print(confusion_matrix(y_test, preds, labels=['1','0']))
print(classification_report(y_test, preds))
我被python“强迫”改变了系列的形状,也许这就是罪魁祸首?
【问题讨论】:
-
你用的是什么版本的 scikit-learn?@OAK
-
@Farseer 0.17 版。我读到以前的版本有一个错误,不知道这个版本是否也有。
-
此警告意味着对于某些 tp + fp 为零的样本,精度以及 f1 分数未定义,这在计算该样本的精度时会导致 0 / 0。因为 f1 分数是精度函数,所以它也是未定义的,并且都被库设置为 0.0。
-
@OAK 如果满足以下答案,您可以标记为已回答吗?否则,lmk什么都不清楚。谢谢。
标签: python scikit-learn classification