1

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

1)我是否需要子类化SVC并给它一个predict()返回概率而不是类的方法来完成我的对数似然交叉验证?我想我需要自己写score_func还是loss_func

2)对这个负对数可能性进行交叉验证是愚蠢的吗?我正在这样做 b/c 数据集是:a)不平衡 5:1 和 b)根本不可分离,即即使“最差”的观察结果也有 > 50% 的机会进入“好”类。(可能还会在统计问答中发布第二个问题)

4

2 回答 2

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

    class ProbSVC(SVC):
        def predict(self, X):
            return super(ProbSVC, self).predict_proba(X)
    
  2. 我不确定这是否可行,因为多数类别可能仍会主导对数似然分数,并且最终估计器可能仍会为少数类别的样本产生 >.5 的阳性结果。不过,我不确定,所以请将此发布到统计信息中。

于 2013-05-21T11:48:23.157 回答
2

使用 sklearn 开发版中的新记分器接口,您不需要子类化。您只需要按照文档中的描述定义一个评分对象 基本上您需要执行 log_loss_score = Scorer(neg_log_loss, needs_threshold=True) 此操作,不过这可能会退回到“decision_function”。

您还可以定义一个新的记分器类,该类调用predict_proba估计器以确保它获得归一化的概率。

此外,欢迎提出日志丢失请求:)

于 2013-05-21T14:58:23.500 回答