最初にサンプルが多すぎますか? 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万のなぜ」を問うことができる

ブログ    

推薦する

...

...

AIビジョンを取り入れることで、ガソリンスタンドは非常に「スマート」になることができます

[[354264]]石油貯蔵所、ガソリンスタンド、石油荷降ろしトラックには大量の完成燃料が保管され...

...

...

...

5G と AI のユースケース - 5G が人工知能の実装にどのように役立つか

マイケル・バクスター氏は、5Gは人工知能の可能性を解き放つだろうと語った。しかし、AI と 5G は...

...

...

人工知能XiaoIceが繊維企業向けにオンデマンドカスタマイズを実現するAIデザインプラットフォームを開設

9月23日、2020年中国国際紡織品・アクセサリー(秋冬)博覧会で、高級生地メーカーの陸豊織染が人工...

エスティローダーはAI/AR技術を活用してメイクアップをより洗練させ、近視の人がメイクアップがうまくできないことを心配する必要がなくなる

この化粧品大手は、視覚障害者が簡単に化粧を行えるよう、AIと拡張現実(AR)技術を活用した音声対応の...

WeChatロボットの長期無料導入、初心者でも簡単にAIを始められる

以前、ローカルで WeChat ロボットを構築する方法を紹介しました。昨日、クラスメートから、ローカ...

チャットボットのアーキテクチャモデルと応答メカニズムについての簡単な説明

[51CTO.com クイック翻訳] 気付きましたか? 人工知能はもはや、少数のテクノロジー企業の単...

機械学習の発展の歴史と啓蒙

[[188091]]近年、人工知能の目覚ましい発展、特にAlphaGoと韓国のチェスプレイヤー、イ・...

機械学習とAIを活用してAPIベースのセキュリティソリューションを開発

[[248484]] [51CTO.com クイック翻訳] アプリケーション セキュリティの脅威の背...