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

3
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)

当我运行这段代码,预测变量“output”作为此文件中所有其他变量的函数时:https://www.dropbox.com/s/cgyh09q2liew85z/uuu.csv?dl=0 期望和预测数组完全相同。看起来我可能过度拟合或者做错了什么。如何解决?

1
取决于数据的复杂性。您能否运行相同的实验,但使用0.5作为训练和测试的比例? - Farseer
1个回答

1

赞扬你对过于好的结果提出质疑!

数据中的每个特征(列)只包含少量不同的值。如果我数对了,那么只有14行是唯一不同的

这有两个影响:

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

  2. 相同的行在测试集和训练集中很可能再次出现。这意味着您正在测试模型所训练的相同数据。由于模型完全过拟合于此数据,您将获得完美的结果。

编辑

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

这取决于情况。

如果你很幸运,有人在准备数据时犯了错误。

如果数据是正确的,事情会更加困难。首先,通过执行np.vstack({tuple(row) for row in data})(请参见此处)消除重复行。然后尝试看看是否可以对其进行一些有意义的工作。但说实话,我认为14个样本对于进行机器学习来说有点少。尝试获取更多数据 :)

谢谢 @kazemakase,你说得对,我的代码有一个错误导致了独特行数的减少。 - user308827
1
啊,我刚刚修改了我的回答。看起来你运气不错,选了个幸运选项 :) - MB-F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接