高召回率,低精度,易识别分类器

2024-09-29 23:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,它有450.000个数据点、12个特征和标签(0或1)。我使用的是python的IMBRearn库,因为我的数据集是不平衡的(比率=1:50,类1是少数)。我使用EasyEnsembleClassifier作为分类器。我的问题是;从下图可以看出,我的召回率很高,但精确度很低(召回率90%,精确度8%,f1分数14%)

这是我的密码:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from dask_ml.preprocessing import RobustScaler
from imblearn.ensemble import EasyEnsembleClassifier
from sklearn.metrics import classification_report, f1_score, accuracy_score, precision_score, confusion_matrix
from sklearn import metrics

df = read_csv(...)
X = df[['features...']]
y = df['label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
scaler = RobustScaler()
X_train = scaler.fit_transform(X_train)
clf = EasyEnsembleClassifier(n_estimators=50, n_jobs=-1, sampling_strategy = 1.0)

clf.fit(X_train, y_train)
X_test = scaler.transform(X_test)
y_pred = clf.predict(X_test)

------code for report------
.............

输出:

Classification Report

我尝试了不同的定标器,即MinMaxScaler、StandardScaler。我试着改变测试序列的分割率,不同的易配分类器参数。我还尝试了来自同一个库的BalancedRandomForestClassifier,但结果是一样的。改变分类器参数中估计器的数量也不会改变结果

这一结果的原因是什么?我能做些什么来提高准确度而不损害召回率?看起来我在代码中做了一些错误的事情,或者我遗漏了一个重要的概念

编辑: 我仍然无法找出我问题的真正原因,但由于没有人回答我的问题,这里有一些关于这个奇怪模型的原因的想法,以防其他人遇到类似问题

  • 很可能我的数据集标签不好。模型可能无法区分类,因为它们非常相似。我将尝试生成一些合成数据来再次训练我的模型
  • 我没有对此进行测试,但某些功能可能会损害模型。我需要进行目视检查,找出特征之间是否存在相关性,并删除其中一些特征,但我高度怀疑这是问题所在,因为增强分类器应该通过对每个特征加权来自动处理此问题
  • 另外,在我的例子中,12个特性可能还不够。我可能需要更多。虽然要让我的数据集生成更多的特征并不容易,但我会考虑它
  • 最后,可能欠采样不适合我的数据集。如果我感到足够绝望,我会尝试过采样技术或打击

Tags: 数据from模型testimportdf分类器原因

热门问题