当需要一维数组时,传递了列向量 y



我需要从sklearn.ensemble中适应RandomForestRegressor

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

这段代码一直有效,直到我对数据进行一些预处理(train_y(。错误消息显示:

数据转换警告:当需要一维数组时,传递了列向量 y。请将 y 的形状更改为 (n_samples,(,例如使用 ravel((。

model = forest.fit(train_fold, train_y(

以前train_y是一个系列,现在是numpy数组(它是一个列向量(。如果我应用 train_y.ravel() ,那么它就会变成一个行向量,并且没有出现错误消息,通过预测步骤需要很长时间(实际上它永远不会完成......

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

更改此行:

model = forest.fit(train_fold, train_y)

自:

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

解释:

.values将给出numpy数组中的值(形状:(n,1((

.ravel会将该数组形状转换为 (n, ((即展平它(

当我尝试训练 KNN 分类器时,我也遇到了这种情况。 但似乎在我更改后警告消失了:

knn.fit(X_train,y_train)
knn.fit(X_train, np.ravel(y_train,order='C'))

在这一行前面,我使用了import numpy as np.

我遇到了同样的问题。问题在于标签是列格式,而它期望它排成一行。使用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)
Y = y.values[:,0]
Y - formated_train_y
y - train_y

另一种方法是使用ravel

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

使用神经轴,您可以轻松解决此问题:

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])

TL;DR

y = np.squeeze(y)

而不是

y = y.ravel()

由于 Python 的ravel()可能是在这种特殊情况下实现预期结果的有效方法,因此我建议使用 numpy.squeeze() .
这里的问题是,如果你的y(numpy 数组(的形状是例如 (100, 2) ,则y.ravel()将沿第一个轴连接第二个轴上的两个变量,得到类似 (200,) 的形状。在处理必须单独考虑的自变量时,这可能不是您想要的.
另一方面,numpy.squeeze()只会修剪任何多余的尺寸(即尺寸为 1 的尺寸(。因此,如果您的 numpy 数组的形状是 (100, 1) ,这将导致形状(100,)数组,而形状 (100, 2) 的 numpy 数组的结果不会改变,因为没有一个维度的大小为 1。

相关内容

  • 没有找到相关文章

最新更新