逻辑回归是监督学习的另一大类。
对于二分类函数来说,其输出y∈0,1y\in {0,1}y∈0,1,因此必须选取一个函数,其接受连续的输入,输出离散值或类似离散值,并且该函数应该是连续可微的,符合这些特征的函数为sigmoid函数,其表达式为:
y=11+e−z y = \frac{1}{1+e^{-z}}y=1+e−z1
其函数图像为
则我们可以将开始线性回归时假设的线性模型f(x)=X⋅θf(x)= X\cdot \thetaf(x)=X⋅θ带入上式中,得
y^=11+e−(X⋅θ) \hat y = \frac{1}{1+e^{-(X\cdot \theta)}}y^=1+e−(X⋅θ)1
则不费吹灰之力复合了一个线性化参数函数,且其输入为连续值,其输出为近似离散值。
有了模型,则必须创造一个costfunction来最优化参数,那么怎么创造呢?
由模型我们进一步变形,有
Iny^1−y^=X⋅θ In\frac{\hat y}{1-\hat y} = X\cdot \thetaIn1−y^y^=X⋅θ
则可以将y^\hat yy^视为类后验概率估计P(y=1∣x)P(y=1|x)P(y=1∣x),则可以利用极大似然法来估计参数,则似然函数为
L(θ)=∏i=1m(y^yi(1−y^)(1−yi)) L(\theta) = \prod_{i=1}^{m}(\hat y^{y_i} (1-\hat y)^{(1-{y_i})})L(θ)=i=1∏m(y^yi(1−y^)(1−yi))
之后就可以用梯度下降法或牛顿法求解参数θ\thetaθ
matlab代码实现为:
%% Load Data
data = load('ex2data1.txt');
X = data(:, [1, 2]); y = data(:, 3);
[m, n] = size(X);
% Add intercept term to x and X_test
X = [ones(m, 1) X];
initial_theta = zeros(n + 1, 1);
% Choose some alpha value
alpha = 0.01;
num_iters = 8500;
theta = zeros(3, 1);
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
theta = theta - alpha / ( X' * (sigmoid(X*theta) - y ) );
J_history(iter) = -1 * sum( y .* log( sigmoid(X*theta) ) + (1 - y ) .* log( (1 - sigmoid(X*theta)) ) ) ;
end