前回の記事で書いた内容をちょっと訂正します。

全体の標準化に変更します。

こんな風に書いてましたが

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler

#データをdfに読み込み。pandasをpdとして利用。
df = pd.read_csv("sample.csv")

# 関数の定義
def create_dataset(dataset, look_back):
 dataX, dataY = [], []
 for i in range(len(dataset)-look_back-1):
  xset, yset = [], []
  for j in range(dataset.shape[1]):
   a = dataset.iloc[i:i+look_back, j]
   xset.append(a)
  yset.append(dataset.iloc[i+look_back, 0])
  yset.append(dataset.iloc[i+look_back, 1])

  dataY.append(yset)
  dataX.append(xset)
 return np.array(dataX), np.array(dataY)


#日付の型に変換
df['datadate'] = pd.to_datetime(df['datadate'])

#インデックス指定
df.set_index('datadate', inplace=True)

look_back = 3

X_train, y_train = create_dataset(df, look_back)


# データスケーリング
scaler = MinMaxScaler(feature_range=(0, 1))
Xsetka = X_train[:,0]
Xsetka = Xsetka.reshape(-1,1)
Scaler_train = scaler.fit(Xsetka)
Xsetka = Scaler_train.transform(Xsetka)
Xsetka = Xsetka.reshape(-1,look_back)
X_train[:,0] = Xsetka

#気温の標準化
Kion_scaler = MinMaxScaler(feature_range=(0, 1))
Xsetka = X_train[:,1]
Xsetka = Xsetka.reshape(-1,1)
Kion_Scaler_train = Kion_scaler.fit(Xsetka)
Xsetka = Kion_Scaler_train.transform(Xsetka)
Xsetka = Xsetka.reshape(-1,look_back)
X_train[:,1] = Xsetka



こんな風に変更です。

import numpy as np
import pandas as pd
np.set_printoptions(suppress=True)
from sklearn.preprocessing import MinMaxScaler

#データをdfに読み込み。pandasをpdとして利用。
df = pd.read_csv("sample.csv")


# 関数の定義
def create_dataset(dataset, look_back):
 dataX, dataY = [], []
 for i in range(len(dataset)-look_back-1):
  xset, yset = [], []
  for j in range(dataset.shape[1]):
   a = dataset.iloc[i:i+look_back, j]
   xset.append(a)
  yset.append(dataset.iloc[i+look_back, 0])
  yset.append(dataset.iloc[i+look_back, 1])

  dataY.append(yset)
  dataX.append(xset)
 return np.array(dataX), np.array(dataY)


#日付の型に変換
df['datadate'] = pd.to_datetime(df['datadate'])

#インデックス指定
df.set_index('datadate', inplace=True)

look_back = 3

X_train, y_train = create_dataset(df, look_back)


# データスケーリング
scaler = MinMaxScaler(feature_range=(0, 1))
scalerdf = df.values
Scaler_train = scaler.fit(scalerdf[:,0].reshape(-1,1))
Scalerdataamount = Scaler_train.transform(scalerdf[:,0].reshape(-1,1))
Scalerdataamount = Scalerdataamount.reshape(1,-1)
scalerdf[:,0] = Scalerdataamount

scaler2 = MinMaxScaler(feature_range=(0, 1))
Scaler_train2 = scaler2.fit(scalerdf[:,1].reshape(-1,1))
Scalertemp = Scaler_train2.transform(scalerdf[:,1].reshape(-1,1))
Scalertemp = Scalertemp.reshape(1,-1)
scalerdf[:,1] = Scalertemp


Xsetka = X_train[:,0]
Xsetka = Xsetka.reshape(-1,1)
Xsetka = Scaler_train.transform(Xsetka)
Xsetka = Xsetka.reshape(-1,look_back)
X_train[:,0] = Xsetka

Xsetka = X_train[:,1]
Xsetka = Xsetka.reshape(-1,1)
Xsetka = Scaler_train2.transform(Xsetka)
Xsetka = Xsetka.reshape(-1,look_back)
X_train[:,1] = Xsetka

#Y
Ysetka = y_train[:,0]
Ysetka = Ysetka.reshape(-1,1)
Ysetka = Scaler_train.transform(Ysetka)
Ysetka = Ysetka.reshape(1,-1)
y_train[:,0] = Ysetka


Ysetka = y_train[:,1]
Ysetka = Ysetka.reshape(-1,1)
Ysetka = Scaler_train2.transform(Ysetka)
Ysetka = Ysetka.reshape(1,-1)
y_train[:,1] = Ysetka



学習データ量が多ければ、前回のようにしてもよいのですが、
今回の適当なサンプルで、少ない量だと
0を下回る標準化した数字が出てしまいます。
場合によっては、それもありなんですが、今回は、無しで。


なので、全体で標準化レベルを測って、それぞれにかけてます。
ついでにYの方も。


あとですね、今回は、たまたま、標準化が出来てるのですが、

DataFrameが、データの数字を整数として処理をした場合、numpyも整数として型が出来ます。
そのときに標準化したデータを入れると0~1で入力されずに、0か1だけが入力されます。

なので、防ぐには、


X_train, y_train = create_dataset(df, look_back)


#numpyのデータ型を整数から小数点へ変更
X_train = X_train.astype(np.float32)
y_train = y_train .astype(np.float32)


# データスケーリング
scaler = MinMaxScaler(feature_range=(0, 1))
scalerdf = df.values
Scaler_train = scaler.fit(scalerdf[:,0].reshape(-1,1))
Scalerdataamount = Scaler_train.transform(scalerdf[:,0].reshape(-1,1))
Scalerdataamount = Scalerdataamount.reshape(1,-1)
scalerdf[:,0] = Scalerdataamount

とすれば、0~1のデータが扱えます。