ブック・インサイド『Python機械学習プログラミング』―単純な例で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として、w0、w1をそれぞれ 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.5.1項「ADALINE を Python で実装する」で行われているように、各変数を標準化してみます。ここでの標準化とは、それぞれの変数をその平均値を引いた後にその分散で割る(「分散正規化」とも呼ばれます)処理です。つまり、次式による標準化です。
標準化を行った後に、重み w0、w1の組み合わせに対する誤差とその勾配は、図2-4のようになります。
こうして正規化を行った後に ADALINE を実行すると、今度は無事に収束していることを確認できます。勾配降下法により重みw0、w1が収束する様子を可視化すると、図2-5のようになります。
横軸にw0、縦軸にw1をとり、収束していく様子をプロットすると図2-6のようになります。
以上では、説明をわかりやすくするために特徴量が 1 つの場合(重みがw0、w1の2つ)で説明してきました。本書の2.5節では特徴量が2つの場合(重みがw0、w1、w2の3つ)で説明されています。基本的な考え方は同じなので、本書を読み進めるうえでの参考になれば幸いです。
Sebastian Raschka 著/株式会社クイープ 訳/福島 真太朗 監訳 |
Python機械学習プログラミング 達人データサイエンティストによる理論と実践機械学習の考え方とPython実装法がわかる! 分類/回帰や深層学習の導入を解説--◎絶妙なバランスで「理論と実践」を展開 ◎Pythonライブラリを使いこなす ◎数式・図・Pythonコードを理解 --機械学習とは、データから学習した結果をもとに、新たなデータに対して判定や予測を行うこと。本書では、機械学習の各理論を端的に解説、Pythonプログラミングによる実装を説明。AIプログラミングの第一歩を踏み出すための一冊です(本書は『Python Machine Learning』の翻訳書です)。 |
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- ブック・インサイド『Python機械学習プログラミング』―パーセプトロンを読み解く
- 機械学習で利用できる「トレーニング」「推論」「説明」のSQL関数を理解しよう
- さらに進化を遂げたInterSystems IRIS data platform Pythonのネイティブサポートが広げる可能性とは
- ブック・インサイド―『Python機械学習プログラミング』学び方ガイド
- 「Krita」を始める前にー「Python」の基本的な文法を押さえよう
- de:code 2017セッションレポート:CNTKでディープラーニングを始めるには
- 「Krita」と「Python」で「ベジェ曲線」を描いてみよう
- AIとRPAの連携
- CloudサービスとRPAの連携
- 「Krita」で「Python」をプログラミングしてはじめての画像を描こう