【问题标题】:Linear regression using gradient descent; having trouble with cost function value使用梯度下降的线性回归;成本函数值有问题
【发布时间】:2021-01-20 14:10:40
【问题描述】:

我正在使用梯度下降编码线性回归。通过使用 for 循环而不是张量。

我认为我的代码在逻辑上是正确的,当我绘制图形时,theta 值和线性模型似乎很好。但是成本函数的价值很高。你能帮帮我吗?

代价函数的值为1,160,934,异常。

def gradient_descent(alpha,x,y,ep=0.0001, max_repeat=10000000):
    m = x.shape[0]
    converged = False
    repeat = 0
    theta0 = 1.0
    theta3 = -1.0
#     J=sum([(theta0 +theta3*x[i]- y[i])**2 for i in range(m)]) / 2*m #######
    J=1
    
    while not converged : 
        grad0= sum([(theta0 +theta3*x[i]-y[i]) for i in range (m)]) / m
        grad1= sum([(theta0 + theta3*x[i]-y[i])*x[i] for i in range (m)])/ m
        
        temp0 = theta0 - alpha*grad0
        temp1 = theta3 - alpha*grad1
        
        theta0 = temp0
        theta3 = temp1
    
        msqe = (sum([(theta0 + theta3*x[i] - y[i]) **2 for i in range(m)]))* (1 / 2*m)
        print(theta0,theta3,msqe)
        if abs(J-msqe) <= ep:
            print ('Converged, iterations: {0}', repeat, '!!!')
            converged = True
        
        J = msqe
        repeat += 1
        
        if repeat == max_repeat:
                converged = True
                print("max 까지 갔다")
   
    return theta0, theta3, J
[theta0,theta3,J]=gradient_descent(0.001,X3,Y,ep=0.0000001,max_repeat=1000000)

print("************\n theta0 : {0}\ntheta3 : {1}\nJ : {2}\n"
          .format(theta0,theta3,J))

This is the data set.

【问题讨论】:

    标签: python machine-learning linear-regression gradient-descent


    【解决方案1】:

    在处理具有巨大差异的大型数据集时,成本很高是很正常的。此外,您的数据正在处理大量数据,因此成本非常高,标准化数据将为您提供正确的估计,因为标准化数据不需要缩放。试试这个来验证从随机 wrights 开始,每次观察成本,如果成本波动很大,那么可能会有一些错误,否则没关系。

    【讨论】:

    • 谢谢你,这让我如释重负。那么,我们怎么知道我做的线性模型(h=theta0+theat3*x3)是数据集的好模型呢?我认为计算成本函数是其中之一,但由于价值很高,不知道它是否好。我们是否必须进行海洋生物并让它们可视化?
    • 要查看解决方案如何收敛到最小值,打印每次迭代时的权重和成本,并使用具有较少时期的训练模型进行训练,它将为您提供一些可视化。交叉验证您可以使用一些标准执行线性回归图书馆通过阅读文档。通过看到这个数字,我认为你的回归线非常接近最佳拟合。
    • 哦,好吧,我会尝试在张量中运行它并比较数字
    • 告诉你是否发现了一些新东西
    【解决方案2】:

    我认为数据集本身非常普遍,这就是最佳拟合线显示大量成本函数的原因。如果您扩展数据 - 您会看到它显着下降。

    【讨论】:

    • 您能再次解释一下如何扩展我的数据吗?实际上我已经使用 log1p 对其进行了缩放......这意味着这个值没有错或什么?
    • 使用对数刻度进行缩放具有类似于折叠的效果。例如,两次变为 2 - 但仍然如果数据在大规模范围内传播 - 我建议进行这种转换 (x-mean(x)) / std (x) 其中 std 是 x 的标准偏差。这应该显示您的成本显着降低 - 但请注意,这不会大幅改变您的模型参数/系数。我所说的模型性能不是由您的成本来衡量的。成本只是您监控的东西,以查看它在运行算法时是否随着每次迭代而降低。希望对您有所帮助。
    • 如果它不让我知道 - 我会更详细地解释。
    • 哦,你的意思是在 x-mean(x)/std(x) 中缩放 x3!而不是在日志中记录
    • 以这种方式查看您的模型 - 您绘制的回归线是 - 最佳拟合。成本函数仅此而已。如果您的成本函数在每次迭代中减少,则意味着您的梯度下降运行良好。模型的好坏通常通过 RMSE 或 MSE 等统计数据来衡量。 (y_predicted - y_actual ) 正方形。
    猜你喜欢
    • 1970-01-01
    • 2017-04-30
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2020-03-18
    • 1970-01-01
    相关资源
    最近更新 更多