首页 > 解决方案 > 具有分类变量的随机森林分类器的训练/测试格式

问题描述

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

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

然后我将训练集拆分为 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

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

标签: pythonpandasscikit-learn

解决方案


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

尝试这个!

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

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


推荐阅读