请考虑以下最小示例:
from time import sleep # To (try to) get warnings printed at the right places
import pandas as pd
from sklearn.neural_network import MLPClassifier
from sklearn.dummy import DummyClassifier
df = pd.DataFrame([[1, 1, 1, 1], [0, 0, 0, 0]])
mlp = MLPClassifier(tol=10)
dummy = DummyClassifier(strategy='uniform')
for size in [1, 2]:
input_columns = [0, 1]
output_columns = [j + 2 for j in range(size)]
print('Dimension of output: ', len(output_columns)) # Is 1 or 2
X = df[input_columns]
Y = df[output_columns]
print('MLPClassifier')
mlp.fit(X, Y)
sleep(3)
print('DummyClassifier')
dummy.fit(X, Y)
sleep(3)
print('\n\n\n')
[在第一次迭代中,在MLPClassifier的训练过程中,Sklearn抱怨:
lib / python3.6 / site-packages / sklearn / neural_network / _multilayer_perceptron.py:934:DataConversionWarning:当期望使用1d数组时,传递了列向量y。请将y的形状更改为(n_samples,),例如使用ravel()。y = column_or_1d(y,warn = True)
第二次迭代运行良好。 DummyClassifier(dummy.fit
)在两个迭代中都运行良好。
错误是因为我试图将单列数据帧(Y
)发送到mlp.fit
。它不会在第二次迭代中发生,其中Y
是一个两列数据帧。
问题是:对于MLPClassifier,如何将数据正确传递给fit
?我已经知道我可以做Y = Y.values.ravel()
,当数据帧是一列时它可以工作,但是对于两列数据帧则不起作用。我正在寻找一种一致的方法来解决任何数量的列。