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

Doc*_*vil 4 python neural-network scikit-learn

我正在尝试建立一个神经网络,以预测每个网球运动员在互相比赛时赢得服务点的概率.对于输入,我会使用N每个玩家所玩的最后一场比赛,取得对手的排名差异以及赢得比赛中他点的实际概率.

例如,仅查看每个玩家的2个匹配项,一个输入就是

i=[-61, 25, 0.62, 0.64, 2, -35, 0.7, 0.65]
Run Code Online (Sandbox Code Playgroud)

前4名是第1名球员(排名差异和概率),其他4名是第2名.输出将是

o=[0.65, 0.63]
Run Code Online (Sandbox Code Playgroud)

因此,培训投入将是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)
Run Code Online (Sandbox Code Playgroud)

该代码返回提到的错误.数据在这里没有标准化,但是现在让我们忽略它.

Max*_*ers 8

您的第一个问题在此详细解答:为什么我们必须对人工神经网络的输入进行标准化? 简而言之,是的,只是将值正常化,它会让生活更轻松.

第二个问题在这里涉及:

MLPClassifier通过应用Softmax作为输出函数来支持多类分类.


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


编辑

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

您可能正在寻找一个多层感知器回归器,它将提供连续的输出值.

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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)