ここではサンプルのビーコンからの位置情報を使ってTensorFlowで機械学習し、ビーコンで検知された動線の違いからアマチュア/普通/プロの判定をしてみます。
Beaconからの位置情報を可視化する
- ビーコンの位置情報を可視化するを参照し、ビーコンからの位置情報を可視化します。
- Beaconから取得した位置情報の差分を算出します(例:地点1→2の移動時間、地点2→3の移動時間、等)
TensorFlowを準備する
- TensorFlowを使ってIoTデータを人工知能してみるを参照してTensorFlowを用意します
- 下記のようなサンプルを用意し、位置情報を学習させます
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. 実行します
-
python server.py
でサーバーを実行します -
python -m tensorflow.tensorboard --logdir=./logs
などでtensorboardを稼働しブラウザで(TensorFlow稼働サーバー):6006
へアクセスして学習の状況などを確認します
参考
TensorFlowを使った為替(FX)のトレードシステムを作るチュートリアルを大変参考にさせていただきました。どうもありがとうございます。