0
$\begingroup$

I am trying to create a neural network for my data which is as follows

Close label returns lag_1 lag_2 lag_3 lag_4 lag_5 Date 2007-09-26 00:00:00 4940.500000 1 0.000334 0.001348 0.019566 0.018957 0.003212 0.040946 2007-09-27 00:00:00 5000.549805 1 0.012155 0.000334 0.001348 0.019566 0.018957 0.003212 2007-09-28 00:00:00 5021.350098 1 0.004160 0.012155 0.000334 0.001348 0.019566 0.018957 2007-10-01 00:00:00 5068.950195 1 0.009480 0.004160 0.012155 0.000334 0.001348 0.019566 2007-10-03 00:00:00 5210.799805 1 0.027984 0.009480 0.004160 0.012155 0.000334 0.001348 ... ... ... ... ... ... ... ... ... 2010-09-24 00:00:00 6018.299805 0 0.009858 -0.005250 -0.003004 0.004782 0.016228 0.009651 2010-09-27 00:00:00 6035.649902 0 0.002883 0.009858 -0.005250 -0.003004 0.004782 0.016228 2010-09-28 00:00:00 6029.500000 0 -0.001019 0.002883 0.009858 -0.005250 -0.003004 0.004782 2010-09-29 00:00:00 5991.299805 0 -0.006336 -0.001019 0.002883 0.009858 -0.005250 -0.003004 2010-09-30 00:00:00 6029.950195 0 0.006451 -0.006336 -0.001019 0.002883 0.009858 -0.005250 

For the NN, lag_(1 to 5) are the inputs and label is the output. label can have -1,0 and 1 as values.

My current NN is based on MLPClassifier

from sklearn.neural_network import MLPClassifier model = MLPClassifier(solver='lbfgs', alpha=1e-5, max_iter=500, hidden_layer_sizes=5 * [10], random_state=1) 

It is working as expected and is providing me with the worst results. The only prediction it gives is 0 and rarely any 1 or -1.

Is there any way in which it doesn't predict only -1,0 and 1, but predicts a float value between [-1,1] like 0.123,-0.69,0.420?

If there are other implementations of NN which are better for this situation, then please feel free to use them.

$\endgroup$
1
  • $\begingroup$I wonder if MLPClassifier can do non binary classification (output classes > 2). You may have a look at grov answer to use a regression instead. Also, don't forget to normalize your inputs that seem very small. Last point is it could be worth checking if the proportions of class - 1, 0 and 1 are not unbalanced in your dataset. If you have a lot of 0 values in your dataset, the network will have a tendency to always return 0 since it is the most frequent answer.$\endgroup$
    – Ubikuity
    CommentedMay 2, 2023 at 23:10

1 Answer 1

1
$\begingroup$

It sounds like you want to use a regression model (which produces a real value as the output, e.g. a value in the range [-1, 1] but possibly outside as well depending on the learning algorithm) instead of a classification model (which produces one of a set of discrete output values based on the training data, e.g. {-1, 0, 1} in your case).

If the code is changed to use MLPRegressor instead of MLPClassifier, it will provide a real value as output.

Instead of:

from sklearn.neural_network import MLPClassifier model = MLPClassifier(...) 

Use:

from sklearn.neural_network import MLPRegressor model = MLPRegressor(...) 
$\endgroup$

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.