ゼファーネットのロゴ

機械学習の分類を理解するための完全なガイド

日付:


概要

機械学習は、さまざまな例から継続的に学習し、それを現実世界の問題に適用し続けるアルゴリズムに関連する教育分野と結びついています。 分類は機械学習のタスクであり、ラベル値を特定のクラスに割り当て、特定のタイプを何らかの種類であると識別できます。 最も基本的な例は、メールを「スパム」または「非スパム」のいずれかに分類できるメール スパム フィルタ システムです。 複数のタイプの分類の課題に遭遇することになりますが、それぞれの課題に使用できるモデルのタイプに特有のアプローチがいくつか存在します。

機械学習における分類予測モデリング

通常、分類とは、特定のタイプのクラス ラベルが、データの指定された入力フィールドから予測される結果である、あらゆる種類の問題を指します。 分類チャレンジのいくつかのタイプは次のとおりです。

  • メールをスパムかどうかの分類
  • 指定された手書き文字を既知の文字かそうでないかに分類します。
  • 最近のユーザーの行動を離脱かそうでないかを分類する

どのモデルでも、モデル自体をトレーニングするための入力と出力の例が多数含まれたトレーニング データセットが必要です。 トレーニング データには、問題の考えられるすべてのシナリオが含まれている必要があり、モデルが正しくトレーニングされるためには、各ラベルに十分なデータが含まれている必要があります。 クラス ラベルは文字列値として返されることが多いため、「スパム」の場合は 0、「スパムなし」の場合は 1 を表すなどの整数にエンコードする必要があります。

機械学習における分類

 画像1

最適なモデルに関する一般理論はありませんが、特定のタスクに対してどのアルゴリズムと構成が最高のパフォーマンスをもたらすかを実験して発見することが期待されています。 分類予測モデリングでは、さまざまなアルゴリズムがその結果と比較されます。 分類精度は、さまざまな予測クラス ラベルに基づいてモデルのパフォーマンスを評価するための興味深い指標です。 分類精度は最良のパラメータではないかもしれませんが、ほとんどの分類タスクの開始点としては適しています。

クラス ラベルの代わりに、特定の入力のクラス メンバーシップの確率の予測を提供するものもあります。そのような場合、ROC 曲線は、4 つのモデルがどの程度正確であるかを示す有用な指標となり得ます。 日常の課題で遭遇する可能性のある分類タスクには、主に XNUMX つの異なるタイプがあります。 一般に、機械学習におけるさまざまな種類の予測モデルは次のとおりです。

  • バイナリ分類
  • マルチラベル分類
  • マルチクラス分類
  • 不均衡な分類

一つずつ見ていきます。

機械学習のための二項分類

バイナリ分類とは、任意の XNUMX つのクラス ラベルのいずれかを出力として与えることができるタスクを指します。 一般に、一方が正常状態、他方が異常状態と考えられます。 次の例は、それらをより深く理解するのに役立ちます。

  • 電子メールスパム検出: 通常状態 – スパムではない、異常状態 – スパム
  • コンバージョン予測: 通常状態 – チャーンなし、異常状態 – チャーン
  • コンバージョン予測:正常状態 – アイテムを購入した、異常状態 – アイテムを購入していない

「がんが検出されなかった」を正常な状態、「がんが検出された」を異常な状態とする例を追加することもできます。 主に使用される表記は、正常な状態には値 0 が割り当てられ、異常な状態のクラスには値 1 が割り当てられるというものです。各例について、出力のベルヌーイ確率を予測するモデルを作成することもできます。 確率について詳しく読むことができます こちら。 つまり、すべてのケースをカバーする離散値を返し、結果の値が 1 または 0 になるように出力を与えます。したがって、XNUMX つの異なる状態に関連付けられた後、モデルはいずれかの値の出力を与えることができます。現在。

