我目前正試圖瞭解某些高級別的分類問題,並且遇到了2012年運行的Kaggle競賽的一些代碼。競賽討論板是(here),獲獎代碼是(here)。幾乎在223行代碼的末尾,兩個數組列表中的預測值分別乘以0.4和0.6,然後相加。這是行final_pred = preds[0] * 0.4 + preds[1] * 0.6
。我的問題是,爲什麼數值在作爲數組返回到調用函數之前相乘?數組返回後,其值將被保存爲CSV,因此不再進行「處理」。使用的模型是Logistic Regression和SVM.svc,但是在所有模型完成數據業務並使用pred = model.predict_proba(X_test)
預測數據之後,會發生這種情況。Logistic迴歸和SVM預測爲什麼在最後乘以常數?
任何人都可以請給我一些信息,爲什麼發生這種情況?
EDIT添加函數的代碼爲完整起見 該代碼是預測(二進制[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
我還沒有看過整個代碼。但是從你的帖子中,preds列表是在每個模型下發生事件的概率。然後,他使用加權平均來組合兩種方法(對preds [1]加重權重),然後返回最終的加權概率。 – Vico
@Vico:據我所知,他在比賽討論板上比較重視支持向量機,他說支持向量機分類器可能會有一個與使用LR的競爭。但我很好奇如何決定體重值;例如,爲什麼不是0.3和0.7,還是會給第二個分類器帶來太多的偏好而造成偏見?謝謝。 – salvu