这可能是一个非常愚蠢的问题,所以请放心,但我来了。
下面是我的数据。。。
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
等等。这只是我想出的一个玩具数据集,但它与原始数据相似。
我正在尝试使用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
理想情况下,我希望在没有我需要预测的列的情况下传递测试数据集,但RandomForestProgsor抱怨训练集和测试集的维度不同。
当我通过当前形式的测试数据集时,在大多数情况下,模型预测sessions
和user_logins
列中的精确值,否则预测变化很小的值。
我将测试数据中的sessions
和user_logins
列归零,并将其传递给模型,但模型预测的几乎都是零。
- 我的工作流程正确吗?我是否正确使用RandomForestProgsor
- 当我的测试数据集确实包含实际值时,我是如何如此接近实际值的?测试数据中的实际值是否用于预测
- 如果模型工作正常,如果我将要预测的列(
sessions
和user_logins
)清零,我不应该得到相同的预测值吗
您不应该在测试数据中传递要预测的列。您的工作流程不正确。
如果CCD_ 8是您所拥有的信息的列集合,如果CCD_ 9是要预测的信息的列的集合,那么您应该在训练期间(使用方法fit
)通过(X_train
,y_train
),并且仅在测试期间(使用方式predict
)通过(X_test
,)。您将获得y_pred
,如果您有,可以与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)
查看文档以获取更多示例,或查看教程。