sklearn中具有多个输出的神经网络

时间:2017-06-14 15:25:09

标签: python scikit-learn neural-network

我正在尝试建立一个神经网络,以预测每个网球运动员在互相比赛时赢得服务点的概率。对于输入,我将使用每个玩家所玩的最后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中运行它时说
  3.   

    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 个答案:

答案 0 :(得分:7)

您的第一个问题在此详细解答:Why do we have to normalize the input for an artificial neural network? 简而言之,是的,只需将值标准化,就可以让生活更轻松。

第二个问题涵盖here

  

MLPClassifier通过应用Softmax支持多类分类   作为输出功能。

如果您可以在问题中添加一些代码,答案可能会更详细。

修改

再次仔细阅读问题之后,我意识到您正在尝试使用分类器功能,即您尝试将标签应用于输入数据。这意味着该函数需要二进制输出。

您可能正在寻找能够提供连续输出值的Multi-layer Perceptron regressor

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)