【发布时间】:2018-12-15 12:23:31
【问题描述】:
我有 MC(蒙特卡洛/模拟)和数据,每个数据都有 0 和 1 两个类中的事件。我正在尝试编写一个算法,以便我可以将 MC 的 0 类和 1 类中的事件数与数据相匹配,即我想通过将 MC 事件从一个类移动到另一个类来纠正 MC 事件,以便数据和 MC 的两个类中的事件比率相同。我进行的方式是:
-
从 scikit ensemble 分别为数据和 MC 训练一个 GradientBoostingClassifier(比如 data_clf 和 mc_clf)
mc_clf.fit(X_mc, Y_mc) data_clf.fit(X_data , Y_data) -
现在,如果 X_mc 是我的输入变量,则使用 predict_proba 来预测数据分类器和 MC 仅使用 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% 的事件会转移(相比之下数据和 MC 中的事件数)? 这种工作思想有什么错误吗?
非常感谢:)
【问题讨论】:
-
@desertnaut 并不是没有尝试解决它。它没有按照我在“添加”中提到的使用概率条件的方式工作
-
一个尝试意味着一个编码尝试,必须展示和分享,否则这里的问题是题外话
-
也许 CrossValidated SE 更适合这个问题?
-
MC到底是什么?
-
@MohammedKashif 蒙特卡洛事件或模拟事件。我所说的数据是指真实的数据事件。
标签: algorithm machine-learning scikit-learn classification