1 代码
lrCostFunction.m(逻辑回归的代价函数)
%套用代价函数公式
hx=sigmoid(X*theta);
J = 1 / m * sum((-y) .* log(hx) - (1 - y) .* log(1 - hx)) + lambda / (2 * m) * (sum(theta .^ 2) - (theta(1) ^ 2));
%theta(1)无需进行梯度下降
grad=1/m*(X'*(hx-y)+lambda*theta);
grad(1)=grad(1)-lambda/m*theta(1);
oneVsAll.m(oneVsAll算法应用于多分类)
%theta初始化
initial_theta=zeros(n+1,1);
%设置fminunc选项
options=optimset('GradObj','on','MaxIter',50);
%fmincg使用梯度下降计算代价函数最优解
for i=1:num_labels
c=i*ones(size(y));
[theta]=fmincg(@(t)(lrCostFunction(t,X,(y==c),lambda)),initial_theta);
all_theta(i,:)=theta;
end
predictOneVsAll.m
predict=sigmoid(X*all_theta');
[x,ix]=max(predict,[],2);
p=ix;
predict.m
X=[ones(m,1) X];
a=sigmoid(X*Theta1');
a=[ones(size(a,1),1) a];
[x,p]=max(sigmoid(a*Theta2'),[],2);