【问题标题】:2D arrays in Random Forest fitting and scoring随机森林拟合和评分中的二维数组
【发布时间】:2021-10-28 14:02:27
【问题描述】:

我正在尝试拟合 随机森林回归模型。这是我遵循的步骤(请参阅 下面的代码与 cmets):

  1. 在拟合模型之前,我已经分为训练和测试
  2. 我已将结果转换为数组
  3. 我已将它们重新整形为 2D 数组,因为回归器希望它们使用整形函数

我收到以下错误(似乎有一个一维数组,即使我在一开始就对其进行了重构):

ValueError: Expected 2D array, got 1D array instead:
array=[183.  27. 520. ...  23.  28.  34.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or 
array.reshape(1, -1) if it contains a single sample.

这是我使用的代码:

#train & test split
X = order_final.loc[:, ~order_final.columns.isin(['lag','observed'])]
y = order_final['lag']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

#convert X,y train and X test into arrays
X_train = X_train.to_numpy()
y_train = y_train.to_numpy()
X_test = X_test.to_numpy()

#make them 2D-arrays
X_train.reshape(-1,1)
y_train.reshape(-1,1)
X_test.reshape(-1,1)

# Fitting Random Forest Regression to the dataset
# import the regressor
from sklearn.ensemble import RandomForestRegressor

# create regressor object
RF = RandomForestRegressor(n_estimators = 100, random_state = 0)

# fit the regressor with x and y data
RF.fit(X_train, y_train)

#Prediction of test set
y_pred = RF.predict(X_test)

# View accuracy score
RF.score(y_test, y_pred)

这是我的阵列的形状(对我来说看起来不错,但是......):

print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)
print(y_pred.shape)

(7326, 10) (7326,) (1832, 10) (1832 年,) (1832 年,)

有人可以帮助我并指出错误在哪里吗?提前致谢!

斯特凡诺

【问题讨论】:

  • 哪一行出错了?
  • 您好,感谢您的回答。这是行:---> 30 RF.score(y_test, y_pred)

标签: python arrays machine-learning scikit-learn random-forest


【解决方案1】:

RF.score() 需要重新整形输入:

RF.score(y_test.reshape(-1,1), y_pred.reshape(-1,1))

【讨论】:

    【解决方案2】:

    您需要将用于进行预测的输入传递给 score() 方法,如下所示:

    RF.score(X_test, y_test)
    

    【讨论】:

      【解决方案3】:

      您在使用 score() from sklearn.ensemble.RandomForestRegressor 时犯了错误,并且您没有通过 X

      查看使用score()ref)的详细信息:

      score(X, y, sample_weight=None)

      对于回归问题,您可以使用:R2 分数、MSE(均方误差)、RMSE(均方根误差)。

      您可以使用此代码:

      from sklearn.metrics import r2_score
      r2_score(y_test, y_pred)
      

      代替这一行:

      RF.score(y_test, y_pred)
      

      【讨论】:

      • @StefanoPuccini,你检查我的答案吗?
      • 是的,我刚试过。我认为 y_pred = y_pred.to_numpy() 可以忽略(事实上它告诉我 'numpy.ndarray' 对象没有属性 'to_numpy')...如果我只添加 y_pred.reshape(-1 ,1) 就在运行分数之前,它给了我同样的错误...但是如果我检查 y_test 和 y_pred 的形状,它们都是 (1832,)...
      • 作为进一步的证明,我编写了这个循环,它给出了训练和测试对象的类型和形状:for i in X_train, y_train, X_test, y_test, y_pred: print(i.shape) print(type(i)),我得到:(7326, 10) (7326,) (1832, 10) (1832,) (1832,)
      • @StefanoPuccini,我编辑了答案,看到这个新答案对你有帮助吗?
      猜你喜欢
      • 2016-03-01
      • 2014-04-30
      • 2017-08-11
      • 2017-04-28
      • 2018-06-07
      • 2015-10-19
      • 2020-06-24
      • 2020-12-13
      • 1970-01-01
      相关资源
      最近更新 更多