首页 > 编程语言 >简单易学的机器学习算法——Logistic回归

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

时间:2023-06-14 21:02:05浏览次数:48  
标签:end 函数 Sigmoid 梯度 算法 weights Logistic 拟合 易学


一、Logistic回归的概述

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

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

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

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

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

三、Sigmoid函数

海维塞德阶跃函数(Heaviside step function)来处理,简称为单位阶跃函数。其中Sigmoid函数是其中使用较多的一种阶跃函数。Sigmoid函数如下图:

简单易学的机器学习算法——Logistic回归_最优化方法

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、测试的数据以及最终的分类



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



简单易学的机器学习算法——Logistic回归_梯度 梯度下降_03



五、注意点



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



    1、先说说第一处:


    令

,则

。可知

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

。 取对数

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

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


    2、再说说第二处:


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

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



本实验的数据










标签:end,函数,Sigmoid,梯度,算法,weights,Logistic,拟合,易学
From: https://blog.51cto.com/u_16161414/6481106

相关文章

  • 优化算法——遗传算法
    与遗传算法的第一次接触遗传算法是我进入研究生阶段接触的第一个智能算法,从刚开始接触,到后来具体去研究,再到后来利用遗传算法完成了水利水电的程序设计比赛,整个过程中对遗传算法有了更深刻的理解,在此基础上,便去学习和研究了粒子群算法,人工蜂群算法等等的群体智能算法。想利用这个时......
  • 简单易学的机器学习算法——因子分解机(Factorization Machine)
    一、因子分解机FM的模型    因子分解机(FactorizationMachine,FM)是由SteffenRendle提出的一种基于矩阵分解的机器学习算法。1、因子分解机FM的优势    对于因子分解机FM来说,最大的特点是对于稀疏的数据具有很好的学习能力。现实中稀疏的数据很多,例......
  • 优化算法——模拟退火算法
    模拟退火算法原理爬山法是一种贪婪的方法,对于一个优化问题,其大致图像(图像地址)如下图所示:其目标是要找到函数的最大值,若初始化时,初始点的位置在处,则会寻找到附近的局部最大值点处,由于点出是一个局部最大值点,故对于爬山法来讲,该算法无法跳出局部最大值点。若初始点选择在处,根据爬......
  • 挑战数据结构和算法面试题——最大间隔
    分析:本题首先需要理解清楚最大间隔的最小:最初的间隔为:[1,1,4,1],此时最大间隔为4删除2后的间隔为:[2,4,1],此时最大间隔为4删除3后的间隔为:[1,5,1],此时最大间隔为5删除7后的间隔为:[1,1,5],此时最大间隔为5在删除元素后的间隔为:[4,5,5],最小值为:4方法:intget_min_max_margin(int*a,constintn){......
  • 挑战数据结构和算法——栈的push、pop序列
    题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:本题考查栈的基本操作,栈是一种“先进后出”的数据结构。判断一个序列是否是栈的pop序列是一种常见的问题,可以通过模拟push和pop的过程,push和pop总是成对出现的,如:方法:#definepush1#def......
  • 【数据结构和算法面试题】跳台阶问题
    题目来源“数据结构与算法面试题80道”。问题分析:假设为跳台阶的总跳法,当时,;当时,;当时,如果先跳1级台阶,有种方法,如果先跳2级台阶,有种方法,依次类推,可以得到下面的递推公式:方法:intget_kind(intn){ if(n<=0)return0; intresult; int*cal=(int*)malloc(sizeof(int)*n);......
  • 挑战数据结构和算法——整数的二进制表示中1的个数
    题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:本题涉及到二进制的处理,在本题使用到&操作和>>操作。方法:intget_num(intn){intnum=0;if(n<0){num+=1;n=n*(-1);}while(n!=0){......
  • 推荐系统中的常用算法——Wide & Deep
    1.概述在前DeepLearning时代,以LogisticRegression(LR)为代表的广义线性模型在CTR,CVR中得到了广泛的应用,主要原因包括:模型足够简单,相当于不包括隐含层的神经网络;可扩展性强;可解释性强,因为是线性的模型,可以很方便的显现出特征对最终结果的强弱。虽然线性模型有如上的优点,但同时也存在......
  • 【数据结构与算法面试题】二叉树节点的最大距离
    题目来源“数据结构与算法面试题80道”。问题分析:涉及的知识点是二叉树的遍历,遍历的方法主要有:先序遍历中序遍历后序遍历层次遍历在本题中,使用先序遍历的方法。方法:voidm_length(BSTreeNode*root,int*length,int*max_length){if(NULL==root||(NULL==root......
  • 机器学习算法实现解析——libFM之libFM的训练过程之Adaptive Regularization
    本节主要介绍的是libFM源码分析的第五部分之二——libFM的训练过程之AdaptiveRegularization的方法。5.3、AdaptiveRegularization的训练方法5.3.1、SGD的优劣在“机器学习算法实现解析——libFM之libFM的训练过程之SGD的方法”中已经介绍了基于SGD的FM模型的训练方法,SGD的方法的......