使用sklearn的RandomForestRegressor进行预测

我的数据看起来是这样的…

date,locale,category,site,alexa_rank,sessions,user_logins20170110,US,1,google,1,500,500020170110,EU,1,google,2,400,200020170111,US,2,facebook,2,400,2000

… 等等。这只是我编造的一个玩具数据集,但它与原始数据相似。

我正在尝试构建一个模型,使用sklearn的RandomForestRegressor来预测特定网站的用户登录和会话数量。

我做了通常的操作,将类别编码为标签,并且我已经用这一年的前八个月的数据训练了模型,现在我想预测第九个月的登录和会话。我为登录和会话分别训练了两个模型。

我的测试数据集形式相同:

date,locale,category,site,alexa_rank,sessions,user_logins20170910,US,1,google,1,500,500020170910,EU,1,google,2,400,200020170911,US,2,facebook,2,400,2000

理想情况下,我希望在不包含需要预测的列的情况下传入测试数据集,但RandomForestRegressor抱怨训练集和测试集之间的维度不同。

当我以当前形式传入测试数据集时,模型在大多数情况下预测了sessionsuser_logins列中的确切值,其他情况下预测的值略有不同。

我在测试数据中将sessionsuser_logins列置零,并将其传递给模型,但模型预测的几乎都是零。

  • 我的工作流程正确吗?我正确使用了RandomForestRegressor吗?
  • 当我的测试数据集中包含实际值时,我为什么能得到如此接近实际值的结果?测试数据中的实际值是否被用于预测?
  • 如果模型工作正常,当我将要预测的列(sessionsuser_logins)置零时,不应该得到相同的值吗?

回答:

你不应该在测试数据中传入你想要预测的列。你的工作流程是不正确的。

如果X是你拥有的信息的列集,y是你想要预测的信息的列集,那么在训练过程中(使用fit方法)你应该传入(X_train, y_train),在测试过程中(使用predict方法)只传入(X_test,)。你将获得y_pred,如果你有y_test,你可以将其与y_test进行比较。

在你的例子中,如果你想预测user_logins

X_train = array([['20170110', 'US', '1', 'google', '1', '500'],                 ['20170110', 'EU', '1', 'google', '2', '400'],                 ['20170111', 'US', '2', 'facebook', '2', '400']],                dtype='<U21')y_train = array(['5000', '2000', '2000'], dtype='<U21')X_test = array([['20170112', 'EU', '2', 'google', '1', '500'],                ['20170113', 'US', '1', 'facebook', '2', '400'],                ['2017014', 'US', '2', 'google', '1', '500']],               dtype='<U21')estimator = RandomForestRegressor().fit(X_train, y_train)y_pred = estimator.predict(X_test)

查看文档获取更多示例,或者查看教程

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注