【问题标题】:Python predict_probaPython predict_proba
【发布时间】:2018-11-14 11:46:34
【问题描述】:

我对使用scikit-learn 中的log_loss 函数的机器学习中的分类问题有疑问。

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier()
classifier.fit(Xtrain, ytrain)
soft = classifier.predict_proba(Xtest)[:,1]
log_loss = log_loss(ytest, soft)

我想计算日志丢失但出现错误:

'numpy.float64' object is not callable

我认为这个问题可能来自向量软中有一些0。但我知道要解决这个问题吗?

s = 0
for x in soft : 
    if x == 0 : 
        s+=1
print(s)
>> 17729

提前致谢

【问题讨论】:

  • 显示错误的完整堆栈跟踪以及如何导入log_loss

标签: python python-3.x machine-learning scikit-learn


【解决方案1】:

您的问题似乎与 log_loss 输入无关,而与您的变量命名有关。 Everything in python is an object 等一行:

log_loss = log_loss(ytest, soft)

您将答案,一个数字(numpy.float64)分配给令牌log_loss。所以你的变量会影响函数。然后,随后的调用,就好像它是一个函数一样,失败了。

from sklearn.metrics import log_loss
print(log_loss)
>>> <function log_loss at 0x7f9f692db1b8>

log_loss = log_loss(ytest, soft)
print(log_loss)
>>> 0.11895972559889094
log_loss = log_loss(ytest, soft)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-40-b423b2324b92> in <module>()
----> 1 log_loss = log_loss(ytest, soft)

TypeError: 'numpy.float64' object is not callable

最简单的解决方法是不要调用您的变量log_loss,但更一般地说,您可能会发现某种程度的命名空间帮助,例如而不是

from sklearn.metrics import log_loss
...
loss = log_loss(ytest, soft)

你可以使用

from sklearn import metrics
...
loss = metrics.log_loss(ytest, soft)

【讨论】:

  • 谢谢,但投反对票?您的问题解决了吗?还是需要进一步的帮助才能到达那里?
猜你喜欢
  • 2015-03-27
  • 2019-03-20
  • 2018-02-28
  • 2020-05-14
  • 1970-01-01
  • 2018-05-27
  • 2018-06-08
  • 2016-05-20
  • 2020-05-07
相关资源
最近更新 更多