Skip to content

Instantly share code, notes, and snippets.

@propella
Created January 17, 2019 07:28
Show Gist options
  • Save propella/1ada5171f9884dbf15a96290aa7369a3 to your computer and use it in GitHub Desktop.
Save propella/1ada5171f9884dbf15a96290aa7369a3 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tensorflow Keras の RNN と scikit-learn の線形回帰で Sin 波の予測\n",
"\n",
"以下の記事と同じ事をするだけです。さらに LinearRegression との比較もしてみます。\n",
"* [詳解ディープラーニング TensorFlow Keras による時系列データ処理](https://www.amazon.co.jp/dp/4839962510/ref=cm_sw_em_r_mt_dp_U_G1RpCbTN7FZT2) 第五章 リカレントニューラルネットワーク\n",
"* [深層学習ライブラリKerasでRNNを使ってsin波予測](https://qiita.com/yukiB/items/5d5b202af86e3c587843)\n",
"* [RNNにsin波を学習させて予測してみた](https://qiita.com/yuyakato/items/ab38064ca215e8750865)\n",
"* https://github.com/sunsided/tensorflow-lstm-sin\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.metrics import r2_score\n",
"from sklearn.model_selection import train_test_split\n",
"from tensorflow import keras\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"import tensorflow as tf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## データの作成\n",
"\n",
"周期が 100 のノイズ入りサイン波を 200 個作ります。このなかで任意の 25 の連続した値から次の値を予測するというのをやります。\n",
"\n",
"ノイズを乗せても予測される値はノイズの消えたきれいなカーブになりますよ、という事がしたいです。"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"period = 100\n",
"np.random.seed(2)\n",
"\n",
"def sin_curve(length, ampl=0.05):\n",
" signal = np.sin(2 * np.pi * np.arange(0, length) / period)\n",
" noise = ampl * np.random.uniform(low=-1.0, high=1.0, size=length)\n",
" return signal + noise\n",
"\n",
"source = sin_curve(200)\n",
"plt.plot(source)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ひと区間を 25 + 1 個として、先頭から区間をずらしながらデータを作ります。"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Shape of the data: (175, 26)\n",
"First 3 data:\n",
" [[-0.00640051 0.01538314 0.13029948 0.18091355 0.24072667 0.29205048\n",
" 0.33858942 0.43770639 0.46171914 0.51250952 0.59989864 0.6403382\n",
" 0.6480051 0.73032644 0.73895723 0.83755051 0.87972545 0.87573036\n",
" 0.9394832 0.88774103 0.95158113 0.92511181 0.97509948 0.95176779\n",
" 0.96074273 1.00967453]\n",
" [ 0.01538314 0.13029948 0.18091355 0.24072667 0.29205048 0.33858942\n",
" 0.43770639 0.46171914 0.51250952 0.59989864 0.6403382 0.6480051\n",
" 0.73032644 0.73895723 0.83755051 0.87972545 0.87573036 0.9394832\n",
" 0.88774103 0.95158113 0.92511181 0.97509948 0.95176779 0.96074273\n",
" 1.00967453 0.97062793]\n",
" [ 0.13029948 0.18091355 0.24072667 0.29205048 0.33858942 0.43770639\n",
" 0.46171914 0.51250952 0.59989864 0.6403382 0.6480051 0.73032644\n",
" 0.73895723 0.83755051 0.87972545 0.87573036 0.9394832 0.88774103\n",
" 0.95158113 0.92511181 0.97509948 0.95176779 0.96074273 1.00967453\n",
" 0.97062793 0.95280927]]\n"
]
}
],
"source": [
"chunk = 25\n",
"data = np.array([source[start: start + chunk + 1] for start in range(0, len(source) - chunk)])\n",
"print('Shape of the data:', data.shape)\n",
"print('First 3 data:\\n', data[:3])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ある区間の先頭 25 個を予測に使う特徴データ (X) とし、最後を正解データ (y) とします。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"First 3 features (X):\n",
" [[-0.00640051 0.01538314 0.13029948 0.18091355 0.24072667 0.29205048\n",
" 0.33858942 0.43770639 0.46171914 0.51250952 0.59989864 0.6403382\n",
" 0.6480051 0.73032644 0.73895723 0.83755051 0.87972545 0.87573036\n",
" 0.9394832 0.88774103 0.95158113 0.92511181 0.97509948 0.95176779\n",
" 0.96074273]\n",
" [ 0.01538314 0.13029948 0.18091355 0.24072667 0.29205048 0.33858942\n",
" 0.43770639 0.46171914 0.51250952 0.59989864 0.6403382 0.6480051\n",
" 0.73032644 0.73895723 0.83755051 0.87972545 0.87573036 0.9394832\n",
" 0.88774103 0.95158113 0.92511181 0.97509948 0.95176779 0.96074273\n",
" 1.00967453]\n",
" [ 0.13029948 0.18091355 0.24072667 0.29205048 0.33858942 0.43770639\n",
" 0.46171914 0.51250952 0.59989864 0.6403382 0.6480051 0.73032644\n",
" 0.73895723 0.83755051 0.87972545 0.87573036 0.9394832 0.88774103\n",
" 0.95158113 0.92511181 0.97509948 0.95176779 0.96074273 1.00967453\n",
" 0.97062793]]\n",
"First 3 labels (y): [1.00967453 0.97062793 0.95280927]\n"
]
}
],
"source": [
"X = data[:, :-1]\n",
"y = data[:, -1]\n",
"print('First 3 features (X):\\n', X[:3])\n",
"print('First 3 labels (y):', y[:3])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"訓練データとテストデータに分けます。"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"データの最初の区間分から残りの部分を予想してプロットする関数です。"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def plot_predict(predict, start, length):\n",
" history = start\n",
" for i in range(length):\n",
" feature = history[-chunk:].reshape(1, -chunk)\n",
" pred = predict(feature)\n",
" history = np.append(history, pred)\n",
" plt.figure(figsize=(16,4))\n",
" plt.plot(np.sin(2 * np.pi * np.arange(0, len(start) + length) / period), '--', label='reference')\n",
" plt.plot(history, label='predict')\n",
" plt.legend()\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## scikit-learn の LinearRegression で予測\n",
"\n",
"比較対象として、単純な線形回帰でやってみます。"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"r2_score: 0.998\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1152x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 557 ms, sys: 74.8 ms, total: 632 ms\n",
"Wall time: 264 ms\n"
]
}
],
"source": [
"\n",
"def sklearn_linear():\n",
" reg = LinearRegression()\n",
" reg.fit(X_train, y_train) # 学習\n",
" \n",
" def predict(features):\n",
" return reg.predict(features)\n",
" \n",
" y_test_pred = predict(X_test)\n",
" print('r2_score: %.3f' % r2_score(y_test, y_test_pred)) # 検証\n",
" plot_predict(predict, source[:chunk], 300)\n",
" \n",
"%time sklearn_linear()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"滅茶苦茶良過ぎでは。。。\n",
"\n",
"小さすぎて分かりづらいですが、グラフの前の方の赤いギザギザした部分が入力データです。ここは学習に使った物と同じです(本来なら新しく作り直すべきですね)。x = 25 以降のなめらかな赤いカーブは予測で得られた物です。学習データにノイズが乗っていたにも関わらず、ノイズが除去されて綺麗なカーブになっています。バックの青い点線は参考までに普通のサインカーブを描いた物です。予測がかなり正確である事が分かります。\n",
"\n",
"## TensorFlow の RNN で予測\n",
"\n",
"RNN の一種 LSTM というのを使ってみます。"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"lstm (LSTM) (None, 256) 264192 \n",
"_________________________________________________________________\n",
"dense (Dense) (None, 1) 257 \n",
"=================================================================\n",
"Total params: 264,449\n",
"Trainable params: 264,449\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n",
"Epoch 1/20\n",
"131/131 [==============================] - 1s 7ms/step - loss: 0.3450 - acc: 0.0000e+00\n",
"Epoch 2/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0709 - acc: 0.0000e+00\n",
"Epoch 3/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0202 - acc: 0.0000e+00\n",
"Epoch 4/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0075 - acc: 0.0000e+00\n",
"Epoch 5/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0042 - acc: 0.0000e+00\n",
"Epoch 6/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0046 - acc: 0.0000e+00\n",
"Epoch 7/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0032 - acc: 0.0000e+00\n",
"Epoch 8/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0020 - acc: 0.0000e+00\n",
"Epoch 9/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0020 - acc: 0.0000e+00\n",
"Epoch 10/20\n",
"131/131 [==============================] - 0s 3ms/step - loss: 0.0014 - acc: 0.0000e+00\n",
"Epoch 11/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0015 - acc: 0.0000e+00\n",
"Epoch 12/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0013 - acc: 0.0000e+00\n",
"Epoch 13/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0010 - acc: 0.0000e+00\n",
"Epoch 14/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0013 - acc: 0.0000e+00\n",
"Epoch 15/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0011 - acc: 0.0000e+00\n",
"Epoch 16/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0011 - acc: 0.0000e+00\n",
"Epoch 17/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0012 - acc: 0.0000e+00\n",
"Epoch 18/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0014 - acc: 0.0000e+00\n",
"Epoch 19/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0016 - acc: 0.0000e+00\n",
"Epoch 20/20\n",
"131/131 [==============================] - 0s 2ms/step - loss: 0.0016 - acc: 0.0000e+00\n",
"r2_score: 0.998\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1152x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 33.9 s, sys: 8.18 s, total: 42.1 s\n",
"Wall time: 9.5 s\n"
]
}
],
"source": [
"def tensorflow_lstm():\n",
"\n",
" model = keras.Sequential([\n",
" keras.layers.LSTM(256, batch_input_shape=(None, chunk, 1)),\n",
" keras.layers.Dense(1)\n",
" ])\n",
"\n",
" model.compile(optimizer=tf.train.AdamOptimizer(), \n",
" loss='mean_squared_error',\n",
" metrics=['accuracy'])\n",
" model.summary()\n",
"\n",
" model.fit(X_train.reshape(-1, chunk, 1), y_train, epochs=20)\n",
" \n",
" def predict(features):\n",
" return model.predict(features.reshape(-1, chunk, 1))[:,0]\n",
" \n",
" y_test_pred = predict(X_test)\n",
" print('r2_score: %.3f' % r2_score(y_test, y_test_pred))\n",
" plot_predict(predict, source[:chunk], 300)\n",
"\n",
"%time tensorflow_lstm()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"決定係数 r2_score だけ見ると似たような結果ですが、グラフを描いてみると線形回帰の方が断然良いです。\n",
"\n",
"## LinearRegression で Sin 波の予測が出来る理由\n",
"\n",
"相関関係を見つける LinearRegression で何故このような周期的な振る舞いを検出出来るのか不思議です。予測する値が直近の値に強く影響されるのは当然なのですが、予測する値が上り坂の位置にいるのか下り坂の位置にいるのか何故分かるのだろう? 試しに予測器の偏回帰係数を見てみます。"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def sklearn_linear_coef():\n",
" reg = LinearRegression()\n",
" reg.fit(X_train, y_train)\n",
" plt.plot(reg.coef_)\n",
"sklearn_linear_coef()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"予想どうり直近のデータの影響が強く、昔のデータの影響が低いという事が分かります。これで LinearRegression が上り坂か下り坂かをどう判断するのかちょっと考えてみます。\n",
"\n",
"本題からはずれますが、LinearRegression は説明変数に定数を掛けて足し合わせるだけなのに、綺麗なサインカーブが描けるのは非常に面白いなと思いました。\n",
"\n",
"## 結論\n",
"\n",
"サインカーブの予想には予想に反して RNN (LSTM) より LinearRegression の方が良いことが分かりました。 LinearRegression にこのような使い方が出来るとは驚きでした。\n",
"\n",
"ちなみに色々試すと LinearRegression では過去データの数 chunk = 8 くらいでも完璧に予測しますが、LSTM では全然だめでした。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment