机器学习(二)逻辑回归

逻辑回归于线性回归的区别:

(1) 线性回归的函数拟合,用于数值预测,逻辑回归是二分类算法,用于分类;

(2) 线性回归模型:

        

逻辑回归模型:

        

也就是说逻辑回归其实是在线性回归的基础上,加了一个激励函数映射。因为逻辑回归是二分类算法,因此对于训练数据,其只有两种取值10,代表两个分类,用于预测分类的时候,输入值大于0.5的,则把它归为1类,否者归为0类。因此对于训练数据需要满足一下概率公式:


我们的训练过程,就是要训练参数θ,使得以上的两个概率尽量为1;

(3) 线性回归常用代价函数定义为:

        

逻辑回归代价函数为:

        

其实上式可以分开来写,对于类1,总代价函数为:

        

对于类0,总代价函数为:

        

因此:

        

我们的目的便是要使得代价函数J(θ)的数值最小,使之尽量的趋近于0

(4)梯度下降法求解。

代价函数简化:

        

OK,公式化简完毕之后,接着就要对其求偏导数了:

        

求导完毕,接着就是直接使用梯度下降法的公式:

        

接着就写一写matlab代码,训练一下,只有自己写过了代码,才能真正熟悉这个算法:

close all;
clear;
clc;
%生成测试数据
mu = [2 3];%测试数据1
SIGMA = [1 0; 0 2];
r1 = mvnrnd(mu,SIGMA,100);
plot(r1(:,1),r1(:,2),'.');
hold on;
mu = [10 10];%测试数据2
SIGMA = [ 1 0; 0 2];
r2 = mvnrnd(mu,SIGMA,100);
plot(r2(:,1),r2(:,2),'.');
data(:,2:3)=[r1;r2];
data(:,1)=1;

%训练数据标号
flag=[ones(100,1);zeros(100,1)];
[m,n]=size(data);
w=zeros(n,1);
%梯度下降法
sigma=0.05;
i=1;
while i<10000
   for j=1:n
    %先计算激励函数值
    pp=data*w;
    pp=exp(-data*w);
    gx=1./(1+exp(-data*w));
    %计算偏导数值
     r=-1/m*sum((flag-gx).*data(:,j));
     w(j)=w(j)-sigma*r;
   end
   i=i+1;
end
%绘制分类结果
figure(2);
hold on;
for i=1:m
    if gx(i)>0.5
        plot(data(i,2),data(i,3),'.b');
    else 
        plot(data(i,2),data(i,3),'.y');
    end
end
%绘制决策边界直线
w(2)=w(2)/sqrt(w(2)*w(2)+w(3)*w(3));
w(3)=w(3)/sqrt(w(2)*w(2)+w(3)*w(3));
line([4,9],[(4*w(2)+w(1))/(-w(3)),(9*w(2)+w(1))/(-w(3))]);
原图分类结果:

          

猜你喜欢

转载自blog.csdn.net/johnlay/article/details/80209872