sci-kit中SVC概率输出的网格搜索交叉验证

时间:2013-05-21 11:31:21

标签: python machine-learning scikit-learn

我想对SVC分类器的概率输出运行网格搜索交叉验证。特别是我想最小化负对数可能性。从文档中可以看出,GridSearchCV调用了估算器的predict()方法,并且predict() SVC方法返回类预测而不是概率(predict_proba()返回类概率)。

1)我是否需要子类化SVC并为其提供一个predict()方法,该方法返回概率而不是类来完成我的对数似然交叉验证?我想我需要编写自己的score_funcloss_func

2)对这个负对数的交叉验证可能性是否愚蠢?我正在做b / c数据集是:a)不平衡5:1和b)根本不可分离,即使“最差”观察具有>有50%的几率进入“好”级别。 (可能还会在统计数据q& a上发布第二个问题)

2 个答案:

答案 0 :(得分:2)

  1. 是的,你会在两个帐户上。

    class ProbSVC(SVC):
        def predict(self, X):
            return super(ProbSVC, self).predict_proba(X)
    
  2. 我不确定这是否有效,因为大多数类仍可能主导对数似然得分,最终估计可能仍然会为少数类的样本产生≥5。不过,我不确定,所以请将其发布到统计数据。

答案 1 :(得分:2)

使用sklearn开发版中的新记分器界面,您不需要子类化。您只需按照in the docs所述定义评分对象 基本上你需要这样做 log_loss_score = Scorer(neg_log_loss, needs_threshold=True) 不过,这可能会回归到“decision_function”。

您还可以定义一个新的记分器类,在估算器上调用predict_proba以确保它获得规范化的概率。

此外,欢迎提取对数丢失请求:)