首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么优化模型的精确度会抛出错误:精确度定义不明确,由于没有预测样本而被设置为0.0?

为什么优化模型的精确度会抛出错误:精确度定义不明确,由于没有预测样本而被设置为0.0?
EN

Stack Overflow用户
提问于 2019-05-13 19:00:28
回答 1查看 316关注 0票数 1

我正在尝试预测糖尿病,其中1=为糖尿病,0=非糖尿病,我使用随机森林和决策树。我的数据严重不平衡,导致我的分类器对敏感性的预测为0,对特异性的预测为99。我尝试了几种方法,包括使用SMOTE重新采样我的数据。现在我想要优化模型的精度,以提高真正的正确率,但当我运行网格搜索时,它抛出了以下错误:

UndefinedMetricWarning:精度定义不明确,由于没有预测样本而设置为0.0。

我试着预测,结果和我没有使用精度优化时是一样的。

我的代码如下所示:

代码语言:javascript
运行
复制
cl = RandomForestClassifier() 
params = {  
    'n_estimators': [100, 300, 500, 800, 1000],
    'criterion': ['gini', 'entropy'],
    'bootstrap': [True, False],
    'max_features': ['auto', 'sqrt', 'log2'],
    'max_depth' : [4,5,6,7,8],
}

scorers = {
    'precision_score': make_scorer(precision_score),
    'recall_score': make_scorer(recall_score),
    'accuracy_score': make_scorer(accuracy_score)
}

clff = GridSearchCV(estimator=cl, scoring= scorers, param_grid=params, refit='precision_score', cv=5, verbose=0)

forestscore= clff.fit(X_train, y_train) 

有没有人能帮我弄清楚该怎么做,问题出在哪里?

EN

回答 1

Stack Overflow用户

发布于 2019-05-13 19:36:49

问题可能是,由于您的估计器总是返回相同的值,因此y_train的一些标签永远不会被预测。因此,准确性是无法预测的。你可以在这个帖子上找到类似的问题:

UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples

如果您尝试使用以下几行代码,则会收到错误消息:

代码语言:javascript
运行
复制
from sklearn.metrics import precision_score
y_true = [0, 1, 1, 0, 1, 1]
y_pred = [0, 0, 0, 0, 0, 0]
precision_score(y_true, y_pred)

UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
0.0

精度分数似乎需要二进制值才能正确计算分数。由于您的一个向量(在本例中的预测向量)仅由0组成,因此无法计算分数,然后将其设置为0.0

摆脱这个警告的解决方案是用你的估计器成功计算1,这样给得分函数的预测y就不是零。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56111005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档