我目前正在Coursera上通过Andrew Ng的机器学习课程学习机器学习。我选择用Python完成作业,因为我更习惯Python而不是Matlab。最近我在学习正则化这一主题时遇到了一个问题。我的理解是,通过正则化,可以添加一些在预测中足够重要的次要特征。但在实现过程中,我不明白为什么在计算成本时要跳过theta(参数)的第一个元素,即theta[0]。我查阅了其他解决方案,但他们也同样跳过了theta0,没有给出解释。
这是代码:
`
term1 = np.dot(-np.array(y).T,np.log(h(theta,X))) term2 = np.dot((1-np.array(y)).T,np.log(1-h(theta,X))) regterm = (lambda_/2) * np.sum(np.dot(theta[1:].T,theta[1:])) #跳过theta0。解释这一行 J=float( (1/m) * ( np.sum(term1 - term2) + regterm ) ) grad=np.dot((sigmoid(np.dot(X,theta))-y),X)/m grad_reg=grad+((lambda_/m)*theta) grad_reg[0]=grad[0]
`
这是公式:
这里的J(theta)是成本函数,h(x)是Sigmoid函数或假设,lambda是正则化参数。
回答:
Theta0指的是偏置。当我们希望决策边界能够正确分离时,偏置就会起作用。考虑一个例子:
Y1=w1 * X,然后Y2= w2 * X
当X的值接近零时,可能难以将它们分开,此时偏置就发挥了作用。
Y1=w1 * X + b1 以及 Y2= w2 * X + b2
现在,通过学习,决策边界将始终清晰。
现在让我们考虑为什么使用正则化。
为了避免过拟合,并使曲线平滑。正如你看到的方程,是斜率w1和w2需要平滑处理,偏置只是分离的截距。因此,在正则化中使用它们是没有意义的。
虽然我们可以在神经网络中使用它,但不会产生任何差异。但我们可能会遇到偏置值减少太多,以至于可能混淆数据点的风险。因此,最好在正则化中不使用偏置。
希望这回答了你的问题。原文发布于:https://medium.com/@shrutijadon10104776/why-we-dont-use-bias-in-regularization-5a86905dfcd6