2017/01/26
0:00

TensorFlowによる回帰分析②


回帰のプログラム(全体)

みなさんこんにちは。
人工知能ラボの助手です。

前回は、TensorFlowでの回帰の実装を行う前に、
TensorFlowの基本的な扱いについて学びました。

今回からは、前回説明した①~⑥のステップに
則って回帰を実装していきましょう。

本当はこの記事で最後のステップまで説明をしようと
思ったのですが、分量が多くなってしまうので、2回に
分けて説明していこうと思います。

今回は①~③までを説明したいと思います。

それでは、今回は以下のデータを学習用データ
として使い、回帰分析を実装してみましょう。
(x,y)=(2,10),(3,14),(-2,1),(10,31),(-5,-6)

①に入る前に、必要ライブラリのインポートと
入力データの変数を作成しておきます
(普通は、入力データは別のファイル
から持ってくることが多いです)。

コード1
#ライブラリのインポート
import tensorflow as tf
import numpy as np
import math

#データの用意
data = np.array([2,1],[3,14],[-2,1],[10,3],[-5,-6])
data_x, data_y = np.hsplit(data,[1])

TensorFlowでは基本的に、pythonライブラリの一つ
であるNumPyの配列を扱います。なので、入力データ
もNumPy配列として定義しました。

また、入力データをNumPyのhsplitを用いて
説明変数(x)と目的変数(y)に分割しました。

それでは、ステップ①からプログラムを書いていきましょう

①入力データの形式を定義
入力データの定義にはTensorFlowの
placeholderクラスを使用します。
今回の入力データは、説明変数(x)、目的変数(y)ともに
ひとつなので、入力データは次のように定義します。

コード2
#入力データを定義
x = tf.placeholder('float', shape = [None, 1])
y_ = tf.placeholder('float', shape = [None, 1])

第1引数はデータ型、第2引数(shape)は入力データの形です。
shapeについてですが、一つ目の要素にはデータ数が入ります。
今回のデータ数は5ですが、データ数が変わっても対応できるように
基本的にはここはNone(指定なし)とします。

2つ目の要素には入力する説明変数、目的変数それぞれの数を
指定します。今回はともに1となります。

②③パラメータとモデルの定義
まずは、データセットをどのような式で表わすかを
定義します。
今回は、回帰の最も簡単な形である、y=ax+bとしましょう。
そうすると、今回使用するパラメータはxの重みaバイアスbですね
以下のように重みとバイアスを定義します。

コード3
#パラメータとモデルの定義
a = tf.Variable(tf.truncated_normal([1], stddev=0.1)
b = tf.Variable(tf.constant(1.0, shape=[1]))
y = a*x + b

前回お話ししたように、パラメータの定義には
Variableクラスを使用します。
aを平均0、標準偏差0.1の正規分布に従った乱数で、
bを定数の1で発生させるよう定義しています。

今回は非常に単純な回帰なので、このような
設定をする必要がなくある程度適当な値でも大丈夫です。
ただ、ニューラルネットワーク等の機械学習アルゴリズムを実装
する際にこの値を使用することが多いため、その設定としました。

3行目ではモデル(数式)を定義しています。
今回はy=ax + bのみですが、実際には
複数行にわたることが多いです。
また、モデルの定義にはplaceholderとVariable
を使用してください。

ちなみに、この①~③の一連の操作は、回帰分析の
理論学習で学んだ
ステップ1:パラメータを含む数式モデルを仮定
に相当します。

それでは、今回はここまでにしておきましょう。
次回は④~⑥を行い、実際の学習結果
を見ていきたいと思います。


それでは、お疲れ様でした!

次回:TensorFlowによる回帰分析③
前回:TensorFlowによる回帰分析①