最初にサンプルが多すぎますか? 5つのサンプリングアルゴリズムを数分で実行できます

最初にサンプルが多すぎますか? 5つのサンプリングアルゴリズムを数分で実行できます

データサイエンスはアルゴリズムの研究です。この記事では、データを処理するための一般的なサンプリング手法をいくつか紹介します。

[[274956]]

1. 単純無作為抽出

ある集合が集団から選択され、その集合の各メンバーが選択される確率が等しいとします。

次のコードは、データセットから 100 個のサンプル ポイントを選択する方法を示しています。

  1. サンプルdf = df.sample(100)

2. 層別抽出法

[[274957]]

選挙で各候補者の平均得票数を推定したいとします。そして、その国に 3 つの町があるとします。

町Aには100万人の労働者がおり、町Bには200万人の労働者がおり、町Cには300万人の退職者がいます。

すべての有権者からランダムに抽出した 60 人が町の特徴にうまく適合しない可能性があり、その結果、データに偏りが生じ、推定値に重大な誤差が生じる可能性があります。

逆に、町 A、町 B、町 C からそれぞれ 10、20、30 のランダム サンプルを抽出した場合、同じサンプル数であれば、この方法を使用した推定結果の誤差は小さくなります。

これは Python を使用すると簡単に実行できます。

  1. sklearn.model_selection から train_test_split をインポートします
  2. X_train、X_test、y_train、 y_test = train_test_split (X、y、
  3. 階層化=y、
  4. テストサイズ= 0.25 )

3. 池のサンプリング

[[274958]]

一度だけ反復される、数が不明なアイテムの大きなストリームがあると仮定します。データ サイエンティストは、各アイテムが均等に抽選される確率になるように、アイテムのストリームからアイテムをランダムに選択するアルゴリズムを作成できます。このステップをどのように達成するのでしょうか?

無限のアイテムのストリームから 5 つのオブジェクトを抽出しなければならないとします。この場合、各オブジェクトが抽出される確率は等しくなります。

  1. randomdefジェネレータ(max)をインポートします:
  2.  
  3. = 1  
  4. 数値<  最大:  
  5. 数 += 1
  6. 利回り数
  7.  
  8. # ストリームジェネレーターとして作成
  9. ストリーム=ジェネレータ(10000)
  10.  
  11. # 川から貯留層サンプルを採取する
  12. 5 
  13. 貯水池= []
  14. iの場合、enumerate(stream)の要素:
  15. i+1 < = kの場合:
  16. リザーバー.append(要素)
  17. それ以外:
  18. 確率= k /(i+1)
  19. ランダム.ランダム() <  確率:  
  20. # ストリーム内の項目を選択し、すでに選択されている k 個の項目のうち 1 つを削除します
  21. 貯蔵庫[random.choice(range(0,k))] = 要素
  22.  
  23. 印刷(リザーバー)
  24. ------------------------------------
  25. [1369, 4108, 9986, 828, 5589]

サンプルでは、​​各要素がアイテムのストリームから抽出される確率は等しいことが数学的に証明できます。

どうやってやるんですか?

数学に関しては、小さな問題から始めるのが常に役立ちます。

したがって、3 つの項目のみを含むデータ ストリームから 2 つの項目を抽出したいとします。

池には十分なスペースがあるので、項目 1 をリストに追加できます。同様に、池にはまだ十分なスペースがあるので、項目 2 もリストに追加できます。

項目3を見てみましょう。ここからが面白いところです。アイテム 3 が引かれる確率は 2/3 です。

次に、アイテム 1 が抽選される確率を見てみましょう。

項目 1 が選択される確率は、項目 3 が選択される確率に、データ ストリーム内の他の 2 つの項目の候補として項目 1 がランダムに選択される確率を掛けたものに等しくなります。つまり、次のようになります。

  1. 2 /3*1/ 2 = 1/3

したがって、アイテム 1 を引く確率は次のようになります。

  1. 1–1 / 3 = 2/3

データ サイエンティストは、プロジェクト 2 にまったく同じパラメータを使用し、それをデータ フロー内の他のプロジェクトに適用できます。

したがって、各アイテムが選択される確率は同じです:2/3または一般にk/n

4. ランダムアンダーサンプリングとランダムオーバーサンプリング

実際、不均衡なデータセットは非常に一般的です。

再サンプリングは、極端に不均衡なデータセットを処理するために広く使用されている手法です。これは、多数派クラスから一部のサンプルを除外すること (アンダーサンプリング)、および/または少数派クラスからさらにサンプルを追加すること (オーバーサンプリング) を指します。

