簡體   English   中英

Sklearn 抱怨單列數據框

[英]Sklearn complains about one-column dataframes

考慮以下最小示例:

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, 警告=真)

第二次迭代運行良好。 DummyClassifier ( dummy.fit ) 在兩次迭代中都運行良好。

錯誤是因為我正在嘗試向mlp.fit發送一列數據幀 ( Y )。 它不會發生在第二次迭代中,其中Y是一個雙列數據框。

問題是:如何正確傳遞數據以fit MLPClassifier 的情況? 我知道我可以做Y = Y.values.ravel() ,它在數據Y = Y.values.ravel()是一列時工作,但它不適用於兩列數據框。 我正在尋找一種一致的方法來為任意數量的列一般地解決這個問題。

一種方法是事先檢查列數是否==1。

    if len(output_columns) == 1:
        mlp.fit(X, Y.values.ravel())
    else:
        mlp.fit(X, Y)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM