logistic regression简单来说就是将output variable(这里表示成y)分成两类的一种分类算法
其实就是y服从伯努力分布,那这里我们需要模拟什么呢?
我们需要模拟的是y = 1的概率,所以我们设
由于概率P需要满足 大于等于0 而且 小于等于1
所以我们的模拟函数也需要满足
那么我们该如何选择我们的模拟函数呢?
logistic function,
为何选择这个函数?
At least, I don't know at the moment, nor do I care. Because it's not our topic today.
然后我们介绍下logistic function
所以将y的分布用模拟函数表示出来就为:
写在一起变为:
假设我们的模拟是100%正确,那么对于给定的x和θ,得到y的概率为1
但是我们不能保证我们的模拟是100%正确,所以我们只能尽量使P变大
然后我们求θ的极大似然估计
最大化P就等价于最大化L(θ)
取对数
然后用梯度下降法求得l(θ)的极大值点
最后介绍一下感知器算法:
然后我们看看matlab程序
clc; clear; close all;
load datax.dat;
load datay.dat;
X = [ones(size(datax, 1),1) datax];
Y = datay;
m = size(X,1);
n = size(X,2)-1;
%initialize
theta = zeros(n+1,1);
thetaold = ones(n+1,1);
while ( ((theta-thetaold)'*(theta-thetaold)) > 0.0000001 )
%calculate dellltheta
dellltheta = zeros(n+1,1);
for j=1:n+1,
for i=1:m,
dellltheta(j,1) = dellltheta(j,1) + [Y(i,1) - (1/(1 + exp(-theta'*X(i,:)')))]*X(i,j);
end;
end;
%calculate hessian
H = zeros(n+1, n+1);
for j=1:n+1,
for k=1:n+1,
for i=1:m,
H(j,k) = H(j,k) -[1/(1 + exp(-theta'*X(i,:)'))]*[1-(1/(1 + exp(-theta'*X(i,:)')))]*[X(i,j)]*[X(i,k)];
end;
end;
end;
thetaold = theta;
theta = theta - inv(H)*dellltheta;
(theta-thetaold)'*(theta-thetaold)
end
%part b
figure(1); hold on;
X0 = []; Y0 = []; X1 = []; Y1 = [];
%training points
for i=1:m,
if Y(i)==0
X0 = [X0 X(i,2)];
Y0 = [Y0 X(i,3)];
else
X1 = [X1 X(i,2)];
Y1 = [Y1 X(i,3)];
end;
end;
scatter(X0, Y0, 'o');
scatter(X1, Y1, '+');
%decision boundary
Xb = -2:0.01:8;
Yb = (0.5 - theta(1) - theta(2)*Xb)/(theta(3));
plot(Xb, Yb);
注意这里他采用的是牛顿法求 ∂l(θ) / ∂θ = 0