两个数据集的算法匹配类分布

时间:2018-07-06 21:55:34

标签: algorithm machine-learning scikit-learn classification

我有MC(Monte Carlo / simulation)和数据,每个事件具有两个0和1类的事件。我正在尝试编写一种算法,以便可以将MC的0和1类的事件数与数据进行匹配,即我想通过将它们从一类移到另一类来纠正MC事件,以使两个类中的数据和MC事件的比率相同。我进行的方式是:

  1. 从scikit集成中为数据和MC分别训练GradientBoostingClassifier(例如data_clf和mc_clf)

     mc_clf.fit(X_mc, Y_mc)
     data_clf.fit(X_data , Y_data)
    
  2. 现在,如果X_mc是我的输入变量,则仅使用mc输入(例如

    ),使用predict_proba预测数据和MC分类器的概率
     y_mc = smcclf.predict_proba(X_mc)
     y_data = sdataclf.predict_proba(X_mc)
    
  3. 此后,我通过比较数据和MC中的事件概率,尝试将MC事件从一类转移到另一类。

     for i in range(0, len(mc)):
         if (mc.loc[i]['mc_class'] == 0): 
             wgt = y_data[i][0]/ y_mc[i][0]
             if (wgt<1): mc.loc[i]['mc_class_corrected'] = 1
             else: mc.loc[i]['mc_class_corrected'] = mc.loc[i]['mc_class'] 
    
    
         if (mc.loc[i]['mc_class'] == 1): 
             wgt = y_data[i][1]/ y_mc[i][1]
             if (wgt<1) : mc.loc[i]['mc_class_corrected'] = 0
             else: mc.loc[i]['mc_class_corrected'] = mc.loc[i]['mc_class'] 
    

最后,发生的事情是,最初假设与数据相比,MC中0类的事件多于1类。因此,我希望从第0类的事件移至第1类。但是,我看到我的MC第0类的事件中几乎有95%以上的事件移至了第1类,而我预计只有约30%的事件移至第1类。数据和MC中的事件数)? 这种工作思想有什么错误吗?

非常感谢:)

1 个答案:

答案 0 :(得分:2)

也许是一个不适合stackoverflow的问题,如果您在其他地方发布,请告诉我并可以解决。但要指出一些我看到的问题:

  • 为什么MC模拟不能生成正确的类权重?给定正确的数据先验分布,它应该能够。 “纠正”输出似乎闪避。
  • 您似乎正在使用分类器中的概率比率来确定类别是否应该更改,而不是实际的类别比率。因此,永远无法期望它达到“正确的”类分布。
  • 这一切告诉您(如果大多数都从0切换到1)是y_mc[i][0]> y_data[i][0]。因此,对于MC分类器为0更有信心,因此将其切换为1。
  • 如果y_mcy_data的分类器始终是MC,则对MC数据进行预测显然会更有信心,因为这就是训练数据。
  • 您没有进行任何训练或测试的机会,因此,关于保持自信的上述观点被放大,因为您将过度适应X_mc集。

很难说出这些点在没有样本数据(以查看预测的实际值等)或实际代码(分类器的名称发生变化,而不是实际代码)的情况下的准确性。