LoginSignup
5
9

More than 5 years have passed since last update.

TensorFlowで位置情報を人工知能してみる

Last updated at Posted at 2016-10-31

ここではサンプルのビーコンからの位置情報を使ってTensorFlowで機械学習し、ビーコンで検知された動線の違いからアマチュア/普通/プロの判定をしてみます。

Beaconからの位置情報を可視化する

  1. ビーコンの位置情報を可視化するを参照し、ビーコンからの位置情報を可視化します。
  2. Beaconから取得した位置情報の差分を算出します(例:地点1→2の移動時間、地点2→3の移動時間、等)

スクリーンショット 2016-10-31 16.05.50.png

TensorFlowを準備する

  1. TensorFlowを使ってIoTデータを人工知能してみるを参照してTensorFlowを用意します
  2. 下記のようなサンプルを用意し、位置情報を学習させます
iot_results_loader.py
# -*- coding: utf-8 -*-

import pandas as pd

class IoTResults:

    def __float__(data):
        return 1.0

    def __init__(self, data):
        self.raw  = data.copy()
        self.data = data

    def predictor_data(self):
        return self.data

    def train_data(self):
        return self.__drop_outcome(self.__train_data())

    def test_data(self):
        return self.__drop_outcome(self.__test_data())

    def train_up_down(self):
        return self.__good_bad(self.__train_data()["outcome"])

    def test_up_down(self):
        return self.__good_bad(self.__test_data()["outcome"])

    def __train_data(self):
        # 全データの 2/3 を訓練データとして使用
        return self.data.loc[lambda df: df.index % 3 != 0, :]

    def __test_data(self):
        # 全データの 1/3 をテストデータとして使用
        return self.data.loc[lambda df: df.index % 3 == 0, :]

    def __drop_outcome(self, data):
        return data.drop("outcome", axis=1)

    def __good_bad(self, outcome):
        return outcome.apply(
            lambda p: pd.Series([
                1 if p <=  0 else 0,
                1 if p ==1  else 0,
                1 if p > 1  else 0
            ], index=['amateur', 'regular', 'pros']))


class IoTResultsLoader:

    def retrieve_iot_data(self):
        df = pd.DataFrame(
            {'move1to2': [25,27,56,30,33,27,65,8,28,26,33,55,31,7,31,52,27,29,31,30,28,61,28,7,30,31,58,33,31,29,27,8,31,30,58,61,29,31,27,31,33,9,29,30,33,28,31,33,30,59,29,27,28,10,31,33,29,9,29,57,31,32,30,29,33,32,34,29,32,8,29,30,31,30,29,28,3,56,29,31,33,9,30,31,33,29,31,30,31,55,32,31,30,28,31,9,33,32,33,32],
              'move2to3': [12,14,32,12,11,14,32,2,15,14,13,32,15,2,12,43,18,14,15,12,13,34,14,4,15,14,29,14,15,14,14,2,15,14,38,36,18,14,17,15,15,2,18,16,15,14,15,16,17,38,17,15,14,3,18,16,15,2,15,33,14,15,16,15,12,13,17,15,14,2,16,15,16,14,16,18,15,32,15,16,18,1,15,14,16,18,14,15,13,34,18,14,16,16,15,3,14,15,16,14],
             'move3to4': [20,18,25,21,23,25,26,8,19,18,20,48,22,6,24,42,23,19,20,18,23,35,22,6,24,22,40,19,20,30,22,7,28,24,33,28,25,30,28,29,27,6,12,20,18,20,22,21,22,34,28,30,26,7,25,20,19,6,21,27,18,20,18,20,24,26,22,28,24,8,24,25,21,22,28,26,19,32,23,21,24,6,21,20,19,22,25,27,26,34,24,20,23,19,22,7,27,23,24,18],
             'move4to5': [50,44,58,56,48,42,60,40,58,54,56,60,44,40,58,62,50,52,54,56,48,46,50,42,56,60,64,52,56,60,58,44,44,48,54,52,56,60,62,64,58,48,58,48,48,50,54,60,62,52,48,44,50,54,52,58,46,48,50,56,62,60,54,48,44,52,54,58,50,48,48,52,58,62,60,52,60,58,56,48,44,52,56,54,58,48,52,54,50,58,54,56,62,60,60,52,48,46,58,48],
             'outcome': [1,1,0,1,1,1,0,2,1,1,1,0,1,2,1,0,1,1,1,1,1,0,1,2,1,1,0,1,1,1,1,2,1,1,0,0,1,1,1,1,1,2,1,1,1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1,1]})
        return df


3. 実行します

  1. python train.pyで学習させます
    スクリーンショット 2016-10-31 16.10.44.png

  2. python server.pyでサーバーを実行します

  3. 上記のNode-REDのフローからアクセスし、amateur/regular/prosの判定を確認します
    スクリーンショット 2016-10-31 15.12.10.png

  4. python -m tensorflow.tensorboard --logdir=./logsなどでtensorboardを稼働しブラウザで(TensorFlow稼働サーバー):6006へアクセスして学習の状況などを確認します
    スクリーンショット 2016-10-31 16.17.34.png
    スクリーンショット 2016-10-31 16.17.43.png

参考

TensorFlowを使った為替(FX)のトレードシステムを作るチュートリアルを大変参考にさせていただきました。どうもありがとうございます。

5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9