Sklearn抱怨一列数据框

问题描述 投票:0回答:1

请考虑以下最小示例:

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(),当数据帧是一列时它可以工作,但是对于两列数据帧则不起作用。我正在寻找一种一致的方法来解决任何数量的列。

python pandas scikit-learn
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.