プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

アンサンブル分類器の構築方法とは?4つの主要手法をわかりやすく解説

アンサンブル分類器(Ensemble Classifier)の基本的な考え方は、元のデータから複数の分類器を構築し、未知の事例を予測する際にそれらの予測結果を集約するというものです。アンサンブル分類器は、いくつかの異なるアプローチによって構築することができます。

アンサンブル分類器を構築する4つの手法

1. 訓練セットを操作する方法

この手法では、元のデータを何らかのサンプリング分布に従って再サンプリングすることで、複数の訓練セットを生成します。サンプリング分布は、どのインスタンスが訓練データとして選ばれやすいかを決定するものであり、試行ごとに変化させることが可能です。生成された各訓練セットに対しては、特定の学習アルゴリズムを用いて分類器を構築します。バギング(Bagging)ブースティング(Boosting)は、訓練セットを操作するアンサンブル手法の代表的な例です。

2. 入力特徴量を操作する方法

この手法では、入力特徴量のサブセットを選択して、それぞれの訓練セットを形成します。サブセットの選択はランダムに行うこともできれば、ドメイン専門家の推奨に基づいて行うことも可能です。これまでの研究により、この手法は冗長な特徴量を多く含むデータセットに対して特に高い効果を発揮することが示されています。ランダムフォレスト(Random Forest)は、入力特徴量を操作するアンサンブル手法であり、決定木をベース分類器として使用する技術です。

3. クラスラベルを操作する方法

この手法は、クラス数が十分に多い場合に活用できます。クラスラベルをA0とA1のような互いに素な2つのサブセットにランダムに分割することで、訓練データを二値分類問題へと変換します。

クラスラベルがサブセットA0に属する訓練インスタンスはクラス0に、サブセットA1に属するものはクラス1に割り当てられます。そして、この再ラベル付けされたインスタンスを使ってベース分類器を訓練します。この「クラスの再ラベル付け」と「モデル構築」のステップを複数回繰り返すことで、ベース分類器のアンサンブルが得られます。

テストインスタンスが与えられると、各ベース分類器Ciがそれぞれクラスラベルを予測します。テストインスタンスがクラス0と予測された場合には、A0に属するすべてのクラスに投票が加算される仕組みです。

4. 学習アルゴリズムを操作する方法

多くの学習アルゴリズムは、工夫次第で同じ訓練データに適用しても複数の異なるモデルを生成できるように変更できます。例えば、人工ニューラルネットワークでは、ネットワークトポロジーやニューロン間接続の初期重みを変えることで、複数のモデルを作成できます。同様に、決定木の成長プロセスにランダム性を注入することで、決定木のアンサンブルを構築することも可能です。

各手法の汎用性と構築方式

最初の3つの手法(訓練セット・入力特徴量・クラスラベルの操作)は、さまざまな種類の分類器に適用できる汎用的なテクニックですが、4つ目の手法は使用する分類器の種類に依存します。

また、ベース分類器の構築は、逐次的(1つずつ順番に)に行うことも、並列的(すべて同時に)に行うこともできます。

訓練セットの生成プロセス

最初のステップは、元のデータDから訓練セットを生成することです。採用するアンサンブル手法の種類に応じて、訓練セットはDそのもの、またはDをわずかに変換したものとなります。訓練セットのサイズは元のデータと同じに保たれますが、インスタンスの分布は同一であるとは限りません。つまり、あるインスタンスは訓練セット内に複数回出現する一方で、一度も出現しないインスタンスも存在しうるのです。

  1. 【Java 9】Optionalクラスに追加された3つの新メソッド(or / ifPresentOrElse / stream)を解説

    Optionalクラスは、null以外の値を保持しているかもしれないし、保持していないかもしれない——そんな状態を表現できるコンテナを提供します。このクラスはJava 8で導入され、コード中でNullPointerExceptionが発生しうる箇所を減らすことを目的としています。さらにJava 9では、デフォルト値の扱いをより柔軟にするための3つの新メソッド、or()、ifPresentOrElse()、stream()が追加されました。 Optional.or() or()メソッドはJava 9で導入され、引数として関数型インターフェースのSupplierを受け取ります。このメソッドは常に

  2. Pythonクラスにおけるゲッター(Getter)とセッター(Setter)とは?基本とPythonicな書き方を解説

    ゲッター(Getter)とセッター(Setter)は、多くのオブジェクト指向プログラミング言語において、データカプセル化の原則を実現するために使われるメソッドです。「ミューテーターメソッド(mutator methods)」と呼ばれることもあります。データカプセル化とは、データと、そのデータを操作するメソッドをひとまとめにすることを指します。ここでいうメソッドとは、データを取得するためのゲッターと、データを変更するためのセッターのことです。この原則に従うと、クラスの属性はプライベートに設定され、外部のコードから隠蔽・保護されます。 Pythonでは@propertyを使うのが定石 残念ながら、