第33回 人工知能 前回32回の標準化を訂正
前回の記事で書いた内容をちょっと訂正します。
全体の標準化に変更します。
こんな風に書いてましたが
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
#データをdfに読み込み。pandasをpdとして利用。
df = pd.read_csv("sample.csv")
#日付の型に変換
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 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")
#日付の型に変換
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
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
#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のデータが扱えます。
コメント
0 件のコメント :
コメントを投稿