【问题标题】:Format of train/test for random forest classifier with categorical variables具有分类变量的随机森林分类器的训练/测试格式
【发布时间】:2019-01-15 18:26:10
【问题描述】:

更新:如何为多个类别的 scikit randomforestclassifier 设置我的训练/测试 df?如何预测?

我的训练数据集有一个包含 4 个类别的分类结果列,我想预测这四个类别中的哪一个最有可能用于我的测试数据。查看其他问题,我尝试使用 pandas get_dummies 将四个新列编码为原始 df 代替原始 Outcome 列,但不确定如何向分类器指示这四列是类别,所以我使用了 @987654322 @.

然后我将训练集拆分为 80/20,并使用这些 x_train、x_valid 和 y_train、y_valid 调用 fit():

def split_vals(a,n): return a[:n].copy(), a[n:].copy() 
n_valid = 10000 
n_trn = len(df_raw_dumtrain)-n_valid
raw_train, raw_valid = split_vals(df_raw_dumtrain, n_trn)
X_train, X_valid = split_vals(df_raw_dumtrain, n_trn)
y_train, y_valid = split_vals(df_raw_dumtrain, n_trn)

random_forest = RandomForestClassifier(n_estimators=10)
random_forest.fit(X_train, y_train)
Y_prediction = random_forest.predict(X_train)

我尝试运行 fit() 为:

test_pred = random_forest.predict(df_test)

但我得到一个错误:

ValueError:模型的特征数量必须与输入匹配。 模型 n_features 为 27,输入 n_features 为 28

我应该如何配置我的测试集?

【问题讨论】:

  • 当你说你“虚拟编码”你的目标时,这是什么意思?一键编码?在这种情况下,您是手动完成的,使用 pandas get_dummies,还是使用 sklearn labelencoder
  • 通过 pandas get_dummies 进行一次热编码。 df_raw_dum = pd.get_dummies(df_raw['Outcome']) df_raw_dumtrain = pd.concat([df_raw, df_raw_dum], axis=1) df_raw_dumtrain.drop('Outcome', axis=1, inplace=True)
  • 实际的错误信息是什么? (注意:请在问题本身中编辑此评论和之前的评论,因为代码格式在 cmets 中表现不佳)
  • 您示例中的代码使用 RandomForestRegressor 而不是 RandomForestClassifier

标签: python pandas scikit-learn


【解决方案1】:

您必须从测试数据中删除目标变量,然后将数据框的剩余列作为预测函数的输入。您将能够解决功能不匹配的数量。

试试这个!

random_forest.predict(df_test.drop('Outcomes',axis=1))

注意:您不必为使用随机森林或任何基于决策树的模型创建目标变量的虚拟变量。

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 2013-12-02
    • 2021-07-10
    • 2018-02-18
    • 2020-11-25
    • 1970-01-01
    • 2020-04-27
    • 2021-09-29
    相关资源
    最近更新 更多