O....o 2025-03-13 20:50 采纳率: 0%
浏览 6

不平衡数据采样后accuracy变低

刚入门求解答!
采样后accuracy降低很多,但交叉验证CVaccuracy上升了。
RandomUnderSampler、 RandomOverSampler、SMOTE、SMOTEENN方法尝试了都这样,试了几个模型没有过拟合。这是怎么回事呀?
只关注CVaccuracy就可以了吗?

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-03-13 20:50
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    不平衡数据采样后accuracy变低

    你遇到了一个非常常见的问题!不平衡数据采样后,模型的accuracy可能会降低,这是因为采样方法可能会引入新的bias。你的尝试使用RandomUnderSampler、RandomOverSampler、SMOTE、SMOTEENN方法都没有解决问题,这可能是因为这些方法都有其局限性。

    首先,让我们来分析一下你的情况:采样后accuracy降低,但交叉验证CVaccuracy上升了。这可能是因为采样方法引入了新的bias,使得模型在训练集上性能下降,但是在测试集上性能上升。

    为了解决这个问题,你可以尝试以下几点:

    1. 使用多样化采样方法:你可以尝试使用多样化采样方法,例如:Adasyn、Borderline SMOTE、Edited SMOTE等。
    2. 使用 oversampling 和 undersampling 结合:你可以尝试使用 oversampling 和 undersampling 结合的方法,例如:SMOTE + RandomUnderSampler。
    3. 使用 cost-sensitive 学习:你可以尝试使用 cost-sensitive 学习,例如:使用 weighted loss function 或者使用 cost-sensitive classifier。
    4. 使用 ensemble 学习:你可以尝试使用 ensemble 学习,例如:使用 bagging 或者使用 boosting。

    以下是一个使用 Adasyn 采样方法的示例代码:

    from imblearn.over_sampling import ADASYN
    from sklearn.datasets import make_classification
    from sklearn.model_selection import train_test_split
    
    # 生成不平衡数据
    X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=5, n_repeated=5, n_classes=2, weights=[0.1, 0.9], random_state=42)
    
    # 切分数据
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    # 采样
    adasyn = ADASYN(random_state=42)
    X_train_res, y_train_res = adasyn.fit_resample(X_train, y_train)
    
    # 训练模型
    from sklearn.linear_model import LogisticRegression
    logreg = LogisticRegression()
    logreg.fit(X_train_res, y_train_res)
    
    # 评估模型
    y_pred = logreg.predict(X_test)
    print("Accuracy:", accuracy_score(y_test, y_pred))
    

    希望这些建议和示例代码能够帮助你解决问题!

    评论

报告相同问题?

问题事件

  • 创建了问题 3月13日