はじめに
こんにちは、現在0からPythonを学んでいる初心者エンジニアです。
この投稿は私が学んだことのアウトプットの場として、そして私と同じ初心者エンジニアさんの少しでも役に立てればと思い、投稿しています。私自身も全くの初心者なので、感想やアドバイスあれば、気軽にコメント頂けると幸いです。
パターン認識とは
今回はパターン認識に関する説明を書きたいと思います。
今回はあくまでもパターン認識とは何かを簡単に説明し、具体的なコードはまた次回以降の記事で書きたいと思います。
パターンとは、物理的外界に存在する対象が、他の対象と区別されるための物理量や概念データのまとまりをいい、パターン認識とは、画像、音声などのデータの分類、判別、識別を行う方法です。
パターン認識には様々な方法論がありますが、今回はクラス分類とクラスタリングに関して説明したいと思います。
パターン認識方法
クラス分類やクラスタリングの方法を例題を交えて紹介します。
例題
今、ボールの分類を考える。手元に球形のボール{サッカーボール、野球ボール、バスケットボール、テニスボール、バレーボール}と、球形ではないボール{ラグビーボール}が混在して多数あるとする。これらを何かしらの手段で、球形かどうか、また、球形であるならば何ボールか自動的に分類したい。このため次のものを用意する。
- 特徴抽出機:センサを用いて物理量を測り特徴量を抽出する。
- 特徴ベクトル:効果認識のために複数の特徴量をベクトル形式で表したもの。
- クラス:似たような特徴を持つデータの集合、つまり、特徴空間上で近くにあるデータのグループを表す。今回の場合、6種類の球形のボールと球形ではないボールの7つのクラスがある。
- クラス分類機:特徴ベクトルを用いて、どのクラスに属するかのパターン認識を行い、その結果をクラスとして出力する。
特徴ベクトルは、例えば次のように表されるものとする。
特徴ベクトル=[直径、重さ、真円度、反発係数]
このような例題を解く場合に、あらかじめクラスと特徴ベクトルを照合して、クラス分類機を作成し、新たな未知のボールを入力した時、これがどのクラスであるかを出力します。これがクラス分類であり、パターン認識の一種です。この考え方は、事前にクラスを分かった上で照合できることから、教師あり学習と呼ばれています。
クラス分類とは異なり、クラスが未知である場合、特徴ベクトルの似たもの同士のかたまり(クラスタという)をいくつか作成し、区別するという考え方をクラスタリングといいます。これもパターン認識の一種であり、ここにはクラス分類のようにクラスは事前に与えられていないので、教師なし学習と呼ばれています。
なお、クラス分類、クラスタリングを含めて、パターン認識器の構築において構成するパラメータを求めるのに用いるデータをトレーニングデータ、作成したものが正しく機能するか否かを試験するために用いられるデータをテストデータといいます。本来ならば、テストデータは新たに得られノノが望ましいですが、しかし、実際にはデータ数が少ないことが多いため、このデータをトレーニングデータとテストデータに分割して用いることがあります。この分割の方法として、ホールドアウトと交差検証があげられます。
ホールドアウト:データセットをトレーニングデータとテストデータにランダムに分割する方法。通常は、トレーニングデータの割合が70〜80%で、テストデータの割合が20〜30%になる。簡易ではあるが、分離した片方のデータに偏りがあると、クラス分類器の性能を保証できないという欠点がある。
交差検証:データセットをk個に分割し、そのうちの(k-1)個をトレーニングデータ、残り1個をテストデータに割り当てる。この割り当てを、順繰りにk回繰り返し、計算結果の評価を行う方法。
上記のようにデータを扱うことがパターン認識ではよく行われます。
今回は最後に具体的にどのような方法を用いてパターン認識を行うのか紹介して、記事を締めたいと思います。
パターン認識方法の紹介
具体的なパターン認識の方法を数個紹介します。
クラス分類
- サポートベクタマシン(SVM):与えられた入力データを2つまたはそれ以上のクラスに分類するために使用される方法。非線形にも対応する。
- kNN:入力データに最も近いk個のトレーニングデータのクラスを参照し、多数決によって入力データを分類する方法。ただし、ノンパラメトリックのため、数式でクラス分類できない。
クラスタリング
- 非階層型:データセット全体を1つのクラスターに分割し、分割の良さの評価関数に基づき分類を探索する方法。代表的な方法にk-meanがある。
- 階層型:データセットを類似度の高いものから順にまとめ、階層的なクラスターに分割する方法。凝集型と分割型の2つの方法があり、凝集型クラスタリングでは、最初に各データポイントを1つのクラスターと見なし、近いクラスターをマージする。分割型クラスタリングでは、最初にすべてのデータポイントを1つのクラスターとして見なし、近いクラスターを分割する。
まとめ
以上が、パターン認識の簡単な説明になります。最初にも書きましたが具体的なコードはまた次回以降とさせて頂きます。
最後まで読んで頂きありがとうございました。引き続き私と一緒に研鑽していきましょう。
参考
橋本洋志,牧野浩二."データサイエンス教本 Pythonで学ぶ統計分析・パターン認識・深層学習・信号処理・時系列データ分析".オーム社,2018