バイナリ分類に使用される最も一般的なアルゴリズムは次のとおりです。

  • K最近傍法
  • ロジスティック回帰
  • サポートベクターマシン
  • 決定木
  • ナイーブベイズ

前述のアルゴリズムのうち、一部のアルゴリズムはバイナリ分類を目的として特別に設計されており、ネイティブでは XNUMX 種類を超えるクラスをサポートしません。 このようなアルゴリズムの例としては、サポート ベクター マシンやロジスティック回帰などがあります。 次に、独自のデータセットを作成し、それにバイナリ分類を使用します。 を使用します。 make_blob() scikit-learn モジュールの関数を使用してバイナリ分類データセットを生成します。 以下の例では、1000 つの入力フィーチャを持つ XNUMX つのクラスのいずれかに属する XNUMX 個のサンプルを含むデータセットを使用します。

コー​​ド :

from numpy import where from collections import Counter from sklearn.datasets import make_blobs from matplotlib import pyplot X, y = make_blobs(n_samples=5000,center=2,random_state=1) print(X.shape, y.shape) counter = Counter( y) print(counter) for i in range(10): print(X[i], y[i]) for label, _ in counter.items(): row_ix = where(y == label)[0] pyplot .scatter(X[row_ix, 0], X[row_ix, 1], label=str(label)) pyplot.legend() pyplot.show()

出力:

(5000, 2) (5000,) カウンタ({1: 2500, 0: 2500}) [-11.5739555 -3.2062213] 1 [0.05752883 3.60221288] 0 [-1.03619773 3.97153319] 0 [-8.22983437 3.54309524 -1] 10.49210036 [-4.70600004 - 1] 10.74348914 [-5.9057007 -1 ] 3.20386867 [-4.51629714 0] 1.98063705 [-4.9672959 0 ] 8.61268072 [-3.6579652 -1 ] 10.54840697 [-2.91203705 1 -XNUMX] XNUMX
バイナリ分類

上記の例では、5000 サンプルのデータセットを作成し、それらを入力「X」要素と出力「Y」要素に分割します。 分布から、すべてのインスタンスがクラス 0 またはクラス 1 のいずれかに属し、それぞれに約 50% が存在することがわかります。

データセット内の最初の 10 個の例は、入力値が数値で示されており、ターゲット値はクラス メンバーシップを表す整数です。

次に、入力変数の散布図が作成され、結果の点がクラス値に基づいて色分けされます。 区別できる XNUMX つの異なるクラスターを簡単に確認できます。

マルチクラス分類

この種の分類問題には、固定された XNUMX つのラベルはありませんが、任意の数のラベルを付けることができます。 複数クラス分類の一般的な例としては、次のようなものがあります。

  • 植物の種の分類
  • 顔の分類
  • 光学式文字認識

ここでは正常な結果と異常な結果という概念はありませんが、結果は既知のクラスのさまざまな変数の中の多くの変数のうちの XNUMX つに属します。 また、画像が認識システムの何万もの顔のうちの XNUMX つにどれだけ近いかについて予測するなど、膨大な数のラベルが存在する可能性もあります。

テキストの翻訳モデルのように、シーケンスの次の単語を予測する必要がある別のタイプの課題も、マルチクラス分類と見なすことができます。 この特定のシナリオでは、語彙のすべての単語が、考えられるすべてのクラスの数を定義しており、その数は数百万に及ぶ可能性があります。

このようなタイプのモデルは通常、 カテゴリ分布 二値分類のベルヌーイとは異なります。 カテゴリ分布では、イベントは複数のエンドポイントまたは結果を持つことができるため、モデルは各出力ラベルに対する入力の確率を予測します。

マルチクラス分類に使用される最も一般的なアルゴリズムは次のとおりです。

  • K最近傍法
  • ナイーブベイズ
  • 決定木
  • グラジエントブースト
  • ランダムフォレスト

