我有MC(Monte Carlo / simulation)和数据,每个事件具有两个0和1类的事件。我正在尝试编写一种算法,以便可以将MC的0和1类的事件数与数据进行匹配,即我想通过将它们从一类移到另一类来纠正MC事件,以使两个类中的数据和MC事件的比率相同。我进行的方式是:
从scikit集成中为数据和MC分别训练GradientBoostingClassifier(例如data_clf和mc_clf)
mc_clf.fit(X_mc, Y_mc)
data_clf.fit(X_data , Y_data)
现在,如果X_mc是我的输入变量,则仅使用mc输入(例如
),使用predict_proba预测数据和MC分类器的概率 y_mc = smcclf.predict_proba(X_mc)
y_data = sdataclf.predict_proba(X_mc)
此后,我通过比较数据和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中的事件数)? 这种工作思想有什么错误吗?
非常感谢:)
答案 0 :(得分:2)
也许是一个不适合stackoverflow的问题,如果您在其他地方发布,请告诉我并可以解决。但要指出一些我看到的问题:
y_mc[i][0]
> y_data[i][0]
。因此,对于MC分类器为0更有信心,因此将其切换为1。y_mc
和y_data
的分类器始终是MC,则对MC数据进行预测显然会更有信心,因为这就是训练数据。很难说出这些点在没有样本数据(以查看预测的实际值等)或实际代码(分类器的名称发生变化,而不是实际代码)的情况下的准确性。