在 scikit 学习随机森林模型中,预期和预测的数组最终相同

Posted

技术标签:

【中文标题】在 scikit 学习随机森林模型中,预期和预测的数组最终相同【英文标题】:Expected and predicted arrays ending up to be the same in scikit learn random forest model 【发布时间】:2016-05-01 21:27:31 【问题描述】:
data = df_train.as_matrix(columns=train_vars)  # All columns aside from 'output'
target = df_train.as_matrix(columns=['output']).ravel()

# Get training and testing splits
splits = cross_validation.train_test_split(data, target, test_size=0.2)
data_train, data_test, target_train, target_test = splits

# Fit the training data to the model
model = RandomForestRegressor(100)
model.fit(data_train, target_train)

# Make predictions
expected = target_test
predicted = model.predict(data_test)

当我运行此代码来预测变量“输出”作为该文件中所有其他变量的函数时:https://www.dropbox.com/s/cgyh09q2liew85z/uuu.csv?dl=0

预期和预测的数组完全相同。好像我过度拟合或做错了什么。如何解决?

【问题讨论】:

取决于数据的复杂性。您可以运行相同的实验,但使用 0.5 进行训练,使用 0.5 进行测试? 【参考方案1】:

感谢质疑太好的结果!

数据中的每个特征(列)仅包含少量不同的值。如果我数正确的话,只有 14 个不同的行

这有两个含义:

    您很可能会过度拟合,因为您只有 14 个有效样本但有 36 个特征。

    相同的行非常可能再次出现在测试集中和训练集中。这意味着您正在测试与模型训练相同的数据。由于模型完全过度拟合这些数据,因此您可以获得完美的结果。

编辑

我刚刚意识到我没有回答实际问题 - 如何解决它?

这取决于。

如果你幸运的话,有人在准备数据时出错了。

如果数据正确,事情会变得更加困难。首先,删除重复的行,例如通过执行np.vstack(tuple(row) for row in data)(参见here)。然后尝试是否可以用它做一些有意义的工作。但老实说,我认为 14 个样本对于做机器学习来说有点低。尝试获取更多数据:)

【讨论】:

感谢@kazemakase,你是对的,我的代码中有一个错误导致唯一行数过少 啊,我刚刚编辑了我的答案。看起来你抽到了幸运选项,然后:)

以上是关于在 scikit 学习随机森林模型中,预期和预测的数组最终相同的主要内容,如果未能解决你的问题,请参考以下文章

火炉炼AI机器学习007-用随机森林构建共享单车需求预测模型

偏移随机森林分类器 scikit 学习

如何在 scikit-learn 中执行随机森林模型的交叉验证?

如何为scikit学习随机森林模型设置阈值

如何在 Python scikit-learn 中输出随机森林中每棵树的回归预测?

随机森林分类 - SciKit 与 Weka 的 100 个特征预测