机器学习——逻辑回归常见面试题整理

article/2025/8/28 16:42:01

逻辑回归

1.介绍

逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯队下降来求解参数,来达到将数据二分类的目的。

2.逻辑回归的损失函数和梯度下降参数迭代方法

  • 逻辑回归的损失函数是它的极大似然函数

在这里插入图片描述

  • 参数迭代方法

在这里插入图片描述

在这里插入图片描述

3.逻辑回归为什么使用对数损失而不用平方损失

损失函数一般有四种,平方损失函数,对数损失函数,HingeLoss0-1损失函数,绝对值损失函数。

将极大似然函数取对数以后等同于对数损失函数。在逻辑回归这个模型下,对数损失函数的训练求解参数的速度是比较快的。至于原因大家可以求出这个式子的梯度更新

这个式子的更新速度只和xij,yi相关。和sigmod函数本身的梯度是无关的。这样更新的速度是可以自始至终都比较的稳定。

为什么不选平方损失函数的呢?

其一是因为如果你使用平方损失函数,你会发现梯度更新的速度和sigmod函数本身的梯度是很相关的。sigmod函数它在定义域内的梯度都不大于0.25,这样训练会非常的慢。

4.逻辑回归在训练的过程中,如果有很多的特征高度相关或者说有一个特征重复了很多遍,会造成怎样的影响

如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。 但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复 100 遍。训练完以后,数据还是这么多,但是这个特征本身重复了 100 遍,实质上将原来的特征分成了 100 份,每一个特征都是原来特征权重值的百分之一。如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。

5.为什么在训练过程中将高度相关的特征去掉

  • 1.去掉高度相关的特征会让模型的可解释性更好
  • 2.可以大大提高训练的速度。如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。其次是特征多了,本身就会增大训练的时间。

6.逻辑回归为什么要对特征进行离散化

https://blog.csdn.net/yang090510118/article/details/39478033
在工业界,很少直接将连续值作为特征喂给逻辑回归模型,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:

  1. 稀疏向量内积乘法运算速度快,计算结果方便存储,容易scalable(扩展)。
  2. 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。
  3. 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。
  4. 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。
  5. 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。
    李沐少帅指出,模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
    大概的理解:
    1)计算简单
    2)简化模型
    3)增强模型的泛化能力,不易受噪声的影响

7.逻辑回归模型中,为什么常常要做特征组合(特征交叉)

逻辑回归模型属于线性模型,线性模型不能很好处理非线性特征,特征组合可以引入非线性特征,提升模型的表达能力。另外,基本特征可以认为是全局建模,组合特征更加精细,是个性化建模,但对全局建模会对部分样本有偏,对每一个样本建模又会导致数据爆炸,过拟合,所以基本特征+特征组合兼顾了全局和个性化。

8.逻辑回归和线性回归

  • 逻辑回归是一种广义线性模型,它引入了Sigmod函数,是非线性模型,但本质上还是一个线性回归模型,因为除去Sigmod函数映射关系,其他的算法原理,步骤都是线性回归的。
  • 逻辑回归和线性回归首先都是广义的线性回归,在本质上没多大区别,区别在于逻辑回归多了个Sigmod函数,使样本映射到[0,1]之间的数值,从而来处理分类问题。另外逻辑回归是假设变量服从伯努利分布,线性回归假设变量服从高斯分布。逻辑回归输出的是离散型变量,用于分类,线性回归输出的是连续性的,用于预测。逻辑回归是用最大似然法去计算预测函数中的最优参数值,而线性回归是用最小二乘法去对自变量因变量关系进行拟合。

9.正则化

  • 过拟合

    过拟合表现在训练数据上的误差非常小,而在测试数据上误差反而增大。原因是模型过于复杂,过分的去拟合数据的噪声。

    正则化项是对模型参数添加先验,使得模型复杂度较小,对于噪声扰动相对较小。

  • 防止过拟合

    在目标函数或代价函数后面加上一个正则项,一般有L1正则与L2正则。

  • L1正则和L2正则

    • 相同点:都用于避免过拟合

    • 不同点:

      • 1.两者引入的关于模型参数的先验条件不一样,L1是拉普拉斯分布,L2是正态分布。

      • 2.L1偏向于使模型参数变得稀疏(但实际上并不那么容易),L2偏向于使模型每一个参数都很小,但是更加稠密,从而防止过拟合。

