[英]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.