TensorFlowとロジスティック回帰の紹介

TensorFlowとロジスティック回帰の紹介

  • 人工知能(AI)
6分で読めます 更新日 Nov 6, 2017

ポイント: 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や他の値を調整することもできます。

これらの投稿は私自身のものであり、必ずしもBMCの立場、戦略、または意見を代表するものではありません。

人工知能(AI)の関連記事

The Briefを購読する

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ありがとう

あなたはThe Briefに登録されました
The Briefはメインフレームとエンタープライズオーケストレーション—BMC AMIとControl-M—および、両者に関するアナリストの研究、顧客の展開、イベントをカバーしています。