【发布时间】:2019-12-29 09:09:18
【问题描述】:
我正在使用 sklearn 的支持向量机 (SVC) 如下使用 10-fold cross validation 获取我的数据集中实例的预测概率。
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
clf=SVC(class_weight="balanced")
proba = cross_val_predict(clf, X, y, cv=10, method='predict_proba')
print(clf.classes_)
print(proba[:,1])
print(np.argsort(proba[:,1]))
我对@987654324@ 和print(np.argsort(proba[:,1])) 的预期输出如下,其中第一个表示类1 的所有实例的预测概率,第二个表示对应的每个概率的数据实例的索引。
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.1 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0.2 0. 0. 0. 0. 0.1 0. 0. 0. 0. 0. 0. 0. 0. 0.9 1. 0.7 1.
1. 1. 1. 0.7 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0.9 0.9 0.1 1.
0.6 1. 1. 1. 0.9 0. 1. 1. 1. 1. 1. 0.4 0.9 0.9 1. 1. 1. 0.9
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0.9 0.
0.1 0. 0. 0. 0. 0. 0. 0. 0.1 0. 0. 0.8 0. 0.1 0. 0.1 0. 0.1
0.3 0.2 0. 0.6 0. 0. 0. 0.6 0.4 0. 0. 0. 0.8 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. ]
[ 0 113 112 111 110 109 107 105 104 114 103 101 100 77 148 49 48 47
46 102 115 117 118 147 146 145 144 143 142 141 140 139 137 136 135 132
131 130 128 124 122 120 45 44 149 42 15 26 16 17 18 19 20 21
22 43 23 24 35 34 33 32 31 30 29 28 27 37 13 25 9 10
7 6 5 4 3 8 11 2 1 38 39 40 12 108 116 41 121 70
14 123 125 36 127 126 134 83 72 133 129 52 57 119 138 89 76 50
84 106 85 69 68 97 98 66 65 64 63 62 61 67 60 58 56 55
54 53 51 59 71 73 75 96 95 94 93 92 91 90 88 87 86 82
81 80 79 78 99 74]
我的第一个问题是;似乎SVC 不支持predict_proba。因此,如果我改用proba = cross_val_predict(clf, X, y, cv=10, method='decision_function') 是否正确?
我的第二个问题是如何打印预测概率的类别?我试过clf_classes_。但是,我收到一条错误消息AttributeError: 'SVC' object has no attribute 'classes_'。有没有办法解决这个问题?
注意:我想通过交叉验证获得所有实例的预测概率。
编辑:
@KRKirov 的回答很棒。但是,我不需要GridSearchCV,只想使用普通的cross validation。因此,我将他的代码改成了cross_val_score。现在,我收到错误 NotFittedError: Call fit before prediction。
有没有办法解决这个问题?
如果需要,我很乐意提供更多详细信息。
【问题讨论】:
-
你的最终目标是什么?对实例进行排名是什么意思?
decision_function可以用来排名,但不是概率估计 -
@ShihabShahriar 我想获得分类器的最高预测。例如前 200 个预测。 :)
标签: python scikit-learn classification cross-validation