简单易学的机器学习算法——Logistic回归

一、Logistic回归的概述

    Logistic回归是一种简单的分类算法,提到“回归”,很多人可能觉得与分类没什么关系,Logistic回归通过对数据分类边界的拟合来实现分类。而“回归”也就意味着最佳拟合。要进行最佳拟合,则需要寻找到最佳的拟合参数,一些最优化方法就可以用于最佳回归系数的确定。

二、最优化方法确定最佳回归系数

    最优化方法有基于梯度的梯度下降法、梯度上升发,改进的随机梯度下降法等等。基于梯度的优化方法在求解问题时,本身对要求解的问题有要求:即问题本身必须是可导的。其次,基于梯度的方法会使得待优化问题陷入局部最优。此时,一些启发式优化方法可以很好的解决这样的问题,但是启发式算法的求解速度较慢,占用内存较大。

    对于确定回归系数这样的问题

不存在多峰,也就是说不存在除最优值之外的局部最优值。其次,这样的问题是可求导的,所以基于梯度的方法是可以用来求解回归系数的问题的。优化算法见optimal algorithm类别。

三、Sigmoid函数

    当分类边界的函数被表示出来后,可以使用一种被称为海维塞德阶跃函数(Heaviside step function)来处理,简称为单位阶跃函数。其中Sigmoid函数是其中使用较多的一种阶跃函数。Sigmoid函数如下图:

Sigmoid函数的公式为:

当z为0时,函数值为0.5;

四、实验(MATLAB程序)

    1、梯度上升法

%%gradient method
function weights = gradient(x, y)
    alpha = 0.001;%Step
    maxCycle = 500;
    [m,n] = size(x);
    weights = ones(n,1);
    for i = 1 : maxCycle
        h = sigmoid(x * weights);
        error = y - h;
        weights = weights + alpha * x' * error;%注意点1
    end
end

    2、Sigmoid

%% sigmoid function
function out = sigmoid(x)
    out = 1./(1+exp(-x));
end

    3、主程序

%----start-----
data = load('testSet.txt');%导入数据
[m,n] = size(data);%行和列
o = ones(m,1);
dataX = data(:,1:2);
X = [o,dataX];
Y = data(:,3);

%--experiments--
weights = gradient(X,Y);

%% plot the pic
Ypic = X * weights;
x_1 = X(:,2);
x_2 = X(:,3);
hold on
for i = 1 : 100
    if Y(i,:) == 0
        plot(x_1(i,:),x_2(i,:),'.g');
    else
        plot(x_1(i,:),x_2(i,:),'.r');
    end
end
x = -3.0:0.1:3;
y = (-weights(1)-weights(2)*x)/weights(3);%注意点2
plot(x,y);

    4、测试的数据以及最终的分类

五、注意点

    在程序的实现过程中有两个注意点,分别用注释标出,第一处在梯度上升法中的求权重weights的公式;第二处是主程序中的注释标出。

    1、先说说第一处:

    令

可知

,假设有m个样本,且样本之间相互独立。则似然函数为

取对数

对其中一个样本而言求偏导:

要求极大似然估计,故要使用梯度上升法求最大值:

    2、再说说第二处:

    要画出拟合直线,横坐标为x_1,纵坐标为x_2,直线的方程为

,求出x_1和x_2的对应关系即可。

本实验的数据

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏自学笔记

Neural Network

重新回顾一下一开始学的PLA,preceptron learning Algorithm。PLA适用于二维及高维的线性可分的情况,如果是非线性可分的数据,如果使...

24620
来自专栏计算机视觉战队

每日一学——卷积神经网络

注:该篇幅参考斯坦福大学的教程,有兴趣的朋友可以去阅读。 卷积神经网络(CNN) 卷积神经网络和前几次介绍的神经网络非常相似:它们都是由神经元组成,神经元中有具...

37680
来自专栏机器学习之旅

理论:决策树及衍射指标

特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下的经验条件熵H(D|A)之差

8240
来自专栏人工智能LeadAI

深度学习中的损失函数总结以及Center Loss函数笔记

图片分类里的center loss 目标函数,损失函数,代价函数 损失函数度量的是预测值与真实值之间的差异.损失函数通常写做L(y_,y).y_代表了预测值,y...

68850
来自专栏深度学习入门与实践

【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络GoogLeNet

  前面讲了LeNet、AlexNet和Vgg,这周来讲讲GoogLeNet。GoogLeNet是由google的Christian Szegedy等人在201...

48460
来自专栏YoungGy

记忆网络RNN、LSTM与GRU

RNN 结构 训练 应用 RNN Variants LSTM 结构 梯度消失及梯度爆炸 GRU 结构 ? 一般的神经网络输入和输出的维度大小都是固定的,针对序列...

400100
来自专栏企鹅号快讯

几种循环神经网络介绍

基于图展开和参数共享的思想,我们可以设计各种循环神经网络。 ? 计算循环网络(将 x值的输入序列映射到输出值 o 的对应序列) 训练损失的计算图。损失L 衡量每...

38990
来自专栏机器之心

入门 | 一文概览深度学习中的激活函数

32380
来自专栏机器学习之旅

理论:聚类算法思路总结

常见的为欧式距离(L1 norm)&&p=2,拓展的可以有闵可夫斯基距离(L2 norm)&&p=1:

8220
来自专栏李智的专栏

斯坦福CS231n - CNN for Visual Recognition(6)-lecture5预处理、正则化、损失函数

关于数据预处理我们有3种常用的方式,假设数据矩阵XX,假设其尺寸是[N,D][N ,D](NN是数据样本的数量,DD是数据的维度)。

31410

扫码关注云+社区

领取腾讯云代金券