LoginSignup
0
3

※、ご指摘を受けた事項について、修正いたしました。ご指摘、ありがとうございました。
2023年10月7日

今回は、PythonとKerasを使ってAIを作成してみたいと思う。

 内容は以下の通り。

  1. 四半期ベースで日本のGDPが上昇もしくは加工するかを予測するAI

  2. データは経産省からダウンロード
    https://www.esri.cao.go.jp/jp/sna/menu.html

  3. 四半期経済で成長したかしていないかについて、4つの説明変数を用いて二値分類モデルとKerasで学習

  4. これらのソース・データを以下のフォルダにまとめております。
    https://github.com/horiivalue/horiivalue.git/AIチャレンジ2

※細かいインポートは省略させていただきます。

データ

# データをPandasで読み込み
dataset_keizai = pd.read_csv("ritu-jk2322.csv")

# データを5行だけ表示
dataset_keizai.head()

# 列の抜き出し
dataset = dataset_keizai[['国内総生産(支出側)', '家計最終消費支出', '輸出', '民間企業設備','輸入']]

# 列名をリネームする
dataset = dataset.rename(columns={'国内総生産(支出側)': 'keizai', '家計最終消費支出': 'kakei', '輸出': 'export', '民間企業設備': 'minkan', '輸入':'import'})

dataset.head()

image.png

データ加工

for i in range(117):
    s = dataset.iloc[i, 0]
    if s > 0:
        dataset.iloc[i, 0] = 1
    else:
        dataset.iloc[i, 0] = 0
dataset.head()

Y = np.array(dataset['keizai'])
X = np.array(dataset[['kakei', 'export', 'minkan', 'import']])
print("Y=", Y.shape, ", X=", X.shape)

from sklearn.preprocessing import MinMaxScaler
sc = MinMaxScaler()
X = sc.fit_transform(X)
X

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
X_train, X_valid, Y_train, Y_valid = train_test_split(X_train, Y_train, test_size=0.3, random_state=0)

学習と学習効果

# モデルの初期化
model = keras.Sequential()

# 入力層
model.add(Dense(8, activation='relu', input_shape=(4,)))
# 隠れ層
model.add(Dense(8, activation='relu'))
# 出力層
model.add(Dense(1, activation='sigmoid'))

# モデルの構築
model.compile(optimizer = "rmsprop", loss='binary_crossentropy', metrics=['accuracy'])

%%time
# 学習の実施
log = model.fit(X_train, Y_train, epochs=5000, batch_size=24, verbose=True,
                callbacks=[keras.callbacks.EarlyStopping(monitor='val_loss',
                                                         min_delta=0, patience=100,
                                                         verbose=1)],
         validation_data=(X_valid, Y_valid))

plt.plot(log.history['loss'], label='loss')
plt.plot(log.history['val_loss'], label='val_loss')
plt.legend(frameon=False) # 凡例の表示
plt.xlabel("epochs")
plt.ylabel("crossentropy")
plt.show()

# predictで予測を行う
Y_pred = model.predict(X_test)

# 二値分類は予測結果の確率が0.5以下なら0,
# それより大きければ1となる計算で求める
Y_pred_cls = (Y_pred > 0.5).astype("int32")

Y_pred_ = Y_pred_cls.reshape(-1)
from sklearn.metrics import classification_report

print(classification_report(Y_test, Y_pred_))

image.png

と、そこそこいい成果が出せたと思います。

0
3
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
0
3