我目前正在尝试了解某些高级别的分类问题,并且在2012年的Kaggle竞赛中遇到了一些代码。比赛讨论区是(here),获胜的代码是(here)。几乎在第223行代码的末尾,两个数组列表中的预测值分别乘以0.4和0.6,然后加在一起。这是第final_pred = preds[0] * 0.4 + preds[1] * 0.6
行。我的问题是,为什么值在作为数组返回到调用函数之前成倍增加?返回数组后,其值将保存为CSV,因此不再需要处理"是。使用的模型是Logistic回归和SVM.svc,但这是在所有模型使用数据完成业务并使用pred = model.predict_proba(X_test)
预测数据之后发生的。
任何人都可以给我一些关于为什么会这样的信息吗?
编辑以添加功能代码的完整性'起见 此代码是较长程序的一部分,该程序将(二进制[0,1])文本预测为侮辱或非侮辱。原始代码的链接包含在我的原始帖子中。
def runClassifiers(X_train, y_train, X_test, y_test = None, verbose = True):
models = [ linear_model.LogisticRegression(C=3),
svm.SVC(C=0.3,kernel='linear', probability=True)]
# another two classifiers are commented out by the original author
dense = [False, False, True, True] # if model needs dense matrix
X_train_dense = X_train.todense()
X_test_dense = X_test.todense()
preds = []
for ndx, model in enumerate(models):
t0 = time()
print "Training: ", model, 20 * '_'
if dense[ndx]:
model.fit(X_train_dense, y_train)
pred = model.predict_proba(X_test_dense)
else:
model.fit(X_train, y_train)
pred = model.predict_proba(X_test)
print "Training time: %0.3fs" % (time() - t0)
preds.append(array(pred[:,1]))
final_pred = preds[0]*0.4 + preds[1]*0.6
return final_pred
答案 0 :(得分:2)
这只是一个使用两个子预测器(LogReg和SVM)的元预测器。
有很多方法可以组合多个预测模型,而convex-combination是最简单的模型之一。
这些值可能也经过一些交叉验证方法的训练,导致这些数字更加严重地采用SVM分类器!
我不确定这个任务究竟是什么,但我认为类的数量应该是2(0和1或-1和1;至少在这个预测步骤中;可能有一些外部OvO或OvA方案)在这里有意义。