为什么逻辑回归和 SVM 预测在末尾乘以常量?



我目前正在尝试理解某些高级分类问题,并遇到了2012年Kaggle竞赛的一些代码。比赛讨论板是(这里(,获胜代码是(这里(。在第 223 行的代码几乎末尾,两个数组列表中的预测值分别乘以 0.4 和 0.6,然后相加。这是final_pred = preds[0] * 0.4 + preds[1] * 0.6行。我的问题是,为什么这些值在作为数组返回给调用函数之前要相乘?返回数组后,其值将保存到 CSV,因此不再进行"处理"。使用的模型是逻辑回归和 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

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

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

这些值可能也通过一些交叉验证方法进行训练,导致这些数字更加认真地对待 SVM 分类器!

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

最新更新