所谓的logistic回归,可以理解为分类问题,比如,训练样本中的数据为两次考试的成绩,而结果为0和1,分别表示未通过和通过,在这样的问题上应用线性回归往往得不到想要的结果,这个时候我们需要logistic回归来处理。

下面给出了一段简单的matlab代码,可以作出分界曲线。
基本思想大概是需要求出一个θ,使得logL(θ)最大,那么如何求这个θ呢?
类似于线性回归,我们采用梯度上升的方法来求,于是整体代码就比较简单了,甚至都不需要代价函数。

clear; close all; clc

%% Load data from file
data = load('q1x.dat');
data2 = load('q1y.dat');
X = data(:, [1 2]);
y = data2(:, 1);

%% try to find the theta
[m n] = size(X);    % m=99 n=2
X2 = [ones(m,1) X];
theta = zeros(n + 1, 1);    % initial theta

alpha = 0.0001;     % learning rate
max_iters = 10000;   % iters number

% gradient ascent
for k = 1:max_iters
   hx = sigmoid(X2 * theta);
   theta = theta + alpha * X2' * (y - hx);
   l_theta = sum(y .* log(hx) + (1-y).*log(1-hx)); 
end

%% draw the picture
figure; hold on;
pos = find(y==1);
neg = find(y==0);

plot(X(pos,1), X(pos,2), '+');
plot(X(neg,1), X(neg,2), '*');

plot_x = [min(X2(:,2))-2,  max(X2(:,2))+2];
plot_y = (-1./theta(3)).*(theta(2).*plot_x + theta(1));
plot(plot_x, plot_y, 'r');
axis([0, 8, -5, 4])