ブック・インサイド『Python機械学習プログラミング』―単純な例でADALINEのイメージをつかむ

2016年9月16日(金)
福島 真太朗(ふくしま しんたろう)
今回も前回に引き続き、書籍『Python機械学習プログラミング』の2章の内容についてより分かりやすく理解するためのヒントを解説していきます。今回は、ADALINEのイメージがつかめるように、ADALINEのシンプルな例を取り上げます。

ADALINEを実装する

勾配降下法の理解が進んだところで、ADALINEを実装してみましょう。ここでも、本書とは異なり、クラスを用いずに簡易的に実装してみます。

まず、データを作成します。

# 1-100 行目の目的変数の抽出
y = df.iloc[0:100, 4].values
# Iris-setosa を-1、Iris-virginica を 1 に変換
y = np.where(y == ' Iris-setosa ' , -1, 1)
# 1-100 行目の 3 列目の抽出
X = df.iloc[:100, [2]].values

続いて、ADALINEを実装します。ここでは、学習率 η = 0.01、トレーニング回数を20として、w0w1をそれぞれ 0 で初期化して計算します。

eta = 0.01 # 学習率
n_iter = 20 # トレーニングデータのトレーニング回数
w0, w1 = 0.0, 0.0 # 重みを 0 で初期化
w0_, w1_ = [], [] # 重みを格納するリスト
cost_ = [] # 誤差を格納するリスト

for epoch in range(n_iter): # トレーニング回数分トレーニングデータを反復
    # 総入力
    output = w1 * X + w0
    # 誤差
    error = (y - output.ravel())
    # 重みの更新
    w0 += eta * error.sum()
    w1 += eta * (error * X.ravel()).sum()
    # 誤差の格納
    cost_.append(0.5 * np.sum(error**2))
    # 重みの格納
    w0_.append(w0)
    w1_.append(w1)

さて、学習率 η = 0.01 と設定してプログラムを実行し、横軸に反復回数、縦軸に誤差平方和をプロットすると図2-3が得られます。誤差平方和は反復の度に指数関数的に増加してしまい、収束しないことを図から確認できます。

図2-3: 反復回数と誤差平方和の関係。横軸: 反復回数、縦軸: 誤差平方和
図2-3: 反復回数と誤差平方和の関係

ここでは、本書の2.5.1項「ADALINE を Python で実装する」で行われているように、各変数を標準化してみます。ここでの標準化とは、それぞれの変数をその平均値を引いた後にその分散で割る(「分散正規化」とも呼ばれます)処理です。つまり、次式による標準化です。

標準化を行った後に、重み w0w1の組み合わせに対する誤差とその勾配は、図2-4のようになります。

図2-4: 標準化後の誤差とその勾配
図2-4:標準化後の誤差とその勾配

こうして正規化を行った後に ADALINE を実行すると、今度は無事に収束していることを確認できます。勾配降下法により重みw0w1が収束する様子を可視化すると、図2-5のようになります。

図2-5:勾配降下法による重みw0w1の収束
図2-5:勾配降下法による重みの収束

横軸にw0、縦軸にw1をとり、収束していく様子をプロットすると図2-6のようになります。

図2-6:勾配降下法により収束していく様子
図2-6:勾配降下法により収束していく様子

以上では、説明をわかりやすくするために特徴量が 1 つの場合(重みがw0w1の2つ)で説明してきました。本書の2.5節では特徴量が2つの場合(重みがw0w1w2の3つ)で説明されています。基本的な考え方は同じなので、本書を読み進めるうえでの参考になれば幸いです。

 
Python機械学習プログラミング 達人データサイエンティストによる理論と実践

Sebastian Raschka 著/株式会社クイープ 訳/福島 真太朗 監訳
価格:4,000円+税
発売日:2016年6月30日発売
ISBN:978-4-8443-8060-3
発行:インプレス

Python機械学習プログラミング 達人データサイエンティストによる理論と実践

機械学習の考え方とPython実装法がわかる! 分類/回帰や深層学習の導入を解説--◎絶妙なバランスで「理論と実践」を展開 ◎Pythonライブラリを使いこなす ◎数式・図・Pythonコードを理解 --機械学習とは、データから学習した結果をもとに、新たなデータに対して判定や予測を行うこと。本書では、機械学習の各理論を端的に解説、Pythonプログラミングによる実装を説明。AIプログラミングの第一歩を踏み出すための一冊です(本書は『Python Machine Learning』の翻訳書です)。

Amazon詳細ページへImpress詳細ページへ

著者
福島 真太朗(ふくしま しんたろう)
1981年生まれ。株式会社トヨタIT開発センターのリサーチャー。2004年に東京大学理学部物理学科卒業。2006年東京大学大学院新領域創成科学研究科修士課程修了。専攻は物理学・応用数学。

連載バックナンバー

開発言語書籍・書評

ブック・インサイド『Python機械学習プログラミング』―単純な例でADALINEのイメージをつかむ

2016/9/16
今回も前回に引き続き、書籍『Python機械学習プログラミング』の2章の内容についてより分かりやすく理解するためのヒントを解説していきます。今回は、ADALINEのイメージがつかめるように、ADALINEのシンプルな例を取り上げます。
開発言語書籍・書評

ブック・インサイド『Python機械学習プログラミング』―パーセプトロンを読み解く

2016/8/8
前回は、書籍『Python機械学習プログラミング』を読むために必要な知識、読み方等について説明しました。今回は、2章の内容についてより分かりやすく理解するためのヒントを解説していきます。
開発言語書籍・書評

ブック・インサイド―『Python機械学習プログラミング』学び方ガイド

2016/6/30
本記事では、書籍『Python機械学習プログラミング』を読むために必要な知識、読み方等について説明します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています