逻辑回归
标签(空格分隔): ML 斯坦福视频 笔记
分类问题
对于二元分类问题,将因变量y的可能分类称为正向类(1)和负向类(0)。
逻辑回归算法是为了使线性回归的输出在0-1之间。
假设表说
假设函数是预测值在0-1之间的某个函数,线性回归的值可能超出0-1,因此引入逻辑回归,假设:
hθ(x)=g(ΘTx)
Z=ΘTx
g(z)=11+e−z
其中新的模型g(z)称为逻辑函数或sigmoid函数,
hθ(x)
的输出可视为可能性。
判定边界(decision boundary):
θTx≥0⇒y=1
θTx<0⇒y=0
代价函数
J(θ)=1m∑mi=1=Cost(hθ(x(i)),y(i))ify=1ify=0
Cost(hθ(x),y)=−log(hθ(x))ify=1
Cost(hθ(x),y)=−log(1−hθ(x))ify=0
从以上公式可以看出,
hθ(x)
和y之间的差距越大,代价函数的值越大。如果相等,log计算的值为0。这样保证了代价函数是凸函数。可将公式合并;
Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
J(θ)=−1m∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
向量化:
h=g(Xθ)J(θ)=1m⋅(−yTlog(h)−(1−y)Tlog(1−h))
有了代价函数就可以用梯度下降来求解代价函数最小时的参数了:
Repeat{θj:=θj−α∂∂θjJ(θ)}
求导:
Repeat{θj:=θj−αm∑i=1m(hθ(x(i))−y(i))x(i)j}
向量化:
θ:=θ−αmXT(g(Xθ)−y⃗ )
改进的代价函数
用库里的方法,代价函数:
function [jVal, gradient] = costFunction(theta)
jVal = [...code to compute J(theta)...];
gradient = [...code to compute derivative of J(theta)...];
end
matlab提供的寻找最小值函数:
options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
多分类:一对多,将一个类别拿出来,将剩下的类别作为一个类。重复这个过程,不断地进行二分类。
y={0,1,2,……,n} (n+1分类)从可能性的角度考虑:
y∈{0,1...n}h(0)θ(x)=P(y=0|x;θ)h(1)θ(x)=P(y=1|x;θ)⋯h(n)θ(x)=P(y=n|x;θ)prediction=maxi(h(i)θ(x))