title: Keras MLP classifier not learning
body: <p>I have a data like this
  <a href="https://i.stack.imgur.com/UY2SB.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/UY2SB.png" alt="enter image description here"></a></p>
  
  <p><a href="https://i.stack.imgur.com/9NWlN.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/9NWlN.png" alt="enter image description here"></a></p>
  
  <p>there are 29 column ,out of which I have to predict <strong>winPlacePerc</strong>(extreme end of dataframe) which is between <strong><em>1</strong>(high perc) to <strong>0</strong>(low perc)</em></p>
  
  <p>Out of <strong>29</strong> column <strong>25</strong> are <strong>numerical</strong> data 3 are ID(<strong>object</strong>) 1 is <strong>categorical</strong></p>
  
  <p>I dropped all the <strong>Id column</strong>(since they're all unique) and also encoded the <strong>categorical</strong>(matchType) data into <strong>one hot encoding</strong> </p>
  
  <p>After doing all this I am left with 41 column(after one hot)</p>
  
  <p><a href="https://i.stack.imgur.com/y9PO0.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/y9PO0.png" alt="after one hot encoded"></a></p>
  
  <p>This is how i am creating data</p>
  
  <pre><code>X = df.drop(columns=['winPlacePerc'])
  #creating a dataframe with only the target column
  y = df[['winPlacePerc']]
  </code></pre>
  
  <p>Now my X have 40 column and this is my label data looks like</p>
  
  <pre><code>&gt; y.head()
  
  winPlacePerc
  0   0.4444
  1   0.6400
  2   0.7755
  3   0.1667
  4   0.1875
  </code></pre>
  
  <p>I also happen to have very large amount of data like 400k data ,so for testing purpose I am training on fraction of that,doing that using sckit</p>
  
  <pre><code>X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.997, random_state=32)
  </code></pre>
  
  <p>which gives almost 13k data for training </p>
  
  <p>For model I'm using <strong>Keras sequential model</strong></p>
  
  <pre><code>from keras.models import Sequential
  from keras.layers import Dense
  from keras.layers import Dense, Dropout, Activation
  from keras.layers.normalization import BatchNormalization
  from keras import optimizers
  
  n_cols = X_train.shape[1]
  
  model = Sequential()
  
  model.add(Dense(40, activation='relu', input_shape=(n_cols,)))
  model.add(Dense(1, activation='sigmoid'))
  
  model.compile(loss='mean_squared_error',
                optimizer='Adam',
                metrics=['accuracy'])
  
  model.fit(X_train, y_train,
            epochs=50,
            validation_split=0.2,
            batch_size=20)
  </code></pre>
  
  <p>Since my y-label data is between 0 &amp; 1 ,I'm using <strong>sigmoid</strong> layer as my <strong>output layer</strong></p>
  
  <p>this is training &amp; validation loss &amp; accuracy plot</p>
  
  <p><a href="https://i.stack.imgur.com/fGlSM.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/fGlSM.png" alt="enter image description here"></a>
  <a href="https://i.stack.imgur.com/bFFac.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/bFFac.png" alt="enter image description here"></a></p>
  
  <p>I also tried to convert label into <strong>binary</strong> using <strong>step</strong> function and <strong>binary cross entropy</strong> loss function</p>
  
  <p>after that y-label data looks like</p>
  
  <pre><code>&gt; y.head()
  
  winPlacePerc
  0   0
  1   1
  2   1
  3   0
  4   0
  </code></pre>
  
  <p>and changing loss function</p>
  
  <pre><code>model.compile(loss='binary_crossentropy',
                optimizer='Adam',
                metrics=['accuracy'])
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/17sz0.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/17sz0.png" alt="enter image description here"></a></p>
  
  <p>this method was more worse than previous</p>
  
  <p>as you can see its not learning after certain epoch,and this also happens even if  I am taking all data rather than fraction of it</p>
  
  <p>after this did not work I also used <strong>dropout</strong> and tried <strong>adding more layer</strong>,but nothing works here</p>
  
  <p>Now my question ,what I am doing wrong here is it wrong layer or in data how can I improve upon this?</p>