数据集: \(\{ (x^{(1)},y^{(1)}), (x^{(2)},y^{(2)}) ,..., (x^{(3)},y^{(3)}) \}\)
回顾线性回归模型的损失函数:
\(J(\theta) = \frac{1}{m} \sum_{i=1}^{m} \frac{1}{2} {(h_\theta(x^{(i)})-y^{(i)})}^2\)
令:
\(Cost(h_\theta(x^{(i)}), y^{(i)}) = \frac{1}{2}{(h_\theta(x^{(i)}) - y^{(i)})}^2\)
简化为:
\(Cost(h_\theta(x), y) = \frac{1}{2}{(h_\theta(x) - y)}^2\)
将其应用于逻辑回归模型,logistic function 作为假设函数时,其损失函数是非凹的(non-convex):
故当基于此运行梯度下降时, 将无法保证收敛于全局最小值
function [jVal, gradient] = costFunction(theta)
jVal = [...code to compute J(theta)...];
gradient = [...code to compute derivative of J(theta)...];
end
>> options = optimset('GradObj','on','MaxIter','100');
>> initialTheta = zeros(2,1) % 最少两个参数
>> [optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options)
我们设置GradObj
为on
来告诉fminunc
我们的costFunction返回损失和梯度。它允许fminunc
在为函数找最小值的过程中使用梯度。
此外,我们设置MaxIter
为400
,即最大迭代次数为400.
课程链接: