问题:当期望一维数组时,传递了列向量y
我需要适应RandomForestRegressor
的sklearn.ensemble
。
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()。
模型= forest.fit(train_fold,train_y)
以前train_y
是一个Series,现在是numpy数组(它是列向量)。如果我应用train_y.ravel()
,则它成为行向量,并且没有错误消息出现,通过预测步骤需要很长时间(实际上,它永远不会完成…)。
在RandomForestRegressor
我发现的文档中,train_y
应将其定义为“ y : array-like, shape = [n_samples] or [n_samples, n_outputs]
如何解决此问题的想法?”。
回答 0
更改此行:
model = forest.fit(train_fold, train_y)
至:
model = forest.fit(train_fold, train_y.values.ravel())
编辑:
.values
将给出数组中的值。(形状:[n,1)
.ravel
会将数组形状转换为(n,)
回答 1
当我尝试训练KNN分类器时,我也遇到了这种情况。但似乎在警告不见了,我改变之后:knn.fit(X_train,y_train)
以knn.fit(X_train, np.ravel(y_train,order='C'))
在这行之前,我用过import numpy as np
。
回答 2
我有同样的问题。问题在于标签是按列格式的,而它却希望连续显示。用np.ravel()
knn.score(training_set, np.ravel(training_labels))
希望这能解决。
回答 3
使用以下代码:
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)
回答 4
另一种方法是使用 ravel
model = forest.fit(train_fold, train_y.values.reshape(-1,))
回答 5
使用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!
回答 6
format_train_y=[]
for n in train_y:
format_train_y.append(n[0])
回答 7
Y = y.values [:,0]
Y-formated_train_y
y-train_y