在这里插入图片描述

上图中的模型是线性回归,有两个特征,要优化的参数分别是w1和w2,左图的正则化是L2,右图是L1。蓝色线就是优化过程中遇到的等高线,一圈代表一个目标函数值,圆心就是样本观测值(假设一个样本),半径就是误差值,受限条件就是红色边界(就是正则化那部分),二者相交处,才是最优参数。可见右边的最优参数只可能在坐标轴上,所以就会出现0权重参数,使得模型稀疏。

10.梯度下降法

  • 1.批量梯度下降法BGD

    在更新参数时使用所有的样本来进行更新

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YjAyjP3Y-1605687373540)(C:\Users\My\AppData\Roaming\Typora\typora-user-images\image-20201118155204410.png)]

  • 随机梯度下降法SGD

    和批量梯度下降法原理类似,区别在于求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-evtYQySo-1605687373544)(C:\Users\My\AppData\Roaming\Typora\typora-user-images\image-20201118155401465.png)]

  • 小批量梯度下降法MBGD

    是SGD和BGD的折中,即对于m个样本,采用x个子样本来迭代,1<x<m。一般可以取x=10,根据样本的数据,调整这个x的值。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aIjAcjRp-1605687373548)(C:\Users\My\AppData\Roaming\Typora\typora-user-images\image-20201118155629173.png)]

  • 总结

    • 1.BGD会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢
    • 2.SGD以高方差频繁更新,优点是使得SGD会跳到新的和潜在的更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂
    • 3.MBGD结合了BGD和SGD的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中可以采用这种方法,将数据一个batch一个batch的送进去训练。

11.工程上,怎么实现LR的并行化?有哪些并行化的工具

逻辑回归的并行化最主要的就是对目标函数梯度计算的并行化。

算法的并行化有两种:

  • 1.无损的并行化:算法天然可以并行,并行只是提高了计算的速度和解决问题的规模,但和正常执行的结果是一样的。
  • 2.有损的并行化:算法本身不是天然并行的,需要对算法做一些近似来实现并行化,这样并行化之后的双方和正常执行的结果并不一致,但是相似的。

基于Batch的算法(Batch-GD, LBFGS, OWLQN)都是可以进行无损的并行化的。而基于SGD的算法(Ad Predictor, FTRL-Proximal)都只能进行有损的并行化。

并行化的工具MPI和OpenMP

12.逻辑回归的优缺点

  • 优点
    • 1.形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大
    • 2.逻辑回归的对率函数是任意阶可导函数,数学性质好,易于优化
    • 3.逻辑回归不仅可以预测类别,还可以得到近似的概率预测
    • 4.模型效果不错。在工程上是可以接受的(作为baseline),如果特征工程做得好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度
    • 训练速度较快。分类的时候,计算量仅仅只和特征的数目有关。并且逻辑回归的分布式优化sgd发展比较成熟,训练的速度可以通过堆机器进一步提高,这样我们可以在短时间内迭代好几个版本的模型
    • 方便输出结果调整。逻辑回归可以很方便的得到最后的分类效果,因为输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行cut off,也就是划分阈值(大于某个阈值的是一类,小于某个阈值的是一类)
  • 缺点
    • 1.准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布
    • 2.很难处理数据不平衡的问题。比如:如果我们对于一个正负样本非常不平衡的问题比如正负样本比10000:1。我们把所有样本都预测为正也能使损失函数的值比较小,但是作为一个分类器,它对正负样本的区分能力不会很好
    • 3.处理非线性数据较麻烦,逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据
    • 4.逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归。

13.LR与SVM的关系

  • 相同点
    • 1.都是有监督分类方法,判别模型(直接估计y=f(x)或p(y|x))
    • 2.都是线性分类方法(指不用核函数的情况)
  • 不同点
    • 1.loss不同。LR是交叉熵,SVM是Hinge loss,最大化函数间隔
    • 2.LR决策考虑所有样本点,SVM决策仅仅取决于支持向量
    • 3.LR受数据分布影响,尤其是样本不均衡时影响大,要先做平衡,SVM不直接依赖于分布
    • 4.LR可以产生概率,SVM不能
    • 5.LR是经验风险最小化,需要另外加正则,SVM自带结构风险最小化不需要加正则项
    • 6.LR每两个点之间都要做内积,而SVM只需要计算样本和支持向量的内积,计算量更小

