Нейронная сеть с несколькими выходами в склеарн
Я пытаюсь построить нейронную сеть, чтобы предсказать вероятность того, что каждый теннисист выиграет пункт обслуживания, когда они играют друг против друга. Для входов я бы использовал последний 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,...]
У меня есть пара вопросов новичка:
- необходимо ли нормализовать входные данные (соответственно ранги и вероятности) по всему набору данных?
- когда я пытаюсь запустить это в 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)