我有一个如下所示的数据集,其中A,B,C,D,E是特征,'T'是目标变量 .
A B C D E T
32 22 55 76 98 3
12 41 90 56 33 2
31 78 99 67 89 1
51 85 71 21 37 1
......
......
现在,我已经使用Scikit Learn应用了多类逻辑回归分类器,并获得了预测值和概率矩阵:
A B C D E T Predicted Probablity
32 22 55 76 98 3 3 0.35
12 41 90 56 33 2 1 0.68
31 78 99 67 89 1 3 0.31
51 85 71 21 37 1 1 0.25
现在只想问一下我如何解释结果的可能性,1)到目前为止,我已经研究过默认情况下python的事件可能性为1.所以如果是这种情况,那么0.35被认为是事件1的可能性?或2)值是0.35是第1种情况属于“3”类的可能性吗?我怎么能计算剩下的两个 class 的可能性 . 就像是:-
A B C D E T Predicted P_1 P_2 P_3
32 22 55 76 98 3 3 0.35 0.20 0.45
12 41 90 56 33 2 1 0.68 0.10 0.22
31 78 99 67 89 1 3 0.31 0.40 0.29
51 85 71 21 37 1 1 0.25 0.36 0.39
2 回答
我们符合我们的培训数据 .
假设数据集包含三个类 . 输出将类似于:
在给定的输出数组中,每行有3列,显示每个类的相应概率 . 每行代表一个样本 .
输出:
即该样本的概率 .
不确定结果表的来源(哪个API调用),但您的第二个假设是正确的 . 在下表中
你得到的结果是我假设的4个不同的样本(实例),目标变量(正确的类),预测类和预测类的概率 .
我认为您的代码中的索引例程存在问题 . 让我们关注最后一行
预测类的概率是
0.25
或25%
,并且您有三类问题 . 这意味着其他两个类的总概率质量是1 - 0.25 = 0.75
,如果你将75%
均匀地划分在剩下的两个类之间(据说不是分类器的预测),你得到_2468665_ - 或37.5%
的概率2
和3
(你预测1
) . 当然,分类器对于2
和3
都不会具有相同的概率,因此一个会降低,而另一个会更高 . 问题是37.5%
已经高于预测类1
的概率,这在逻辑上是不可能的 . 如果分类器将37.5%
的概率37.5%
和25%
分类给1
,那么肯定预测应该是2
类,而不是像上面那样的类1
.逻辑回归的输出是一个概率表,例如,每个实例都有一行,每个类有一列
第一个实例的第3个类的概率位于第一行
probs[0, 2]
的第三列 . 如果你想要数组中的预测类,你可以做predicted_idx = np.argmax(probs, axis=1)
,这为你提供了上面数据的array([1, 0, 2, 0, 0])
,这是最高预测概率的列索引 . 然后,您可以通过提取仅预测类的概率最后,您必须记住,结果表中的列索引不一定与数据集索引的方式相对应 . 如果您使用类似
sklearn.preprocessing.LabelEncoder
的内容,可能是您认为在索引0处的类实际上不在索引0处 . 您可以从label_binarizer.classes_
检查 - 该数组的顺序对应于概率数组中的列索引从逻辑回归得到 .