http://chatgpt.dhexx.cn/article/siZd0KSh.shtml

相关文章

面试精选逻辑推理题总结

类似的杀人游戏 1、500张骨牌整齐地排成一行&#xff0c;按顺序编号为1、2、3、……、499、500。第一次拿走所有奇数位置上的骨牌&#xff0c;第二次再从剩余骨牌中拿走奇数位置上的骨牌&#xff0c;以此类推。请问最后剩下的一张骨牌的编号是&#xff1f;&#xff08;256&…

IT科技企业逻辑思维面试题

逻辑思维面试题 一、假设有一个池塘&#xff0c;里面有无穷多的水。现有2个空水壶&#xff0c;容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。【请描述操作过程】 答&#xff1a;&#xff08;1&#xff09;先用容积为6升的水壶装满水&#xff1b; &#…

面试逻辑题分享--字母数字映射关系推算题

越来越多的朋友可能会发现&#xff0c;在现在找工作的时候&#xff0c;经常会遇到一些笔试题&#xff0c;而且其中不乏有逻辑题&#xff0c;企业希望通过一些逻辑题的测试&#xff0c;来判断求职者的一个逻辑思维能力。今晚在群里看到有小伙伴发了一个题&#xff0c;一时兴起&a…

前端_逻辑题 1

题目一 5只鸡5天能下5个蛋&#xff0c;100天下100个蛋需要多少只鸡&#xff1f; 1只鸡5天能下1个蛋&#xff0c;1只鸡100天能下20个蛋&#xff0c;所以100天下100个蛋需要5只鸡。 题目二 两个盲人都各自买了一对黑袜和一对白袜&#xff0c;四对袜子的布质、大小完全相同&#…

华为软件测试笔试真题之变态逻辑推理题【二】华为爆火面试题

“一头牛重800公斤&#xff0c;一座桥承重700公斤&#xff0c;问牛怎么过桥&#xff1f;” 这个问题在知乎上被浏览过13672927次&#xff0c;火热程度可见一斑。 据说这是华为的面试题&#xff0c;看似不合理的题目和国际闻名的大厂&#xff0c;极大的勾起了人们的兴趣。 不像面…

二、逻辑回归LR面试题总结

1. 简单介绍一下逻辑回归&#xff1f; 逻辑回归主要用来解决分类问题&#xff0c;线性回归的结果 Y Y Y带入一个非线性变换的Sigmoid函数中&#xff0c;得到 [ 0 , 1 ] [0,1] [0,1]之间取值范围的数 S S S&#xff0c; S S S可以把它看成是一个概率值&#xff0c;如果我们设置…

互联网面试——.Net 面试题

提供了最常见的 .Net 面试问题和许多公司提出的答案。让我们看看顶级 Dot Net 面试问题列表。 1. 什么是.NET&#xff1f; .NET 是一种软件开发框架。它就像其他软件开发框架&#xff08;J2EE&#xff09;一样。它以类库和 API 的形式提供运行时功能和一组丰富的预构建功能。此…

程序员面试逻辑题解析

《程序员面试逻辑题解析》 基本信息 原书名&#xff1a;Puzzles for Programmers and Pro 作者&#xff1a; (美)Dennis E. Shasha [作译者介绍] 译者&#xff1a; 费若愚 朱学武 出版社&#xff1a;人民邮电出版社 ISBN&#xff1a;9787115301956 上架时间&#xff1a;2012…

程序员面试必看32道经典逻辑推理题

写在前面&#xff1a; 此文档由一位学长整理&#xff0c;转载请附上原文出处链接 32道经典逻辑推理题包括有关二进制、水桶、钱、蓝眼、时间、重量、数学、其他等问题 Click here 有秘密哦&#xff01;&#xff01;&#xff01; 点击浏览 文章目录 一、数字的魅力二、分而治之…

面试逻辑题

