我正在尝试预测糖尿病,其中1 =糖尿病,0 =非糖尿病,我正在使用随机森林和决策树。我的数据严重失衡,导致我的分类器预测灵敏度为0,特异性为99。尝试了几种方法,包括使用SMOTE重新采样我的数据。现在,我想优化模型的精度以增加真实的阳性率,但是当我运行gridsearch时,它会引发以下错误:
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)
有人可以帮助我了解该怎么办以及问题出在哪里吗?
答案 0 :(得分:0)
问题可能在于,由于估算器总是返回相同的值,因此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
摆脱此警告的解决方案将是使用您的估计器成功计算1s,因此赋予得分函数的预测y不为零。