准备面试 - 逻辑回归问题

数据挖掘 Python 逻辑回归
2022-03-09 02:14:06

所以我正在做一些练习来准备面试测试。但是有一个任务我不明白。也许你们中的一些人可以解释他们想让我做什么?这将帮助我理解我可能遇到的潜在问题。

这是作业:

Logit Regression 让函数 LogitRegression(arr) 读取由空格分隔的 4 个数字 x、y、a、b 的输入数组,并返回更新后的 a 和 b 的两个数字的输出(假设学习率为 1)。a 和 b 的小数点后最多保存 3 位数字。输出应该是格式为:a, b 的字符串

  def LogitRegression(arr):

  # code goes here
  return arr

  # keep this function call here 
  print(LogitRegression(input()))

逻辑回归是一种简单的分类方法,同样的公式也常用作神经网络的输出层。我们假设输入和输出变量都是标量,逻辑回归可以写成:
y = 1.0 / (1.0 + exp(-ax - b))
观察一个数据示例 (x, y) 后,参数 a 和b 可以使用具有学习率的梯度下降来更新。示例:
输入:[1, 1, 1, 1]
输出:0.881, 0.881
输入:[2.2, 0.0, 5.1, 5.7]
输出:7.3, 6.7

我不明白的是,他们是否只给我 4 个标量并希望我在 x、y 上进行训练,然后预测 a 和 b。还是应该是权重和偏见,我需要归还训练有素的?第二个示例中的输出数字与概率不匹配,因此不可能。我可能想多了,这只是我需要做的一件简单的事情?

这是我尝试过的代码:

arr = np.array([2.2, 0.0, 5.1, 5.7])
arr2 = np.array([1.0, 1.0, 1.0,1.0])

def Logit(arr):
    learnrate = 1
    X = arr[0]
    y = arr[1]
    weights = arr[2]
    bias = arr[3]
    
    y_hat = 1/(1+np.exp(np.dot(X, -weights) - bias))
    new_weights = weights + learnrate * (y - y_hat) * X
    new_bias = bias + learnrate*(y - y_hat)
    print(new_weights, new_bias)
    
Logit(arr)

输出:

2.900000098664297 4.700000044847409
1个回答

它们为您提供模型参数的当前值ab,以及一个新的数据点(x,y),并且他们请求使用数据点执行梯度下降训练步骤,并返回更新后的值ab.

您的代码的问题是参数更新中学习率的符号错误。如果将其更改为减号,则结果如预期:

new_weights = weights - learnrate * (y - y_hat) * X
new_bias = bias - learnrate*(y - y_hat)