ここでは、XNUMX つのクラスと他のすべてのクラス (one-vs-rest とも呼ばれる)、またはモデル内のクラスのペアに対する XNUMX つのモデル (one-vs-rest とも呼ばれる) に基づいて、バイナリ分類のアルゴリズムを使用することもできます。対一。

ワン対レスト – ここでの主なタスクは、他のすべてのクラスと比較して各クラスに XNUMX つのモデルを適合させることです。

XNUMX 対 XNUMX – ここでの主なタスクは、クラスのペアごとにバイナリ モデルを定義することです。

scikit 学習モジュールの make_blobs() 関数を使用して、マルチクラス分類の例をもう一度取り上げます。 次のコードはそれを示しています。

コー​​ド :

from numpy import where from collections import Counter from sklearn.datasets import make_blobs from matplotlib import pyplot X, y = make_blobs(n_samples=1000,center=4,random_state=1) print(X.shape, y.shape) counter = Counter( y) print(counter) for i in range(10): print(X[i], y[i]) for label, _ in counter.items(): row_ix = where(y == label)[0] pyplot .scatter(X[row_ix, 0], X[row_ix, 1], label=str(label)) pyplot.legend() pyplot.show()

出力:

(1000, 2) (1000,) カウンタ({1: 250, 2: 250, 0: 250, 3: 250}) [-10.45765533 -3.30899488] 1 [-5.90962043 -7.80717036] 2 [-1.00497975 4.35530142 0] 6.63784922 [ -4.52085249 -3] 6.3466658 [-8.89940182 -2] 4.67047183 [-3.35527602 -3] 5.62742066 [-1.70195987 -3] 6.91064247 [-2.83731201 -3 1.76490462] 5.03668554 [-0 8.70416288] 4.39234621 [-1 -XNUMX] XNUMX
機械学習におけるマルチクラス分類

ここでは、XNUMX つ以上のクラス タイプがあり、それらを異なるタイプに個別に分類できることがわかります。

機械学習のためのマルチラベル分類

マルチラベル分類では、各例で予測できる XNUMX つ以上の特定のクラス ラベルを割り当てる必要がある特定の分類タスクを指します。 基本的な例は、XNUMX 枚の写真に犬やリンゴなどの複数のオブジェクトが含まれる写真の分類です。 主な違いは、XNUMX つだけではなく複数のラベルを予測できることです。

マルチラベル分類にバイナリ分類モデルやマルチクラス分類モデルを使用することはできません。アルゴリズムの修正バージョンを使用して、可能な複数のクラスを組み込み、それらすべてを検索する必要があります。 それは単純な「はい」または「いいえ」のステートメントよりも困難になります。 ここで使用される一般的なアルゴリズムは次のとおりです。

  • マルチラベルのランダムフォレスト
  • マルチラベルデシジョンツリー
  • マルチラベル勾配ブースティング

もう XNUMX つのアプローチは、クラスのタイプごとにラベル予測に個別の分類アルゴリズムを使用することです。 からのライブラリを使用します。 scikit-学ぶ マルチラベル分類データセットを最初から生成します。 次のコードは、1000 個のサンプルと 4 種類のクラスのマルチラベル分類の実例を作成して示しています。

コード:

sklearn.datasets から import make_multilabel_classification X, y = make_multilabel_classification(n_samples=1000, n_features=3, n_classes=4, n_labels=4, random_state=1) print(X.shape, y.shape) for i in range(10): print(X[i], y[i])

出力:

(1000, 3) (1000, 4) [ 8. 11. 13.] [1 1 0 1] [ 5. 15. 21.] [1 1 0 1] [15. 30. 14.] [1 0 0 0] [ 3. 15. 40.] [0 1 0 0] [ 7. 22. 14.] [1 0 0 1] [12. 28. 15.] [1 0 0 0] [7. 30. 24.] [1 1 0 1] [15. 30. 14.] [1 1 1 1] [10. 23. 21.] [1 1 1 1] [10. 19.] [16 1 1 0]

機械学習の不均衡な分類

