首页 > 解决方案 > 在没有任何库的情况下将此公式转换为原始 python

问题描述

logloss=−1∗1nΣforeachYt,Ypred(Ytlog10(Ypred)+(1−Yt)log10(1−Ypred))

如何在没有任何库的情况下用原始 python 编写这个公式?

我的代码:

def logloss(y_true,y_pred):
    loss=0
    for i,j in range (len(y_true),len(y_pred)):
            loss+=((y_true[i],y_pred[j]*(y_true(math.log10(y_pred[j]))+((1-y_true[i])*math.log10(1-y_pred[j])))
    loss=-1*(1/len(y_true))*loss
    return loss

错误:语法无效。

标签: python

解决方案


您只是缺少一些括号,请尝试以下操作:

import math


def logloss(y_true, y_pred):
    loss = 0
    for i, j in range(len(y_true), len(y_pred)):
        loss += ((y_true[i], y_pred[j] * (y_true(math.log10(y_pred[j])) + (
                    (1 - y_true[i]) * math.log10(1 - y_pred[j])))))
    loss = -1 * (1 / len(y_true)) * loss
    return loss

我建议您将这条长线分开,使其更具可读性并更容易发现问题。

另外,我相信您真正想要的功能是(假设y_pred并且y_true具有相同的长度,如果从 ML 的角度来看 IIUC,他们应该这样做):

import math


def logloss(y_true, y_pred):
    loss = 0
    for i in range(len(y_true)):
        loss += y_true[i] * math.log10(y_pred[i]) + \
                (1-y_true[i]) * math.log10(1-y_pred[i])
    loss = -1 * (1 / len(y_true)) * loss
    return loss

我假设您这样做是为了进行一些机器学习,我建议您先学习更多 Python,然后再继续学习 NN 等繁重的主题。


推荐阅读