Select Language

AI Technology Community

アンダーサンプリング(undersampling)とオーバーサンプリング(oversampling)

二値分類データが不均衡な場合、モデルの出力に影響を与えます。このとき、データを処理する必要があります。
1:なぜクラスの不均衡がモデルの出力に影響を与えるのか:
多くのモデルの出力クラスは閾値に基づいています。例えば、ロジスティック回帰では0.5未満が反例、それ以上が正例となります。データが不均衡な場合、デフォルトの閾値により、モデルの出力はデータ数の多いクラスに偏ります。
したがって、実際の応用における解決策には以下が含まれます:
1) 分類閾値を調整して、データ数の少ないクラスに偏るようにします。
2)適切な評価基準を選択します。例えば、ROCやF1を選び、正解率(accuracy)ではなくします。
3)サンプリング法(sampling):不均衡の問題を解決します。アンダーサンプリング(undersampling)とオーバーサンプリング(oversampling)の2種類に分けられます。
オーバーサンプリング:正例データを繰り返しますが、実際にはモデルに新しいデータを追加していないため、正例データを過度に強調し、正例のノイズがモデルに与える影響を拡大します。
アンダーサンプリング:大量のデータを破棄します。オーバーサンプリングと同様に過学習の問題があります。
ランダムオーバーサンプリングは、少数クラスのサンプルを単純に複製する戦略を採用しているため、モデルの過学習の問題が発生しやすく、つまり、モデルが学習した情報が過度に特化(Specific)して汎化性(General)に欠けることになります。
4)データ合成:SMOTE(Synthetic Minority Oversampling Technique)つまり合成少数クラスオーバーサンプリング技術です。これはランダムオーバーサンプリングアルゴリズムを改良したもので、SMOTEアルゴリズムの基本的な考え方は、少数クラスのサンプルを分析し、少数クラスのサンプルに基づいて新しいサンプルを人工的に合成してデータセットに追加することです。

経験:
関連参考:

https://blog.csdn.net/Dawei_01/article/details/80846371
確率サンプリング方法の実装:
総サンプルから1/4をサンプリングする実装:random.uniform(0, 1) < 0.025

    #-*- coding:utf-8 -*-
    f = open("./sample_skeleton_test.csv",'r')   
    f_o=open(".//BuyWeight_sample_skeleton_test_sample_2_percent.csv",'w') 
    test_md5_set = set()
    index = 0
    for line in f:
        tokens = line.strip().split(",")
        #tokens[2]が1の場合、正サンプルを表し、1でない場合は、1/4のサンプルをサンプリングします。
        if tokens[2] == '1' or random.uniform(0, 1) < 0.025:
            f_o.write(line)
            test_md5_set.add(tokens[3])
        index += 1
        if index % 1000000 == 0:
            print("current_index:",index)
    f.close()
    f_o.close()
    pickle.dump(test_md5_set, open('./BuyWeight_test_md5_set.p', 'wb'))

原文リンク:https://blog.csdn.net/m0_37870649/article/details/81564397

post
  • 41

    item of content
人工知能に関する知識を共有します。これにはAIアルゴリズム、応用例、データ、モデルなどに関する情報が含まれます。