我需要从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] 你知道怎么解决这个问题吗?


当前回答

我也有同样的问题。问题是标签是列格式的,而它期望它是行格式的。 使用np.ravel ()

knn.score(training_set, np.ravel(training_labels))

希望这能解决问题。

其他回答

使用以下代码:

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)
format_train_y=[]
for n in train_y:
    format_train_y.append(n[0])

我也有同样的问题。问题是标签是列格式的,而它期望它是行格式的。 使用np.ravel ()

knn.score(training_set, np.ravel(training_labels))

希望这能解决问题。

使用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 !

另一种方法是用拉威尔

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