我正在尝试预测糖尿病,其中1=为糖尿病,0=非糖尿病,我使用随机森林和决策树。我的数据严重不平衡,导致我的分类器对敏感性的预测为0,对特异性的预测为99。我尝试了几种方法,包括使用SMOTE重新采样我的数据。现在我想要优化模型的精度,以提高真正的正确率,但当我运行网格搜索时,它抛出了以下错误:
UndefinedMetricWarning:精度定义不明确,由于没有预测样本而设置为0.0。
我试着预测,结果和我没有使用精度优化时是一样的。
我的代码如下所示:
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)
有没有人能帮我弄清楚该怎么做,问题出在哪里?
发布于 2019-05-13 19:36:49
问题可能是,由于您的估计器总是返回相同的值,因此y_train
的一些标签永远不会被预测。因此,准确性是无法预测的。你可以在这个帖子上找到类似的问题:
如果您尝试使用以下几行代码,则会收到错误消息:
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就不是零。
https://stackoverflow.com/questions/56111005
复制相似问题