逻辑题目 逻辑题目现在也是面试中常考的题目,也不清楚面试出这种题目的意义,可能就是考察面试人员是否逻辑清晰. 这种题目没有什么好的方法,除非你见过原题,否则,只能根据所给出的条件慢慢分析,尽量不要用常规思路,希望大家要跳跃思维. 如果实在不行就给出一种解法,可能不是最…

面试常见逻辑题小整理

题一、 1 1 1 2 1 1 2 1 1 1 1 1 2 2 1 下一行是什么&#xff1f; 答案&#xff1a; 312211 题二、 &#xff08;1&#xff09;烧一根不均匀的绳要用一个小时&#xff0c;如何用它来判断半个小时&#xff1f; &#xff08;2&#xff09;烧一根不均匀的绳&#xff0c;从头烧…

二维vector数组初始化方法

在用devcpp编译程序时发现&#xff0c;二维vector数组如果只定义的话&#xff0c;不指定元素个数也不进行初始化的时候会导致编译出错。 通常情况下&#xff0c;可以只提供vector对象容纳的元素数量而略去初始值。此时库会创建一个值初始化的元素初值&#xff0c;并把它赋给容器…

【vector常用的6种初始化方法】

文章目录 一二三四五六 一 最常用&#xff0c;此时&#xff0c;vector为空&#xff0c; size为0&#xff0c;表明容器中没有元素&#xff0c;而且 capacity 也返回 0&#xff0c;意味着还没有分配内存空间。这种初始化方式适用于元素个数未知&#xff0c;需要在程序中动态添加…

vector的初始化和遍历

这里只说明常用的vector初始化的方式。一般vector的初始化我还是比较习惯于像数组一样的初始化方式。一个一个赋值&#xff0c;或者用花括号的初始化。下面用一个程序来说明&#xff1a; #include "stdafx.h"#include <vector>#include <iostream.h>usi…

c++ vector 初始化_C++--vector()的用法

vector()的用法 概念 vector 是向量类型&#xff0c;它可以容纳许多类型的数据&#xff0c;如若干个整数&#xff0c;所以称其为容器。vector 是C STL的一个重要成员&#xff0c;使用它时需要包含头文件&#xff1a; #include<vector>;一、vector的初始化 (1) vector&l…

C++中 std::vector 的6种初始化方法

1.vector<int> list1; 默认初始化&#xff0c;最常用 此时&#xff0c;vector为空&#xff0c; size为0&#xff0c;表明容器中没有元素&#xff0c;而且 capacity 也返回 0&#xff0c;意味着还没有分配内存空间。 这种初始化方式适用于元素个数未知&#xff0c;需要在…

怎样初始化二维vector

二维vector的初始化方法总结 初始化一个 二维vector,行M,列N学会用大括号初始化二维数组初始化一个 二维vector,行M,列不固定初始化一个二维vector,行列都不固定注意初始化二维vector为空时的情况leetcode例题1leetcode例题2 以定义一个二维整形数组并初始化为例&#xff1a; …

c++之vector 及 二维容器vector<vector<int>>初始化方法 及 三维数组初始化

C二维容器vector<vector>初始化方法解析 遇到的问题&#xff1a; 在解决“求最大字串”问题时想到了用二位数组vector<vector<int>> table&#xff0c;但是不知道怎么对其进行初始化&#xff08;初始化时指定二维容器的大小&#xff09;,于是网上搜索一番&a…

打算自学一些编程,想兼职程序员打零工,想问问现在哪个程序员兼职平台单子简单,不考察接单人学历?

兼职平台接单&#xff0c;都不查学历。 等你具备最基本的可以接单的技术能力时&#xff0c;找个技术工作&#xff0c;随随便便一份都能有2000以上。但是&#xff0c;自己接单&#xff1f;实不相瞒&#xff0c;会饿死的。没有什么钱是从一开始就坐在家里轻轻松松能赚到的。除非…

有哪些适合程序员的兼职?

前言 程序员兼职的方式有多种&#xff0c;在回答题主这个问题之前&#xff0c;我们先来了解一下当前互联网行业程序员为什么会选择兼职。 为什么程序员想要兼职&#xff1f; 在别人眼中程序员那是一个高薪的职业&#xff0c;近些年来&#xff0c;越来越多的程序员想在工作之…