Нейронная сеть с несколькими выходами в склеарн

Я пытаюсь построить нейронную сеть, чтобы предсказать вероятность того, что каждый теннисист выиграет пункт обслуживания, когда они играют друг против друга. Для входов я бы использовал последний N совпадения, сыгранные каждым игроком, с учетом разницы в рейтингах против оппонента и реальной вероятности выигрыша очка, который он имел в матче

Например, если посмотреть только 2 совпадения для каждого игрока, один вход будет

i=[-61, 25, 0.62, 0.64, 2, -35, 0.7, 0.65]

Первые 4 числа для первого игрока (различия в ранжировании и вероятности, которые он имел), другие 4 для второго. Выход будет

o=[0.65, 0.63]

Таким образом, учебные материалы будут X=[i1, i2, i3,...] и выводы y=[o1, o2, o3,...]

У меня есть пара вопросов новичка:

  1. необходимо ли нормализовать входные данные (соответственно ранги и вероятности) по всему набору данных?
  2. когда я пытаюсь запустить это в Python он говорит

ValueError: Целевые данные с несколькими выходами не поддерживаются с бинаризацией меток

Могу ли я заставить MLPClassifier работать с 2 выходами?

РЕДАКТИРОВАТЬ: добавил код

from sklearn.neural_network import MLPClassifier
clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
                   hidden_layer_sizes=(5, 2), random_state=1)
X=[[-61, 25, 0.62, 0.64, 2, -35, 0.7, 0.65], [2,-5,0.58,0.7,-3,-15,0.65,0.52] ]
y=[ [0.63, 0.64], [0.58,0.61] ]
clf.fit(X,y)

этот код возвращает указанную ошибку. данные здесь не нормализованы, но давайте пока проигнорируем это.

1 ответ

Решение

На ваш первый вопрос дан подробный ответ: почему мы должны нормализовать ввод для искусственной нейронной сети? Короче да, просто нормализуй ценности, это облегчит жизнь.

Второй вопрос кроется здесь:

MLPClassifier поддерживает мультиклассовую классификацию, применяя Softmax в качестве функции вывода.


Если вы можете добавить часть своего кода к вопросу, ответ может быть более подробным.


редактировать

После прочтения вопроса, более внимательно, я понял, что вы пытаетесь использовать функцию классификатора, т.е. вы пытаетесь применить метки к вашим входным данным. Это означает, что функция ожидает двоичного вывода.

Вы, вероятно, ищете многослойный регрессор Perceptron, который будет давать непрерывные выходные значения.

from sklearn.neural_network import MLPRegressor
clf = MLPRegressor(solver='lbfgs', alpha=1e-5,
                   hidden_layer_sizes=(5, 2), random_state=1)
X=[[-61, 25, 0.62, 0.64, 2, -35, 0.7, 0.65], [2,-5,0.58,0.7,-3,-15,0.65,0.52] ]
y=[ [0.63, 0.64], [0.58,0.61] ]
clf.fit(X,y)
MLPRegressor(activation='relu', alpha=1e-05, batch_size='auto', beta_1=0.9,
       beta_2=0.999, early_stopping=False, epsilon=1e-08,
       hidden_layer_sizes=(5, 2), learning_rate='constant',
       learning_rate_init=0.001, max_iter=200, momentum=0.9,
       nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True,
       solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False,
       warm_start=False)
Другие вопросы по тегам