Abl*_*mis 4 python scikit-learn
我正在使用log_loss和sklearn
from sklearn.metrics import log_loss
print log_loss(true, pred,normalize=False)
Run Code Online (Sandbox Code Playgroud)
我有以下错误:
ValueError: y_true and y_pred have different number of classes 38, 2
Run Code Online (Sandbox Code Playgroud)
这对我来说真的很奇怪,因为这些数组看起来很有效:
print pred.shape
print np.unique(pred)
print np.unique(pred).size
(19191L,)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36 37]
38
print true.shape
print np.unique(true)
print np.unique(true).size
(19191L,)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36 37]
38
Run Code Online (Sandbox Code Playgroud)
log_loss有什么问题?为什么会抛出错误?
样本数据:
pred: array([ 0, 1, 2, ..., 3, 12, 16], dtype=int64)
true: array([ 0, 1, 2, ..., 3, 12, 16])
Run Code Online (Sandbox Code Playgroud)
这很简单,您使用的是预测而不是预测的概率.你的predict_proba变量包含[1 2 1 3 ....]但是使用predict_proba它应该包含类似[[0.1,0.8,0.1] [0.0,0.79,0.21] ....]的东西.获得这些概率使用函数predict_proba:
[ 1 2 1 3 .... ] #Classes : 1, 2 or 3
Run Code Online (Sandbox Code Playgroud)
小智 2
在 log_loss 方法内部,真实数组由 LabelBinarizer 进行拟合和转换,从而更改其维度。因此,检查 true 和 pred 具有相似的维度并不意味着 log_loss 方法将起作用,因为 true 的维度发生了变化。如果您只有二进制类,我建议您使用此 log_loss 成本函数,否则对于多个类,此方法不起作用。
| 归档时间: |
|
| 查看次数: |
6451 次 |
| 最近记录: |