使用 sklearn 的 RandomForestRegressor 进行预测

Cra*_*aig 0 regression machine-learning random-forest scikit-learn

可能是一个非常愚蠢的问题,所以对我来说很容易,但我走了。

所以这就是我的数据的样子......

date,locale,category,site,alexa_rank,sessions,user_logins
20170110,US,1,google,1,500,5000
20170110,EU,1,google,2,400,2000
20170111,US,2,facebook,2,400,2000
Run Code Online (Sandbox Code Playgroud)

... 等等。这只是我想出的一个玩具数据集,但它类似于原始数据。

我正在尝试使用 sklearn 的RandomForestRegressor.

我做通常的事情,将类别编码为标签,并且我已经在一年的前八个月训练了我的模型,现在我想预测第九个月的登录和会话。我创建了一个接受登录训练的模型和另一个接受会话训练的模型。

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

date,locale,category,site,alexa_rank,sessions,user_logins
20170910,US,1,google,1,500,5000
20170910,EU,1,google,2,400,2000
20170911,US,2,facebook,2,400,2000
Run Code Online (Sandbox Code Playgroud)

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

当我以当前形式传递测试数据集时,模型会在大多数情况下预测和列中的确切值,否则预测值会有微小的变化。sessionsuser_logins

我将测试数据中的sessionsuser_logins列归零 并将其传递给模型,但模型预测几乎全部为零。

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

Tom*_*DLT 5

您不应该在测试数据中传递要预测的列。您的工作流程不正确。

如果X是你拥有的信息的列集,如果y是你想要预测的信息的列集,那么你应该在训练期间(使用方法)通过(X_train,),并且(,)仅在测试期间(使用方法)。如果您拥有它,您将获得可以比较的东西。y_trainfitX_testpredicty_predy_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)
Run Code Online (Sandbox Code Playgroud)

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