まず、不均衡なデータの例をいくつか作成します。

  1. sklearn.datasets から make_classification をインポートします
  2.  
  3. X, y =分類する(
  4. n_classes = 2 class_sep = 1.5 重み= [0.9, 0.1]、
  5. n_informative = 3 n_redundant = 1 flip_y = 0
  6. n_features = 20 n_clusters_per_class = 1
  7. n_samples = 100 ランダム状態= 10  
  8.  
  9. X = pd.データフレーム(X)
  10. X['ターゲット'] = y

ランダム オーバーサンプリングとアンダーサンプリングは、次の方法を使用して実行できるようになりました。

  1. num_0 =長さ(X[X['target']==0])
  2. num_1 =長さ(X[X['target']==1])
  3. 印刷(num_0,num_1)
  4.  
  5. # ランダムアンダーサンプル
  6.  
  7. アンダーサンプリングされたデータ= pd .concat([ X[X['target']==0].sample(num_1) , X[X['target']==1] ])
  8. print(len(アンダーサンプリングされたデータ))
  9.  
  10. # ランダムオーバーサンプル
  11.  
  12. オーバーサンプリングされたデータ= pd .concat([ X[X['target']==0] , X[X['target']==1].sample(num_0, replace = True ) ])
  13. print(len(オーバーサンプリングされたデータ))
  14.  
  15. ------------------------------------------------------------
  16. 出力:
  17. 90 10
  18. 20
  19. 180

5. 不均衡学習を用いたアンダーサンプリングとオーバーサンプリング

Imbalanced-learn (imblearn) は、不均衡なデータセットを解決するための Python パッケージです。

アンダーサンプリングとオーバーサンプリングにはいくつかの方法があります。

(1)Tomek Linksを用いたアンダーサンプリング:

Imbalanced-learn が提供する方法の 1 つは、2 つの異なるクラスのサンプル内の最も近い近傍を参照する Tomek Links です。

このアルゴリズムでは、大多数のクラス サンプルが最終的に Tomek リンクから削除され、分類器の決定境界が改善されます。

  1. imblearn.under_sampling から TomekLinks をインポート
  2.  
  3. tl = TomekLinks ( return_indices = True ratio = 'majority' )
  4. X_tl、y_tl、 id_tl = tl.fit_sample(X、y)

(2)SMOTEアルゴリズムを用いたオーバーサンプリング

SMOTE アルゴリズム (Synthetic Minority Oversampling Technology) は、既存のサンプルに最も近い近傍の中から少数クラスのサンプルの新しいサンプルを人工的に合成します。

  1. imblearn.over_sampling から SMOTE をインポートします
  2.  
  3. smote = SMOTE (比率= '少数派' )
  4. X_sm、 y_sm = smote.fit_sample (X、y)

Imblearn パッケージには、アンダーサンプリング (Cluster Centroids、NearMiss など) とオーバーサンプリング (ADASYN および bSMOTE) のための他の多くの方法があります。

結論

アルゴリズムはデータサイエンスの生命線です。

サンプリングはデータサイエンスにおける重要なトピックです。適切なサンプリング戦略は、プロジェクト全体を前進させるのに役立つ場合があります。間違ったサンプリング戦略は間違った結果につながる可能性があります。したがって、サンプリング戦略は慎重に選択する必要があります。

<<:  データサイエンスにおける強力な思考

>>:  相関関係は因果関係ではない。ディープラーニングによりAIは「10万のなぜ」を問うことができる

ブログ    
ブログ    
ブログ    

推薦する

あなたは統計学者になれますか?トランスフォーマーの強力な学習メカニズム「自動アルゴリズム選択」

ChatGPT などの大規模な Transformer ベースの言語モデルには、非常に強力なコンテ...

インテリジェントロボットはCOVID-19の流行とどのように戦うのでしょうか?

【51CTO.comオリジナル記事】 COVID -19の流行がもたらした厳しい課題に直面して、科...

...

ビジネスの自動化は、企業のデジタル変革における重要な課題となっている。

多くの企業が、ロボティック・プロセス・オートメーション(RPA)を監督することを主な責務とする最高オ...

ヴィンセントビデオの「ダークホース」モーフスタジオが登場: 使いやすく、1080P、7秒の長さ、無料

「光るクラゲがゆっくりと海から浮上し、夜空に輝く星座になります」と、Morph Studio で見た...

ボストン・ダイナミクスの最新倉庫ロボットは1時間あたり800個のレンガを移動できる

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

データ + 進化的アルゴリズム = データ駆動型進化的最適化?進化的アルゴリズムと数学的最適化

データ駆動型進化的最適化とは何ですか? それは単なるデータ + 最適化アルゴリズムですか? データ駆...

...

2022QSリスト公開! MITがコンピュータサイエンスランキングでトップ、清華大学は15位、北京大学はトップ20から脱落

2022年QS世界大学分野別ランキングが発表されました!全体的には、21年前と比べて大きな変化はあり...

AIのために知っておくべき10のディープラーニング手法

[[211929]] AIであろうと他の分野であろうと、学習と研究の過程で、その分野の歴史を常に振り...

...

ジェネレーティブAIの力を最大限に引き出す方法

生成 AI により、機械はコンテンツを作成し、人間の行動を模倣し、創造的な仕事に貢献できるようになり...

クラウド セキュリティにおける生成 AI: アクションよりもノイズが多い? !

翻訳者 | ジン・ヤンレビュー | Chonglou人工知能はクラウド セキュリティの次の大きなトレ...

...