2017-11-30 10 views
-1

churn_modeling.csvファイルをKerasで実行しようとしましたが、私はモデル学習をしていません。ここに私のコードは次のとおりです。ケラス:トレーニングが正確でない理由

# -*- coding: utf-8 -*- 
import keras 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.optimizers import SGD 
import pandas as pd 
import numpy as np 

#read from CSV file ,convert categorial value to one-hot-encoding and convert the result to numpy array 
df=pd.read_csv("churn_modelling.csv") 
X=pd.get_dummies(df, columns=['Geography','Gender']) 
X=X[['CreditScore','Age','Tenure','Balance','NumOfProducts','HasCrCard','IsActiveMember','EstimatedSalary','Geography_France','Geography_Germany','Geography_Spain','Gender_Female','Gender_Male','Exited']] 
dataset=X.as_matrix() 


X_train=dataset[:,0:13] 
Y_train=dataset[:,13] 

model=Sequential() 
model.add(Dense(26, input_dim=13, activation='relu')) 
#model.add(Dense(15, activation='relu')) 
model.add(Dense(1, activation='sigmoid')) 
sgd = SGD(lr=0.02) 
model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy']) 

model.fit(X_train,Y_train, validation_split=0.05, epochs=10, batch_size=200) 

これは私が得た出力である:9500個のサンプルの 列車、私は100のエポックでプログラムを実行している場合でも500のサンプル

Epoch 1/10 
9500/9500 [==============================] - 0s - loss: 3.7996 - acc: 0.7637 - val_loss: 2.8045 - val_acc: 0.8260 
Epoch 2/10 
9500/9500 [==============================] - 0s - loss: 3.3085 - acc: 0.7947 - val_loss: 2.8045 - val_acc: 0.8260 
Epoch 3/10 
9500/9500 [==============================] - 0s - loss: 3.3085 - acc: 0.7947 - val_loss: 2.8045 - val_acc: 0.8260 
Epoch 4/10 
9500/9500 [==============================] - 0s - loss: 3.3085 - acc: 0.7947 - val_loss: 2.8045 - val_acc: 0.8260 
Epoch 5/10 
9500/9500 [==============================] - 0s - loss: 3.3085 - acc: 0.7947 - val_loss: 2.8045 - val_acc: 0.8260 
Epoch 6/10 
9500/9500 [==============================] - 0s - loss: 3.3085 - acc: 0.7947 - val_loss: 2.8045 - val_acc: 0.8260 
Epoch 7/10 
9500/9500 [==============================] - 0s - loss: 3.3085 - acc: 0.7947 - val_loss: 2.8045 - val_acc: 0.8260 
Epoch 8/10 
9500/9500 [==============================] - 0s - loss: 3.3085 - acc: 0.7947 - val_loss: 2.8045 - val_acc: 0.8260 
Epoch 9/10 
9500/9500 [==============================] - 0s - loss: 3.3085 - acc: 0.7947 - val_loss: 2.8045 - val_acc: 0.8260 
Epoch 10/10 
9500/9500 [==============================] - 0s - loss: 3.3085 - acc: 0.7947 - val_loss: 2.8045 - val_acc: 0.8260 

に検証し、私はまだval_acc:0.8260と同じ結果が得られます。ありがとうございます

+0

バッチサイズを小さくするとどうなりますか?たぶん24のようになる。 –

+0

ありがとう。バッチサイズを24に変更し、このmodel.add(Dense(1、activation = 'softmax'))のように1つのジェンダー列とsoftmax起動関数を削除します。しかし、出力の精度と損失は変わらなかった。 – David

+1

'' 'binary_crossentropy'''の代わりに' '' categorical_crossentropy'''を使うことができますか? – Fabian

答えて

0

トレーニングセットを再スケーリングすると、精度はわずかに86%向上します。私は次のコードを使用しました:

from sklearn.preprocessing import MinMaxScaler 
scaler = MinMaxScaler(feature_range=(0, 1)) 
rescaledX_train = scaler.fit_transform(X_train) 
関連する問題