2020年1月25日 AITCシニア成果発表会(5) 自分専用アメダス
- 8. 機械学習での判別をしてみました
Pythonのコード
import pandas as pd #pandasをインポート
import numpy as np #numpyをインポート
from sklearn import model_selection #データ分割のためのmodel_selectionをインポート
from keras.models import Sequential #keras.modulesからSequentialをインポート
from keras.layers import Dense, Activation #keras.layersからDence,Activationをインポート
rain_data = pd.read_csv(“rain_total.csv”,sep=“,”) #全データ読み込み
X = rain_data.drop([‘class’],axis=1) #Xとして各周波数ごとの振幅スペクトルを
Y = rain_data[‘class’] #Yとして降水強度のクラスを指定する
data_train, data_test, label_train, label_test = model_selection.train_test_split(X,Y)
#全データをトレーニングデータ(70%)とテストデータ(30%)に分ける
#7:3の分割はデフォルト。シャッフルしてから分けてくださる
print(len(data_train),len(data_test)) #トレーニングデータの個数を確認
print(len(label_train),len(label_test)) #テストデータの個数を確認
- 9. 機械学習での判別をしてみました
Pythonのコード(続き)
model = Sequential() #シーケンシャルモデルを定義
model.add(Dense(500, input_dim=1000)) #中間層の数500、入力層の数1000
model.add(Activation(‘sigmoid’)) #sigmoidを活性化関数に
model.add(Dense(4, input_dim=500)) #出力層の数4
model.add(Activation(‘softmax’)) #softmaxを活性化関数に
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy’])
#optimizerにadamを指定など
model.fit(data_train, label_train, nb_epoch=20, batch_size=10) #epoch数20、batch size10で学習
model.metrics_names
res = model.evaluate(data_test, label_test, batch_size=1) #テストデータで評価
print(res) #評価結果の確認
print(model.predict(data_test)) #テストデータのXでy’を予測
pre = np.argmax(model.predict(data_test),axis=1) #出力層で一番大きな値をy’とする
print(pre) #y’を確認
print(label_test) #テストデータのyを確認
count = 0
for index in range(len(pre)): #各テストデータのyとy’が同じ値なら1として
if pre[index] == label_test.values[index]: #正解数をカウントする
count = count + 1
print(count,‘/’,len(pre)) #「正解数/全テストデータ数」を確認