所以我正在做一些准备面试的练习。然而,有一项任务我不明白。也许你们中的一些人能解释一下他们想让我做什么?这将帮助我理解我可能遇到的潜在问题框架。
这是一项任务:
Logit回归函数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()))Logistic回归是一种简单的分类方法,在神经网络中,同样的公式也常被用作输出层。我们假设输入和输出变量都是标量,并且logistic回归可以写成:
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。或者是a,应该是权值和偏差,我需要返回训练过的?第二个例子中的输出数字与概率不匹配,所以不可能是这样。我可能想得太多了,这只是我需要做的一件简单的事情?
这是我尝试过的代码:
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发布于 2021-04-23 07:40:14
它们给出模型参数a和b的当前值,以及一个新的数据点(x,y),并请求使用数据点执行梯度下降的一个训练步骤,并返回a和b的更新值。
代码的问题是,在参数更新中,学习速率的标志是错误的。如果将其更改为减号,结果将如预期的那样:
new_weights = weights - learnrate * (y - y_hat) * X
new_bias = bias - learnrate*(y - y_hat)发布于 2023-04-19 10:38:28
除了符号错误之外,您所缺少的是只考虑三个十进制数字(并将数字转换为字符串)。
https://datascience.stackexchange.com/questions/93440
复制相似问题