Scikit-Learn:如何检索KFold CV的预测概率?

时间:2015-06-17 14:20:21

标签: python scikit-learn classification

我有一个由图像和相关描述组成的数据集。我将它们分成两个独立的数据集,它们有自己的分类器(视觉和文本),现在我想结合这两个分类器的预测来形成最终预测。

但是,我的类是二进制的,无论是1还是0.我最终得到两个充满1和0的n_samples列表。我假设对于大多数算法/分类器而言,这不足以进行有用的预测(即,当一个分类器预测1而另一个分类器为0时)。

因此我认为我可以将预测的概率用作某种形式的决定性加权。 SKlearn中的SVC具有svm.SVC.predict_proba功能。返回一个可能如下所示的数组:

[[ 0.9486674   0.0513326 ]
 [ 0.97346471  0.02653529]
 [ 0.9486674   0.0513326 ]]

但我似乎无法将其与我的Kfold交叉验证函数cross_validation.cross_val_predict结合起来,因为这本身就是一个预测函数,并且不包含类似的概率预测输出。有没有办法将两者结合起来?或者我错过了什么?

可能:我是否完全错误地解决了我的问题,是否有更好的方法来结合两个二元分类器的预测?

提前致谢

1 个答案:

答案 0 :(得分:3)

您需要执行GridSearchCrossValidation而不仅仅是CV。 CV用于性能评估,实际上并不适合估算器。

from sklearn.datasets import make_classification
from sklearn.svm import SVC
from sklearn.grid_search import GridSearchCV

# unbalanced classification
X, y = make_classification(n_samples=1000, weights=[0.1, 0.9])

# use grid search for tuning hyperparameters
svc = SVC(class_weight='auto', probability=True)
params_space = {'kernel': ['linear', 'poly', 'rbf']}
# set cv to your K-fold cross-validation
gs = GridSearchCV(svc, params_space, n_jobs=-1, cv=5)
# fit the estimator
gs.fit(X, y)
gs.predict_proba(X)

Out[136]: 
array([[ 0.0074817 ,  0.9925183 ],
       [ 0.03655982,  0.96344018],
       [ 0.0074933 ,  0.9925067 ],
       ..., 
       [ 0.02487791,  0.97512209],
       [ 0.01426704,  0.98573296],
       [ 0.98574072,  0.01425928]])