2017-06-14 62 views
1

我正在嘗試建立一個神經網絡來預測每個網球運動員在對抗對手時贏得服務點的概率。對於輸入,我會使用最後的每場比賽的N比賽,獲得與對手的排名差異以及贏得他在比賽中得分的實際概率。在sklearn中有多個輸出的神經網絡

例如,在看只有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: Multioutput target data is not supported with label binarization

我可以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) 

代碼返回提到的錯誤。數據在這裏沒有標準化,但現在讓我們忽略它。

回答

3

你的第一個問題是在這裏詳細回答:Why do we have to normalize the input for an artificial neural network? 總之,是的,只是規範化的價值觀,它使生活更輕鬆。

的第二個問題是覆蓋here

MLPClassifier supports multi-class classification by applying Softmax as the output function.


如果你可以添加一些代碼的這個問題,答案可能會更加詳細。


編輯

再次讀取的問題後,更仔細,我意識到你正在試圖用一個分類功能,即你正在試圖將標籤應用於輸入數據。這意味着該函數需要二進制輸出。

您可能正在尋找一個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) 
+0

感謝您的回答!我添加了一些代碼。 – DoctorEvil

+0

@DoctorEvil:謝謝,現在更清楚了,我更新了答案。 –

+0

好極了,現在可以使用 – DoctorEvil