線形識別によるパターン認識
@maroon_kuri
パターン認識とは
• 与えられたデータから有効な特徴を抽出し、
それをもとに、どんな型(パターン)に属する
かを識別する
• あらかじめ、たくさんのデータをもとに、
識別規則を学習しておく
線形識別とは
• 入力が、D個のデータ𝑥1, 𝑥2 … 𝑥 𝐷
で与えられるとする
• それらを、D次元空間上の一点として考える
• いくつかのD-1次元超平面で空間をいい感じ
に区切り、どの部分に属するかで識別する
線形認識
• D=2の場合
• 学習データ
たぶんここら辺
が区切りになってる
線形認識
• いい感じの区切り方をどうやって求めるか
• 入力データをD次元ベクトル𝑥とし、
クラス1~Kに分類するとする
• 線形関数𝐹𝑖(𝑥)が最大となる𝑖が𝑥の
クラスになるようにする!
• 𝐹𝑖(𝑥)はどうやって求めるの?
• 𝐹𝑖(𝑥)は線形関数なので、
D+1次元ベクトル𝑤𝑖を使って、
𝐹𝑖 𝑥 = 𝑤𝑖,0 +
𝑗=1
𝐷
𝑤𝑖,𝑗 ∗ 𝑥𝑗
と表せる(ここで、𝑤𝑖は縦ベクトルとしておく)
• 全ての𝑖について、𝑤𝑖を求めればいい
線形認識
線形認識
• 𝑤𝑖を学習データから求める
• 方法は何通りかある
• 2乗誤差最小基準
• フィッシャーの判別関数
• ロジスティック回帰
• 今回は、2乗誤差最小基準を使った
2乗誤差最小基準
• N個の学習データを基に𝑤𝑖を求める
• 𝑗番目の入力データの先頭に1を
付け足したベクトルを𝑥𝑗とすると、
𝐹𝑖 𝑥 = 𝑑𝑜𝑡 𝑤𝑖, 𝑥𝑗
と表現できる。(𝑥𝑗は縦ベクトルとする)
• 𝑗番目の入力に対応するクラスを𝑐𝑗とおき、
K次元ベクトル𝑡𝑗 = 0,0, … 1 … 0,0 T
を定義する(𝑡𝑗の𝑐𝑗番目のみが1)
𝑤𝑖,0 × 1
𝑤𝑖,1 × 𝑥𝑗,1
𝑤𝑖,2 × 𝑥𝑗,2
. .
. .
𝑤𝑖,𝐷 × 𝑥𝑗,𝐷
2乗誤差最小基準
𝑗=1
𝑁
𝑡𝑗,𝑖 − 𝐹𝑖 𝑥𝑗
2
を最小化する𝑤𝑖を求める
2乗誤差最小基準
• 行列𝑋 = (𝑥1, 𝑥2, … 𝑥 𝑁)T
• 行列𝑇 = (𝑡1, 𝑡2, … 𝑡 𝑁)T
• 行列𝑊 = 𝑤1, 𝑤2, … 𝑤 𝑘
と定義する
• 2乗誤差を最小にするWは、
𝑊 = 𝑋 𝑇 𝑋 −1
𝑋𝑇𝑇
で求められる(導出は省略)
実践
• Kaggleの問題に挑戦してみた
• 問題概要
• 手書きの0~9の文字を認識する
• 画像一枚は28x28ピクセルで構成されていて、
数字が一つ書かれている
• 学習用データとして、42000枚の画像が与え
られる
• 28000このテストデータに回答する
2乗誤差最小基準
• 画像データの1ピクセルを一つの要素とした
ベクトルとしてそのまま実装する
• ダメダメ
• なぜか
2乗誤差最小基準
• 画像データをベクトルとした場合、うまく線形
関数では区切ることができない
• ほかの特徴抽出の方法を考える必要がある
特徴抽出
• その1
• 縦、横、斜め2方向それぞれについて、
連続する最長の色が塗られているピクセルの
個数を数えて、特徴とする
横方向 13
縦方向 6
斜め↘ 4
斜め↙ 15
特徴抽出
• その2
• 色のついたピクセルの位置の、X座標、
Y座標について、それぞれ分散を求め
特徴とする
X座標の分散 0.8192
Y座標の分散 30.963
特徴抽出
• その3
• 文字のエッジをすべて検出し、その方向をい
くつかに分類、その個数を特徴とする
特徴抽出
• 今あげた3つの特徴を用いた線形識別機
を実装し、使ってみた
• 識別率は6割弱・・・
おわりに
• 手書き文字認識を線形識別機でやるのは
間違いだった(気がする)
• 動作だけはほかの方法よりすごく早い
• 線形識別が有効な問題は限られている
と思うので、別のアルゴリズムについて
学べばよかった

線形識別によるパターン認識