机器学习(4)——logistic regression

时间:2022-11-01 16:14:42

【一、逻辑回归模型】

逻辑回归不同于线性回归,它实际上一种分类方法,用于二分类问题(y=0或者1)。逻辑回归模型如下:
机器学习(4)——logistic regression
即当机器学习(4)——logistic regression>=0.5时,预测输出值y=1;否则预测输出值y=0;且有:
机器学习(4)——logistic regression

【二、决策边界】

所谓Decision Boundary就是能够将所有数据点进行很好地分类的h(x)边界。
例1
机器学习(4)——logistic regression
由图可知:
机器学习(4)——logistic regression
对应的线性回归模型为:
机器学习(4)——logistic regression
决策边界为粉色直线:
机器学习(4)——logistic regression
【例2】
机器学习(4)——logistic regression
由图可知:
机器学习(4)——logistic regression
对应的线性回归模型为:
机器学习(4)——logistic regression
决策边界为粉色曲线:
机器学习(4)——logistic regression

【三、代价函数】

机器学习(4)——logistic regression
机器学习(4)——logistic regression

代价函数 J(θ)的推导如下:
对于每个样本:
机器学习(4)——logistic regression
于是似然函数为:
机器学习(4)——logistic regression
则对数似然函数为:
机器学习(4)——logistic regression
那么代价函数J(θ)取为机器学习(4)——logistic regression,即
机器学习(4)——logistic regression
因为最大似然估计是求使l(θ)最大的θ,那么这个θ也是使代价函数J(θ)最小的θ。

【四、梯度下降法求最佳theta】

机器学习(4)——logistic regression
其中α为学习率。
偏导的推导过程如下:
机器学习(4)——logistic regression
将偏导代入:
机器学习(4)——logistic regression

【五、利用matlab自带优化函数求最佳theta】

除了gradient descent 方法之外,我们还有很多方法可以使用,如下图所示,左边是另外三种方法,右边是这三种方法共同的优缺点,无需选择学习率α,更快,但是更复杂。

机器学习(4)——logistic regression

matlab中已经帮我们实现好了一些优化参数θ的方法,那么这里我们需要完成的事情只是写好cost function,并告诉系统,要用哪个方法进行最优化参数。比如我们用‘GradObj’, Use the GradObj option to specify that FUN also returns a second output argument G that is the partial derivatives of the function df/dX, at the point
伪代码:
机器学习(4)——logistic regression
cost function具体实现如下:

function [J, grad] = costFunction(theta, X, y)
m = length(y); % number of training examples
J = 0;
grad = zeros(size(theta));

J=-sum(y.*(log(sigmoid(X*theta)))+(1.0-y).*(log(1.0-sigmoid(X*theta))))/m;

for j=1:size(theta)
     grad(j)=sum((sigmoid(X*theta)-y).*X(:,j))/m;
end

=============================================================

end
%  Set options for fminunc options = optimset('GradObj', 'on', 'MaxIter', 400);

%  Run fminunc to obtain the optimal theta 
[theta, cost]=fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

【六、使用逻辑回归解多类问题】

机器学习(4)——logistic regression
即对于一个输入样本x,获得最大hθ(x)的类就是x所分到的类。
机器学习(4)——logistic regression

对于每一个类,训练得到相对应的一组theta

function [all_theta] = oneVsAll(X, y, num_labels, lambda)
%ONEVSALL trains multiple logistic regression classifiers and returns all
%the classifiers in a matrix all_theta, where the i-th row of all_theta 
%corresponds to the classifier for label i


m = size(X, 1);
n = size(X, 2);
all_theta = zeros(num_labels, n + 1);
% Add ones to the X data matrix
X = [ones(m, 1) X];

% ====================== YOUR CODE HERE ======================

initial_theta = zeros(n + 1, 1);
options = optimset('GradObj', 'on', 'MaxIter', 50);
for i=1:num_labels
       theta=fmincg (@(t)(lrCostFunction(t, X, (y == i), lambda)), initial_theta, options); 
       all_theta (i,:)=theta';     
end

% =========================================================================
end

那么对于未知样本x,分别计算每一类的相应输出,最大输出的哪一类即为x所属的类

function p = predictOneVsAll(all_theta, X)
%PREDICT Predict the label for a trained one-vs-all classifier. The labels 
%are in the range 1..K, where K = size(all_theta, 1). 

m = size(X, 1);
num_labels = size(all_theta, 1);

% You need to return the following variables correctly 
p = zeros(size(X, 1), 1);

% Add ones to the X data matrix
X = [ones(m, 1) X];

% ====================== YOUR CODE HERE ======================
% Instructions: Complete the following code to make predictions using
% your learned logistic regression parameters (one-vs-all).
% You should set p to a vector of predictions (from 1 to
% num_labels).
%

all_predict=sigmoid(all_theta*X');
[C,I]=max(all_predict);
p=I';

% =========================================================================

end