我有一个数据集,它有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------
.............
输出:
我尝试了不同的定标器,即MinMaxScaler、StandardScaler。我试着改变测试序列的分割率,不同的易配分类器参数。我还尝试了来自同一个库的BalancedRandomForestClassifier,但结果是一样的。改变分类器参数中估计器的数量也不会改变结果
这一结果的原因是什么?我能做些什么来提高准确度而不损害召回率?看起来我在代码中做了一些错误的事情,或者我遗漏了一个重要的概念
编辑: 我仍然无法找出我问题的真正原因,但由于没有人回答我的问题,这里有一些关于这个奇怪模型的原因的想法,以防其他人遇到类似问题
你可以尝试其他的ensemble methods来进行课堂学习SMOTEBoost是一种结合了boosting和数据采样方法的方法,essential在每次boosting迭代中注入SMOTE技术
This您可能对这篇文章感兴趣
相关问题 更多 >
编程相关推荐