我尝试使用这种技术来纠正非常不平衡的类。
我的数据集有类,例如:
In [123]:
data['CON_CHURN_TOTAL'].value_counts()
Out[123]:
0 100
1 10
Name: CON_CHURN_TOTAL, dtype: int64
我想使用 SMOTETomek 对 0 类样本和 1 类样本进行采样以达到 80:20 的比率。但是,我找不到更正字典的方法。当然,在完整代码中,比率 80:20 将根据行数计算。
当我尝试:
from imblearn.combine import SMOTETomek
smt = SMOTETomek(ratio={1:20, 0:80})
我有错误:
但是这种方法应该适契约(Contract)时进行欠采样和过采样。
不幸的是,由于 404 错误,documentary 现在无法工作。
最佳答案
我又遇到了问题,所以我直接在不平衡学习github上问了这个问题。
这是完整的答案:github.com/scikit-learn-contrib/imbalanced-learn
最重要的:
from sklearn.datasets import load_breast_cancer
import pandas as pd
from imblearn.pipeline import make_pipeline
from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import NearMiss
data = load_breast_cancer()
X = pd.DataFrame(data=data.data, columns=data.feature_names)
count_class_0 = 300
count_class_1 = 300
pipe = make_pipeline(
SMOTE(sampling_strategy={0: count_class_0}),
NearMiss(sampling_strategy={1: count_class_1}
)
X_smt, y_smt = pipe.fit_resample(X, data.target)
关于python - SMOTETomek - 如何将比率设置为固定余额的字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52499788/