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

Python 在scikit学习随机森林模型中,预期和预测的数组最终相同,python,numpy,pandas,scikit-learn,random-forest,Python,Numpy,Pandas,Scikit Learn,Random Forest,当我运行此代码以预测变量“output”作为该文件中所有其他变量的函数时: 预期阵列和预测阵列完全相同。看起来我太过合适或者做错了什么。如何修复它?质疑太好的结果真是太好了 数据中的每个特征(列)仅包含少量不同的值。如果我计算正确,则只有14个不同的行 这有两个含义: 您很可能是过度拟合,因为您只有14个有效样本,但有36个特征 同样的行很可能再次出现在测试集中和训练集中。这意味着您正在对模型进行训练的相同数据进行测试。由于该模型与该数据完全过度拟合,因此可以得到完美的结果 编辑 我刚刚意识到我

当我运行此代码以预测变量“output”作为该文件中所有其他变量的函数时:


预期阵列和预测阵列完全相同。看起来我太过合适或者做错了什么。如何修复它?

质疑太好的结果真是太好了

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

这有两个含义:

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

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

  • 编辑

    我刚刚意识到我还没有回答真正的问题——如何解决它

    那要看情况

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


    如果数据是正确的,事情将更加困难。首先,消除重复行,例如通过执行
    np.vstack({tuple(row)for row in data})
    (请参阅)。然后尝试一下,如果你能用它做一些有意义的工作。但老实说,我相信14个样本对于机器学习来说有点低。尝试获取更多数据:)

    取决于数据的复杂性。你可以运行相同的实验,但使用0.5进行训练,使用0.5进行测试吗?谢谢@kazemakase,你是对的,我的代码中有一个错误导致唯一rowsAh数低,我刚刚编辑了我的答案。看起来你抽到了幸运的选项,然后:)
    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)