逻辑回归的代价函数:
当特征较多时,需要高阶多项式去拟合,那么容易出现过拟合的状态,此时需要正则化来进行处理,从而避免过拟合的情况发生,提供泛化能力。
惩罚项:
正则化后的代码:
J = 1/m*sum(-y.*log(sigmoid(X*theta))-(1-y).*log(1-sigmoid(X*theta)))+lambda/(2*m)*(theta_1'*theta_1);
注意:
- 逻辑回归的假设函数是:
- 由于 不需要参与正则化计算,所以把 向量第一个元素设置为0:
theta_1 = [0;theta(2:end)];
- 只有惩罚项要用到theta_1,前面的不需要修改 ,从而用的是theta
- 惩罚项的分母 (2*m)要加括号,不然m就变成分子的一部分了。(我就因为括号问题费了不少劲)
- 尽量用向量化编写代码,而不是用for循环,因为矩阵的计算效率更高。
梯度下降代码:
grad = (X'*(sigmoid(X*theta)-y))/m+lambda/m*theta_1;