【问题标题】:Compute log loss for logistic regression from scratch从头开始计算逻辑回归的对数损失
【发布时间】:2023-03-25 14:20:01
【问题描述】:

计算日志损失

def logloss(y_true,y_pred):
    '''In this function, we will compute log loss '''
    log_loss = (-((y_true * np.log10(y_pred)) + (1-y_true) * np.log10(1-y_pred)).mean())
    return log_loss

计算逻辑回归

def train(X_train,y_train,X_test,y_test,epochs,alpha,eta0):
 w,b = initialize_weights(X_train[0])
    train_loss = []
    test_loss = []
    for e in range(epochs):
        for x,y in zip(X_train,y_train):
            dw = gradient_dw(x,w,y,b,alpha,N)
            db = gradient_db(x,y,w,b)
            w = w + (eta0 * dw)
            b = b + (eta0 * db)
        train_pred = []
        for i in X_train:
            y_pred = sigmoid(np.dot(w.T, i) + b)
            train_pred.append(y_pred)
        train_loss.append(logloss(y_train, train_pred))
        
        test_pred = []
        for j in X_test:
            y_pred_test = sigmoid(np.dot(w.T, j) + b)
            test_pred.append(y_pred_test)
        test_loss.append(logloss(y_test, test_pred))
    return w,b
alpha=0.0001
eta0=0.0001
epochs=50
N = len(X_train)
w,b = train(X_train,y_train,X_test,y_test,epochs,alpha,eta0)

我遇到的错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-112-9a34879eb072> in <module>
      3 epochs=50
      4 N = len(X_train)
----> 5 w,b = train(X_train,y_train,X_test,y_test,epochs,alpha,eta0)

<ipython-input-110-db0e3d88382d> in train(X_train, y_train, X_test, y_test, epochs, alpha, eta0)
     30             y_pred = sigmoid(np.dot(w.T, i) + b)
     31             train_pred.append(y_pred)
---> 32         train_loss.append(logloss(y_train, train_pred))
     33 
     34         test_pred = []

<ipython-input-108-f272288a384c> in logloss(y_true, y_pred)
      1 def logloss(y_true,y_pred):
      2     '''In this function, we will compute log loss '''
----> 3     log_loss = (-((y_true * np.log10(y_pred)) + (1-y_true) * np.log10(1-y_pred)).mean())
      4     return log_loss

TypeError: unsupported operand type(s) for -: 'int' and 'list'

我已经提到了完整的代码,只是我遇到错误的代码。我很困惑是更改 logloss 还是更改逻辑回归代码,即 def train()。如何纠正这个错误?

【问题讨论】:

  • 尝试在logloss()函数中打印y_truey_pred。并显示结果
  • 与您的问题无关,但我们从不按原样为对数损失编写实际的数学公式,因为它肯定会导致对数为零;我们总是先clip the inputs
  • 这对我来说就像一个任务,因为我一直在构建这个算法。 @desertnaut
  • 赋值与否无关;并且此类作业的一部分正是您应该如何以适当的方式“翻译”公式。您检查了建议的链接吗?
  • 你知道日志丢失和交叉熵实际上是synonyms吗?

标签: python machine-learning logistic-regression


【解决方案1】:

您的train_pred 是python 列表。当您在logloss 函数中使用它时, 你计算(1-train_pred),它是整数减去 python 列表。因此你得到类型错误

TypeError: unsupported operand type(s) for -: 'int' and 'list'

【讨论】:

  • 感谢您的回复。所以,你能帮我看看,告诉我必须做哪些更正。 @lanenok
猜你喜欢
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2021-08-01
相关资源
最近更新 更多