【问题标题】:How can i know probability of class predicted by predict() function in Support Vector Machine?我如何知道支持向量机中 predict() 函数预测的类概率?
【发布时间】:2013-02-07 13:42:09
【问题描述】:

如何知道样本属于支持向量机中 Scikit-Learn 的 predict() 函数预测的类的概率?

>>>print clf.predict([fv])
[5]

有什么功能吗?

【问题讨论】:

    标签: svm scikit-learn


    【解决方案1】:

    一定要阅读this section of the docs,因为其中涉及一些微妙之处。另见Scikit-learn predict_proba gives wrong answers

    基本上,如果您有一个包含大量数据的多类问题,predict_proba 就像前面建议的那样效果很好。否则,您可能不得不使用不会从 decision_function 产生概率分数的排序。

    这是使用 predict_proba 获取字典或类别与概率列表的一个很好的主题:

    model = svm.SVC(probability=True)
    model.fit(X, Y)
    results = model.predict_proba(test_data)[0]
    
    # gets a dictionary of {'class_name': probability}
    prob_per_class_dictionary = dict(zip(model.classes_, results))
    
    # gets a list of ['most_probable_class', 'second_most_probable_class', ..., 'least_class']
    results_ordered_by_probability = map(lambda x: x[0], sorted(zip(model.classes_, results), key=lambda x: x[1], reverse=True))
    

    【讨论】:

    • 很棒的文章。
    【解决方案2】:

    使用 clf.predict_proba([fv]) 获得每个类别的预测概率列表。但是,此功能并非适用于所有分类器。

    关于您的评论,请考虑以下几点:

    >> prob = [ 0.01357713, 0.00662571, 0.00782155, 0.3841413, 0.07487401, 0.09861277, 0.00644468, 0.40790285]
    >> sum(prob)
    1.0
    

    概率总和为 1.0,所以乘以 100 得到百分比。

    【讨论】:

      【解决方案3】:

      在创建 SVC 类以通过设置 probability=True 计算概率估计时:

      http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

      然后像往常一样拨打fit,然后拨打predict_proba([fv])。

      【讨论】:

      • 它返回:预测值数组 "[[ 0.01357713 0.00662571 0.00782155 0.3841413 0.07487401 0.09861277 0.00644468 0.40790285]]" 不是概率,例如:4 类 8 0%span %s0
      • 这正是您要找的:7 类 40%(假设第一类是“0 类”),3 类 38%,5 类 10%,5 类 7%第 4 课。
      【解决方案4】:

      为了更清楚的答案,我再次发布来自 scikit-learn for svm 的信息。

      不用说,Platt 缩放中涉及的交叉验证对于大型数据集来说是一项昂贵的操作。此外,概率估计可能与分数不一致,因为分数的“argmax”可能不是概率的argmax。 (例如,在二元分类中,根据 predict_proba,可以通过 predict 将样本标记为属于概率

      对于随机森林、AdaBoost、Gradient Boosting等其他分类器,在scikit-learn中使用predict函数应该没问题。

      【讨论】:

        猜你喜欢
        • 2019-06-07
        • 2017-05-07
        • 2012-03-18
        • 2014-05-02
        • 1970-01-01
        • 2016-04-06
        • 2019-01-23
        • 2019-09-16
        • 1970-01-01
        相关资源
        最近更新 更多