【发布时间】:2020-04-28 10:59:15
【问题描述】:
考虑以下最小示例:
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:当需要一维数组时,传递了列向量 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(),当数据帧是一列时它可以工作,但它不适用于两列数据帧。我正在寻找一种一致的方法来为任意数量的列通用地解决这个问题。
【问题讨论】:
-
不确定我是否理解为什么您的 Y 会有两列用于分类任务?
标签: python pandas scikit-learn