我需要从sklearn.ensemble中适合RandomForestRegressor。

forest = ensemble.RandomForestRegressor(**RF_tuned_parameters)
model = forest.fit(train_fold, train_y)
yhat = model.predict(test_fold)

这段代码一直工作,直到我对数据(train_y)进行了一些预处理。 错误信息如下:

DataConversionWarning:当期望一个1d数组时,传递一个列向量y。请将y的形状更改为(n_samples,),例如使用ravel()。 模型=森林。fit (train_fold train_y)

之前train_y是一个Series,现在它是numpy array(它是一个列向量)。如果我应用train_y.ravel(),那么它就变成了一个行向量,并且没有出现错误消息,因为预测步骤需要很长时间(实际上它永远不会结束……)

在RandomForestRegressor的文档中,我发现train_y应该定义为y: array-like, shape = [n_samples]或[n_samples, n_outputs] 你知道怎么解决这个问题吗?


当前回答

我在尝试训练KNN分类器时也遇到过这种情况。但似乎在我改变后,警告就消失了: knn.fit (X_train y_train) 来 资讯。适合(X_train np.ravel (y_train、订单= ' C '))

在这一行之前,我使用import numpy作为np。

其他回答

使用neuraxle,您可以轻松解决这个问题:

p = Pipeline([
   # expected outputs shape: (n, 1)
   OutputTransformerWrapper(NumpyRavel()), 
   # expected outputs shape: (n, )
   RandomForestRegressor(**RF_tuned_parameters)
])

p, outputs = p.fit_transform(data_inputs, expected_outputs)

Neuraxle是一个类似sklearn的框架,用于深度学习项目中的超参数调优和AutoML !

format_train_y=[]
for n in train_y:
    format_train_y.append(n[0])

另一种方法是用拉威尔

model = forest.fit(train_fold, train_y.values.reshape(-1,))

我在尝试训练KNN分类器时也遇到过这种情况。但似乎在我改变后,警告就消失了: knn.fit (X_train y_train) 来 资讯。适合(X_train np.ravel (y_train、订单= ' C '))

在这一行之前,我使用import numpy作为np。

使用以下代码:

model = forest.fit(train_fold, train_y.ravel())

如果你仍然被错误的巴掌一样,如下?

Unknown label type: %r" % y

使用以下代码:

y = train_y.ravel()
train_y = np.array(y).astype(int)
model = forest.fit(train_fold, train_y)