ポイント: TensorFlowは、ロジスティック回帰と予測モデリングに焦点を当てたGoogleのオープンソースの機械学習ライブラリです。このガイドでは、そのコア概念、インストール、および実践的な例を通じての実装を説明します。
- TensorFlowは、マルチディメンショナル配列であるテンソルを使用します。
- 例として、勉強時間に基づいて学生の試験合格率を予測するデモがあります。
ここでは、Googleが開発したオープンソースの機械学習ライブラリであるTensorFlowを紹介します。これが何をするのかを説明し、ロジスティック回帰を実行する方法を示します。
TensorFlowは、ニューラルネットワークを含む機械学習の多くのアプリケーションを持っています。ニューラルネットワークの一つの応用は手書き分析です。もう一つは顔認識です。TensorFlowは、グラフ内のノードが分散ネットワーク全体で実行できるため、問題を無限にスケールさせることができるように設計されています。Googleは、いくつかのプロダクションアプリケーションでTensorFlowを使用しています。
TensorFlowの興味深い側面の一つは、ロジックがマシンのCPUを使用するだけでなく、GPU(グラフィカルプロセッサユニット)も使用できることです。これにより、マシンごとにより多くのパワーが提供されます。なぜなら、コンピュータの画面を動かすためには速度が必要だからです。
[helix-video]
インストールと基本概念
このチュートリアルに従うには、まずこちらの指示に従ってTFをインストールしてください。
TensorFlowの基本単位はテンソルです。テンソルは、任意の次元数の配列です。例えば:
[1]は1次元の配列
[[1,1]]は2次元の配列
始めるには、まずPythonを実行し、TensorFlowをインポートします:
import tensorflow as tf
値を直接割り当てるか、後で値を割り当てるプレースホルダーを作成できます。たとえば、単一の値は次のように書かれます:
x = tf.constant(3.0, dtype=tf.float32)
ここで、xは変更できない定数です(変更できないことを意味します)。
しかし、テンソルはセッションを開始し、実行するまで値を持ちません:
または、次のように書くことができます:
import tensorflow as tf
sess = tf.Session()
x = tf.constant(3.0, dtype=tf.float32)
print(sess.run([x]))
Outputs:
[3.0]
または、次のように書くことができます:
import tensorflow as tf
sess = tf.Session()
y = tf.Variable([3.0], dtype=tf.float32)
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run([y]))
Outputs:
[array([ 3.], dtype=float32)]
上の例では、変数(s)はtf.global_variables_initializer()を実行するまで値を持ちません。
テンソルを追加し、次のように他の数学を実行できます:
x = tf.constant([3,3], dtype=tf.float32)
y = tf.constant([4,4], dtype=tf.float32)
print (x + y)
print(sess.run([x+y]))
outputs:
Tensor("add_4:0", shape=(2,), dtype=float32)
[array([ 11., 11.], dtype=float32)]
ご覧のとおり、xとyの値はrunを呼び出すまでは値を持ちません。
別の例です。これは、直線f(x)=mx + bのグラフで、mは傾き、bはy切片です。
m = tf.Variable([2], dtype=tf.float32)
b = tf.Variable([3], dtype=tf.float32)
x = tf.placeholder(tf.float32)
y = m * x + b
nの値の配列をその関数に渡し、それをn回実行できます。ここでは[1, 2, 3, 4]を使用します:
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(y, {x: [1, 2, 3, 4]}))
Outputs:
[ 5. 7. 9. 11.]
背景
tf.estimatorによる線形回帰
ロジスティック回帰の背景と結果の解釈については、こちらのWikiPediaの文書をお読みください。この文書からテストデータも取得します。目標は、学生が試験に合格する可能性を、勉強した時間に基づいて予測することです。
以下のコードをPythonインタープリタにコピー&ペーストしてください。
TensorFlowをインストールしたら、次にpythonを実行します。
まず、データを列形式で扱うために最も簡単な方法であるpandasをインポートします。hoursは浮動小数点数で、x.xxの形式です。これを100倍し、整数に変換します。なぜなら、ロジスティック回帰のために使用したTensorFlow関数は文字列または整数のいずれかを必要とするからです。
import pandas
hours = [0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50]
passx = [0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]
df = pandas.DataFrame(passx)
df['hours'] = hours
df.columns = ['pass', 'hours']
h = df['hours'].apply(lambda x: x * 100).astype(int)
df['hours']=h
print(df)
outputs:
print(df)
hours pass
0 0.50 0
1 0.75 0
2 1.00 0
3 1.25 0
...
input_fnという関数を作成し、下のLinearClassifierモデルに渡すことができます。この関数は、tf.estimator.inputs.pandas_input_fnメソッドを使用してデータフレームを返します。
def input_fn(df):
labels = df["pass"]
return tf.estimator.inputs.pandas_input_fn(
x=df,
y=labels,
batch_size=100,
num_epochs=10,
shuffle=False,
num_threads=5)
TensorFlowは、作業データをディスクに書き込むので、書き込む場所を提供します。そして、独立変数が連続的でカテゴリカルでないので、NumericColumnオブジェクトを作成する必要があります。次に、LinearClassifierモデルを作成します。
import tensorflow as tf
import tempfile
model_dir = tempfile.mkdtemp()
hours = tf.feature_column.numeric_column("hours")
base_columns = [hours]
m = tf.estimator.LinearClassifier(model_dir=model_dir, feature_columns=base_columns)
今、trainメソッドを実行します。
m.train(input_fn(df),steps=None)
Outputs:
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Saving checkpoints for 1 into /tmp/tmpS8OD2H/model.ckpt.
INFO:tensorflow:loss = 69.3147, step = 1
INFO:tensorflow:Saving checkpoints for 10 into /tmp/tmpS8OD2H/model.ckpt.
INFO:tensorflow:Loss for final step: 54.1885.
テストデータセットには、トレーニングセットと同じデータを使用します。実際には、これらを二つに分けることになります。しかし、ここではデータが非常に少ないです。
results = m.evaluate(input_fn(df),steps=None)
Outputs:
INFO:tensorflow:Starting evaluation at 2017-11-02-14:20:16
INFO:tensorflow:Restoring parameters from /tmp/tmpS8OD2H/model.ckpt-10
INFO:tensorflow:Finished evaluation at 2017-11-02-14:20:16
INFO:tensorflow:Saving dict for global step 10: accuracy = 0.75, accuracy_baseline = 0.5, auc = 0.895, auc_precision_recall = 0.907308, average_loss = 0.535767, global_step = 10, label/mean = 0.5, loss = 53.5767, prediction/mean = 0.585759
ここでは、上記と同じ結果を、より読みやすい形式で表示します。
print("model directory = %s" % model_dir)
for key in sorted(results):
print("%s: %s" % (key, results[key]))
Outputs:
accuracy: 0.75
accuracy_baseline: 0.5
auc: 0.895
auc_precision_recall: 0.907308
average_loss: 0.535767
global_step: 10
label/mean: 0.5
loss: 53.5767
prediction/mean: 0.585759
精度は向上させることができます。より大きなデータセットを作成し、入力データをトレーニングセットとテストデータセットに分割できます。また、num_epochsや他の値を調整することもできます。
TensorFlowとKerasによるMLガイド
これらの投稿は私自身のものであり、必ずしもBMCの立場、戦略、または意見を代表するものではありません。