【機械学習】パーセプトロン(Perceptron)について。

公開日: : 最終更新日:2018/05/13 機械学習 , , ,

パーセプトロンは、教師あり学習の中でも、入出力モデルベース(eager learning:働き者の学習)に分類され、その中で最も単純なモデルとなります。

Contents

パーセプトロンの特徴

パーセプトロンには、以下の特徴があります。

  • 2値クラス分類のみに対応している(多クラス分類には適応できない)。
  • 学習データが線形分離可能(linearly separable)であれば、それらを正しく2値クラスに分離する平面をみつけることができます。線形分離なので、例えば2次元の場合は、直線で分離可能だということになる。
  • 重みベクトルから重要な特徴量(識別に効いている)が推測できる。
  • 線形分離可能でないと性能が落ちる。そのため、パーセプトロンを組み合わせて使うとニューラルネットワークになる。

パーセプトロンで用いる定義について

パーセプトロンで用いる記号をここで定義しておきます。

パーセプトロンは2値クラス分類なので、出力 \(y(x)\)  は正例(+1)もしくは負例(-1)の2種類となります。

$$出力 y(x)=f(w^T\phi(x))$$

$$\phi(x):特徴ベクトル$$

$$w:重みベクトル$$

$$階段関数 f(a)=\{+1, a\geq0\\-1,a<0\}$$

事例 X の 特徴ベクトルを \(\phi(x)\) とします。ただし、特徴ベクトルの要素の1番最初にバイアス要素である \(\phi_0(x)=1\) を追加したものを \(\phi(x)\) とします。ちなみに「\(\phi\)」は Phi と読みます。

出力 \(y(x)\) は、重みベクトル \(w\) と特徴ベクトル \(\phi(x)\) の内積が0以上か0未満かで判定されます。

階段関数は、+1か-1かを出力するために用いられます。

重みベクトルを以下のアルゴリズムで学習していきます。

パーセプトロンの学習アルゴリズム

パーセプトロンの学習アルゴリズムは単純な作業の繰り返しとなります。

  1. 重みベクトルを \(w=(0,0,0,…)\) で初期化する。
  2. 学習データからランダムに事例を選択する。
  3. 分類が間違っていたら以下の式で重みベクトルを更新する。
    • 正例が正解なのに間違っていた場合:\( w ← w + \phi(x) \)
    • 負例が正解なのに間違っていた場合:\( w ← w - \phi(x) \)
  4. 2に戻る。(※全ての事例が正しく分類できるまで繰り返す。)

平均化パーセプトロン(Averaged Perceptron)

通常のパーセプトロンでは、ノイズが含まれる場合、振動して不安定となります。また、学習の最後の方で選んだサンプルに引きずられやすいというデメリットがあります。

それらのデメリットを補うなために、パーセプトロンの学習アルゴリズムを少しだけ変形したものが平均化パーセプトロンです。分類が間違っていたときの重みベクトル更新部分で、重みベクトルをそのまま使うのではなく、全ステップの重みベクトルを平均したものを使います。

そうすることによって、ロバストな挙動を示す、実用的で高性能な機械学習アルゴリズムになります。

関連記事

【Weka】フリーの機械学習ソフトをインストールする方法。

Weka は、GUIで使えるフリーの機械学習ソフトです。 https://ja.wikiped

記事を読む

【機械学習】 scikit-learn で精度・再現率・F値を算出する方法【Python】

今回は、2クラス分類で Python の scikit-learn を使った評価指標である、精度(P

記事を読む

【深層学習】 TensorFlow と Keras をインストールする【Python】

今回は、Google Colaboratory 上で、深層学習(DeepLearning)フレームワ

記事を読む

【TensorFlow】GPUを認識しない時の対処方法【Python】

TensorFlow で GPU を認識させようとしたときにハマってしまったので、その対処方法のメモ

記事を読む

【機械学習・手法比較】決定木とナイーブベイズを比較してみた。

同じデータを使って、教師有り機械学習手法の 決定木(Decision Tree)とナイーブベイズ(N

記事を読む

【PyTorch】畳込みニューラルネットワークを構築する方法【CNN】

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)を構築する方法について紹介しま

記事を読む

【Weka】欠損データを自動的に補完するフィルタを使ってみた。

機械学習で用いるデータについてです。データは完璧なことに越したことはないが、通常は、ある属性の値が入

記事を読む

【Weka】ARFF 形式から CSV 形式に簡単に変換する方法。

フリーのデータマイニングツールである WEKA では、ARFF 形式と CSV 形式のデータを読み込

記事を読む

【Weka】CSVファイルを読み込んで決定木を実行。

フリーの機械学習ソフト Weka を使って、CSVファイルを読み込んで決定木(Decision Tr

記事を読む

【PyTorch】ニューラルネットワークを構築する方法【NN】

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築したときのメモです。 フ

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

【Cubase】イヤホンから音がでないときの対処方法。

Cubase でイヤホンから音がでなくなったときの対処方法のメモです。

【Cubase】特定のトラックを無効にする方法。

今回は、Cubaseで特定のトラックのみを無効にする方法について紹介し

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用い

【PyTorch】畳込みニューラルネットワークを構築する方法【CNN】

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)

【PyTorch】ニューラルネットワークを構築する方法【NN】

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築

→もっと見る

PAGE TOP ↑