不均衡な分類とは、各クラスの例の数が不均等に分散されているタスクを指します。 一般に、不均衡分類タスクは、トレーニング データセットの大部分が正常クラス タイプであり、そのうちの少数が異常クラスに属するバイナリ分類ジョブです。

これらの使用例の最も重要な例は次のとおりです。

  • 不正検出
  • 外れ値の検出
  • 医学的診断検査

問題は、いくつかの特殊なテクニックを使用して二項分類タスクに変換されます。 大多数のクラスに対してアンダーサンプリングを使用することも、少数クラスに対してオーバーサンプリングを使用することもできます。 最も顕著な例は次のとおりです。

  • ランダムアンダーサンプリング
  • SMOTE オーバーサンプリング

特別なモデリング アルゴリズムを使用すると、コスト重視の機械学習モデルを含むトレーニング データセットにモデルを当てはめるときに、少数派のクラスにさらに注目することができます。 特に次のような場合:

  • コスト重視のロジスティック回帰
  • コスト重視のデシジョン ツリー
  • コスト重視のサポート ベクター マシン

したがって、モデルを選択した後、モデルにアクセスしてスコアを付ける必要があります。 精度, リコール or F-メジャー スコア。 次に、不均衡分類問題用のデータセットの開発を見てみましょう。 Cを使用しますscikit-learn の分類機能 1000 サンプルの完全に合成された不均衡なバイナリ分類データセットを生成するには

コー​​ド :

from numpy import where from collections import Counter from sklearn.datasets import make_classification from matplotlib import pyplot X, y = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_classes=2, n_clusters_per_class=1,weights= [0.99,0.01]、random_state=1) print(X.shape, y.shape) counter = Counter(y) print(counter) for i in range(10): print(X[i], y[i])ラベルの場合、counter.items() の _: row_ix = where(y == label)[0] pyplot.scatter(X[row_ix, 0], X[row_ix, 1], label=str(label)) pyplot。 legend() pyplot.show() 

出力:

(1000, 2) (1000,) カウンタ({0: 983, 1: 17}) [0.86924745 1.18613612] 0 [1.55110839 1.81032905] 0 [1.29361936 1.01094607] 0 [1.11988947 1.63251786 .0] 1.04235568 [1.12152929 0] 1.18114858 [0.92397607 0] 1.1365562 [1.17652556 0] 0.46291729 [0.72924998 0] 0.18315826 [1.07141766 0] 0.32411648 [0.53515376 0] XNUMX
機械学習における不均衡な分類

ここではラベルの分布がわかり、983 個の要素が 17 つのタイプに属し、0 個だけがもう 0 つのタイプに属しているというクラスの深刻な不均衡がわかります。 予想どおり、タイプ XNUMX またはクラス XNUMX の大部分が確認できます。 この種のデータセットは識別するのがより困難ですが、より一般的で実用的な使用例があります。

まとめ

記事を最後まで読んでいただきありがとうございます。何らかの形で役に立ったと思われる場合は、ネットワークで共有することを忘れないでください。 私による他の記事も読みたい場合は、 ここをクリック LinkedIn または Github でお気軽にご連絡ください。

参考文献

  1. コラボドキュメントへのリンク: https://colab.research.google.com/drive/1EiGZCGypDIHFNuzm71QN16NJxas41vE3?usp=sharing
  2. アーナブモンダル – データエンジニア | Python、C/C++、AWS 開発者 | フリーランスのテックライター

画像ソース

  1. 画像 1 – https://unsplash.com/photos/n6B49lTx7NM

この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、作成者の裁量で使用されています。

PlatoAi。 Web3の再考。 増幅されたデータインテリジェンス。
アクセスするには、ここをクリックしてください。

出典: https://www.analyticsvidhya.com/blog/2021/09/a-complete-guide-to-question-classification-in-machine-learning/

スポット画像

最新のインテリジェンス

スポット画像