为什么 Logistic Regression 和 SVM 预测最后要乘以常数?

Why are Logistic Regression and SVM predictions multiplied by constants at the end?

我目前正在尝试理解某些高级分类问题,并且在 2012 年 运行 的 Kaggle 竞赛中遇到了一些代码。竞赛讨论板是 (here) and the winning code is (here)。在第 223 行代码的末尾,两个数组列表中的预测值分别乘以 0.4 和 0.6,然后相加。这是行 final_pred = preds[0] * 0.4 + preds[1] * 0.6。我的问题是,为什么这些值在作为数组返回给调用函数之前要相乘?返回数组后,其值将保存为 CSV,因此不再生成 "processing"。使用的模型是 Logistic 回归和 SVM.svc,但这种情况发生在所有模型完成数据处理之后,并且在使用 pred = model.predict_proba(X_test).

预测数据之后

任何人都可以告诉我一些关于为什么会发生这种情况的信息吗?

为完整起见编辑以添加函数代码 此代码是一个较长程序的一部分,该程序将 (binary [0,1]) 文本预测为侮辱或非侮辱。原代码链接包含在我的原post.

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

这只是一个使用两个子预测器(LogReg 和 SVM)的元预测器。

组合多个预测模型的方法有很多,这个convex-combination是最简单的方法之一。

这些值可能还使用一些交叉验证方法进行了训练,导致这些数字在 SVM 分类器中得到了更认真的对待!

我不确定任务到底是什么,但我认为 类 的数量应该是 2(0 和 1 或 -1 和 1;至少在这个预测步骤中;可能有是一些外部 OvO 或 OvA 方案)在这里有意义。