为什么Logistic回归和SVM预测最后乘以常数?

时间:2017-08-25 13:19:24

标签: python text-classification kaggle

我目前正在尝试了解某些​​高级别的分类问题,并且在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

1 个答案:

答案 0 :(得分:2)

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

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

这些值可能也经过一些交叉验证方法的训练,导致这些数字更加严重地采用SVM分类器!

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