【问题标题】:How do I show one prediction using Random Forest?如何使用随机森林显示一个预测?
【发布时间】:2022-01-12 03:47:47
【问题描述】:

我的示例数据集如下所示 -

我的X_train 功能是'Gender', 'Age', 'Leisure', 'Married', 'Division' & y_train 是'Online Shopping'

我的最后一部分代码是这样的 -

from sklearn.ensemble import RandomForestClassifier
#rfc_100 = RandomForestClassifier(n_estimators=100, random_state=0)

rfc = RandomForestClassifier(random_state=0)

# fit the model

rfc.fit(X_train, y_train)

# Predict the Test set results

y_pred = rfc.predict(X_test)

# Check accuracy score 

from sklearn.metrics import accuracy_score

print('Model accuracy score with 10 decision-trees : {0:0.4f}'. format(accuracy_score(y_test, y_pred)))

现在我的问题是如何使用这个已经构建的模型并检查预测?例如,我想提供这样的输入'Son 19-30 Games Yes C' & 我想看看对在线购物兴趣的预测是什么。输出应该是是或否。

编码过程-

#Labeling
import category_encoders as ce
encoder1 = ce.OrdinalEncoder(cols=['Gender', 'Age', 'Leisure', 'Married', 'Division'])


X_train = encoder1.fit_transform(X)

X_test = encoder1.transform(X)

encoder2= ce.OrdinalEncoder(cols=['Online Shopping'])

#y_test is True Online Shopping labels
#y_pred is predicted Online Shopping label in test set

y_train = encoder2.fit_transform(y)

y_test = encoder2.transform(y)

标签的输出-

【问题讨论】:

  • 你试过rfc.predict吗?
  • 没有。它是否返回自定义输入的输出?
  • 另外,我需要在这里先将“Son 19-30 Games Yes C”转换为标签
  • 是的,它确实返回自定义输入的输出。您必须以与构造 X_test 相同的方式构造“Son 19-30 Games Yes C”,除了一个数据点
  • 我已经使用类别编码器来构造 x_test。所以如果我在这里再次对新数据帧使用类别编码器,那么标签将不会和以前一样。

标签: python machine-learning dataset random-forest


【解决方案1】:

试试这个:

d = {'Gender': ['Son'], 'Age': ['19-30'], 'Leisure': ['Games'], 'Married': ['Yes'], 'Division': ['C']}
df_dp = pd.DataFrame(data=d)
x_dp = encoder1.transform(df_dp)
print(encoder2.inverse_transform(rfc.predict(x_dp)))

其中 df_dp 是单个数据点的 pandas 数据帧,我们对其进行编码,然后使用 rfc.predict() 显示预测

我还从您的代码中注意到 X_trainX_test 来自同一个数据集。这不应该是这样:训练数据用于训练模型,而测试数据用于查看模型在泛化到看不见的数据方面的能力。这就是为什么您的训练数据和测试数据应该不同的原因。

【讨论】:

  • 其实我之前是这样拆分数据集的 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33, random_state = 42)
  • 你似乎用这些代码行覆盖了它们 X_train = encoder1.fit_transform(X) X_test = encoder1.transform(X)
  • 我现在已经把我的代码改成了这个 encoder1 = ce.OrdinalEncoder(cols=['Gender', 'Age', 'Leisure', 'Married', 'Division']) X_train = encoder1. fit_transform(X_train) X_test = encoder1.transform(X_test) encoder2= ce.OrdinalEncoder(cols=['Online Shopping']) #y_test 是 True Online Shopping labels #y_pred 是预测的 Online Shopping label in test set y_train = encoder2.fit_transform( y_train) y_test = encoder2.transform(y_test)
  • 这解决了火车测试拆分问题!我回答你的问题了吗?
猜你喜欢
  • 2014-08-07
  • 2021-03-21
  • 2019-05-04
  • 2019-07-10
  • 2021-06-23
  • 2019-02-19
  • 2019-01-22
  • 2016-04-09
相关资源
最近更新 更多