机器学习-面经

         经历了2023年的秋招,现在也已经入职半年了,空闲时间将面试中可能遇到的机器学习问题整理了一下,可能答案也会有错误的,希望大家能指出!另外,不论是实习,还是校招,都祝福大家能够拿到满意的Offer!

机器学习面经系列的其他部分如下所示:

机器学习-面经(part2)-交叉验证、超参数优化、评价指标等内容

机器学习-面经(part3)-正则化、特征工程面试问题与解答合集
机器学习-面经(part4)-决策树共5000字的面试问题与解答

1、机器学习模型

1.1 有监督学习模型

1.2 无监督学习模型

 1.3 概率模型

1.4、什么是监督学习?什么是非监督学习?

         所有的回归算法和分类算法都属于监督学习。并且明确的给给出初始值,在训练集中有特征和标签,并且通过训练获得一个模型,在面对只有特征而没有标签的数据时,能进行预测。

        监督学习:通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出,例如 分类。

        非监督学习:直接对输入数据集进行建模,例如强化学习、K-means 聚类、自编码、受限波尔兹曼机

        半监督学习:综合利用有类标的数据和没有类标的数据,来生成合适的分类函数。

          目前最广泛被使用的分类器有人工神经网络、支持向量机、最近邻居法、高斯混合模型、朴素贝叶斯方法、决策树和径向基函数分类。

         无监督学习里典型的例子就是聚类了。聚类的目的在于把相似的东西聚在一起,一个聚类算法通常只需要知道如何计算相似度就可以开始工作了。

1.5、回归、分类、聚类的区别与联系

1.6、生成模式 vs 判别模式

        生成模型: 由数据学得联合概率分布函数 P(X,Y),求出条件概率分布P(Y|X)的预测模型。 朴素贝叶斯、隐马尔可夫模型、高斯混合模型、文档主题生成模型(LDA)、限制玻尔兹曼机。         判别式模型: 由数据直接学习决策函数 Y = f(X),或由条件分布概率 P(Y|X)作为预测模型。 K近邻、SVM、决策树、感知机、线性判别分析(LDA)、线性回归、传统的神经网络、逻辑斯蒂回归、boosting、条件随机场。

2、线性模型

2.1 线性回归

        原理: 用线性函数拟合数据,用 MSE 计算损失,然后用梯度下降法(GD)找到一组使 MSE 最小的权重。

        线性回归的推导如下所示:

2.1.1 什么是回归?哪些模型可用于解决回归问题?

  •         指分析因变量和自变量之间关系.
  •         线性回归: 对异常值非常敏感
  •         多项式回归: 如果指数选择不当,容易过拟合。
  •         岭回归
  •         Lasso回归
  •         弹性网络回归

2.1.2 线性回归的损失函数为什么是均方差?

2.1.3 什么是线性回归?什么时候使用它?

        利用最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.

  • 自变量与因变量呈直线关系;
  • 因变量符合正态分布;
  • 因变量数值之间独立;
  • 方差是否齐性。

2.1.4 什么是梯度下降?SGD的推导?

        BGD: 遍历全部数据集计算一次loss函数,然后算函数对各个参数的梯度,更新梯度。 

BGD、SGD、MBGD之间的区别

2.1.5 什么是最小二乘法(最小平方法)?

        它通过最小化误差的平方和寻找数据的最佳函数匹配。

2.1.6 常见的损失函数有哪些?

  • 0-1损失
  • 均方差损失(MSE)
  • 平均绝对误差(MAE)
  • 分位数损失(Quantile Loss)
  • 分位数回归可以通过给定不同的分位点,拟合目标值的不同分位数; 实现了分别用不同的系数控制高估和低估的损失,进而实现分位数回归
  • 交叉熵损失
  • 合页损失 一种二分类损失函数,SVM的损失函数本质: Hinge Loss + L2 正则化 合页损失的公式如下:

2.1.7 有哪些评估回归模型的指标?

        衡量线性回归法最好的指标: R-Squared

 2.1.8 什么是正规方程?‍

        正规方程组是根据最小二乘法原理得到的关于参数估计值的线性方程组。正规方程是通过求解来找出使得代价函数最小的参数解出:

2.1.9 梯度下降法找到的一定是下降最快的方向吗?

        不一定,它只是目标函数在当前的点的切平面上下降最快的方向。 在实际执行期中,牛顿方向(考虑海森矩阵)才一般被认为是下降最快的方向,可以达到超线性的收敛速度。梯度下降类的算法的收敛速度一般是线性甚至次线性的(在某些带复杂约束的问题)。

2.1.10 MBGD需要注意什么? 如何选择m?

        一般m取2的幂次方能充分利用矩阵运算操作。 一般会在每次遍历训练数据之前,先对所有的数据进行随机排序,然后在每次迭代时按照顺序挑选m个训练集数据直至遍历完所有的数据。

2.2 LR

也称为"对数几率回归"。

知识点提炼

  1.     1.分类,经典的二分类算法!
  2.     2.LR的过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证这个求解的模型的好坏。
  3.     3.Logistic 回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)
  4.     4.回归模型中,y 是一个定性变量,比如 y = 0 或 1,logistic 方法主要应用于研究某些事件发生的概率。
  5.     5.LR的本质:极大似然估计
  6.     6.LR的激活函数:Sigmoid
  7.     7.LR的代价函数:交叉熵

优点

  •     1.速度快,适合二分类问题
  •     2.简单易于理解,直接看到各个特征的权重
  •     3.能容易地更新模型吸收新的数据

缺点

  •    对数据和场景的适应能力有局限性,不如决策树算法适应性那么强。LR中最核心的概念是 Sigmoid 函数,Sigmoid函数可以看成LR的激活函数。
  • Regression 常规步骤:
  •     寻找h函数(即预测函数)
  •     构造J函数(损失函数)
  •     想办法(迭代)使得J函数最小并求得回归参数(θ)

LR伪代码

  •     初始化线性函数参数为1
  •     构造sigmoid函数
  •     重复循环I次
  •             计算数据集梯度
  •             更新线性函数参数
  •     确定最终的sigmoid函数
  •     输入训练(测试)数据集
  •     运用最终sigmoid函数求解分类

LR的推导

2.2.1 为什么 LR 要使用 sigmoid 函数?

        1.广义模型推导所得 2.满足统计的最大熵模型 3.性质优秀,方便使用(Sigmoid函数是平滑的,而且任意阶可导,一阶二阶导数可以直接由函数值得到不用进行求导,这在实现中很实用)

2.2.2 为什么常常要做特征组合(特征交叉)?

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

2.2.3 为什么LR比线性回归要好?

  •         LR和线性回归首先都是广义的线性回归;其次经典线性模型的优化目标函数是最小二乘,而LR则是似然函数;另外线性回归在整个实数域范围内进行预测,敏感度一致,而分类范围,需要在[0,1]。LR就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,因而对于这类问题来说,LR的鲁棒性比线性回归的要好

2.2.4 LR参数求解的优化方法?(机器学习中常用的最优化方法)

        梯度下降法,随机梯度下降法,牛顿法,拟牛顿法(LBFGS,BFGS,OWLQN)

        目的都是求解某个函数的极小值。

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

  •         LR的并行化最主要的就是对目标函数梯度计算的并行化。
  •         无损的并行化:算法天然可以并行,并行只是提高了计算的速度和解决问题的规模,但和正常执行的结果是一样的。
  •         有损的并行化:算法本身不是天然并行的,需要对算法做一些近似来实现并行化,这样并行化之后的双方和正常执行的结果并不一致,但是相似的。
  •         基于Batch的算法都是可以进行无损的并行化的。而基于SGD的算法都只能进行有损的并行化。

2.2.6 LR如何解决低维不可分问题?

        通过特征变换的方式把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。

        具体方法:核函数,如:高斯核,多项式核等等

2.2.7 LR与最大熵模型MaxEnt的关系?

        没有本质区别。LR是最大熵对应类别为二类时的特殊情况,也就是当LR类别扩展到多类别时,就是最大熵模型。

2.2.8 为什么 LR 用交叉熵损失而不是平方损失(MSE)?

        如果使用均方差作为损失函数,求得的梯度受到sigmoid函数导数的影响;

求导:

        如果使用交叉熵作为损失函数,没有受到sigmoid函数导数的影响,且真实值与预测值差别越大,梯度越大,更新的速度也就越快。

求导:

        记忆:mse的导数里面有sigmoid函数的导数,而交叉熵导数里面没有sigmoid函数的导数,sigmoid的导数的最大值为0.25,更新数据时太慢了。

2.2.9 LR能否解决非线性分类问题?

可以,只要使用kernel trick(核技巧)。不过,通常使用的kernel都是隐式的,也就是找不到显式地把数据从低维映射到高维的函数,而只能计算高维空间中数据点的内积。

2.2.10 用什么来评估LR模型?

  • 1.由于LR是用来预测概率的,可以用AUC-ROC曲线以及混淆矩阵来确定其性能。
  • 2.LR中类似于校正R2 的指标是AIC。AIC是对模型系数数量惩罚模型拟合度量。因此,更偏爱有最小的AIC的模型。

2.2.11 LR如何解决多分类问题?(OvR vs OvO

2.2.12 在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100,会造成怎样的影响?

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

2.2.13 为什么在训练的过程当中将高度相关的特征去掉?

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

2.3 Lasso

        定义:所有参数绝对值之和,即L1范数,对应的回归方法。

Lasso(alpha=0.1)  # 设置学习率

2.4 Ridge

  • 定义:所有参数平方和,即L2范数,对应的回归方法。
  • 通过对系数的大小施加惩罚来解决 普通最小二乘法 的一些问题。
  • Ridge(alpha=0.1)   # 设置惩罚项系数

2.5 Lasso vs Ridge

2.6 线性回归 vs LR

        今日先更新到这里了,机器学习的总共为12章节,除此之外还有深度学习!等后续一序列更新~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

990-28产品经理:Different types of IT risk 不同类型的IT风险

Your IT systems and the information that you hold on them face a wide range of risks. If your business relies on technology for key operations and activities, you need to be aware of the range and nature of those threats. 您的IT系统和您在其中持有的信息面临…

数据结构c版(2)——二叉树

本章我们来了解一下二叉树这一概念。 目录 1.树概念及结构 1.1树的概念​​​​​​​ 1.2 树的特点: 1.3 树的相关概念 1.4 树的表示​​​​​​​ 1.5 树在实际中的运用(表示文件系统的目录树结构) 2.二叉树概念及结构 2.1概念 …

Qt 简约美观的动画 摆钟风格 第十季

&#x1f60a; 今天给大家分享一个摆钟风格的加载动画 &#x1f60a; 效果如下: 最近工作忙起来了 , 后续再分享其他有趣的加载动画吧. 一共三个文件 , 可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <Q…

【C++】用文件流的put和get成员函数读写文件

题目 编写一个mycopy程序&#xff0c;实现文件复制的功能。用法是在控制台输入&#xff1a; mycooy 源文件名 目标文件名 参数介绍 m a i n main main 函数的参数有两个&#xff0c;一个int类型参数和一个指针数组。 a r g c argc argc 表示参数的个数。参数为void时 a r g …

机器人 标准DH与改进DH

文章目录 1 建立机器人坐标系1.1 连杆编号1.2 关节编号1.3 坐标系方向2 标准DH(STD)2.1 确定X轴方向2.2 建模步骤2.3 变换顺序2.4 变换矩阵3 改进DH(MDH)3.1 确定X轴方向3.2 建模步骤3.3 变换顺序3.4 变换矩阵4 标准DH与改进DH区别5 Matlab示例参考链接1 建立机器人坐标系 1.1…

Elasticsearch:如何创建搜索引擎

作者&#xff1a;Jessica Taylor 搜索引擎是生活中我们认为理所当然的事情之一。 每当我们寻找某些东西时&#xff0c;我们都会将一个单词或短语放入搜索引擎&#xff0c;就像魔术一样&#xff0c;它会为我们提供一个匹配结果列表。 现在可能感觉不那么神奇了&#xff0c;因为这…

Go-知识struct

Go-知识struct 1. struct 的定义1.1 定义字段1.2 定义方法 2. struct的复用3. 方法受体4. 字段标签4.1 Tag是Struct的一部分4.2 Tag 的约定4.3 Tag 的获取 githupio地址&#xff1a;https://a18792721831.github.io/ 1. struct 的定义 Go 语言的struct与Java中的class类似&am…

第二十三章 :Docker 部署 Redis

第二十三章 :Docker Redis 部署 Docker version 25.0.3, build 4debf41 ,Docker Compose version v2.24.2Redis-6.0.6 镜像 redis:6.0.6-alpineRedis-6.0.6版本 部署规划 服务器IP192.168.92.105端口6379安装目录/home/work/docker-redis-6.0.6数据映射目录/home/work/do…

最简单的基于 FFmpeg 的收流器(以接收 RTMP 为例)

最简单的基于 FFmpeg 的收流器&#xff08;以接收 RTMP 为例&#xff09; 最简单的基于 FFmpeg 的收流器&#xff08;以接收 RTMP 为例&#xff09;正文结果工程文件下载参考链接 最简单的基于 FFmpeg 的收流器&#xff08;以接收 RTMP 为例&#xff09; 参考雷霄骅博士的文章…

蓝凌OA frpt_listreport_definefield.aspx接口存在SQL注入漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

DevStack 部署 OpenStack

Devstack 简介 DevStack 是一系列可扩展的脚本&#xff0c;用于基于 git master 的最新版本快速调出完整的 OpenStack 环境。devstack 以交互方式用作开发环境和 OpenStack 项目大部分功能测试的基础。 devstack 透过执行 stack.sh 脚本&#xff0c;搭建 openstack 环境&…

lv20 QT主窗口4

熟悉创建主窗口项目 1 QAction 2 主窗口 菜单栏&#xff1a;fileMenu menuBar()->addMenu(tr("&File")); 工具栏&#xff1a;fileToolBar addToolBar(tr("File")); 浮动窗&#xff1a;QDockWidget *dockWidget new QDockWidget(tr("Dock W…

Threejs之精灵模型Sprite

参考资料 精灵模型Sprite…Sprite模拟下雨、下雪 知识点 注&#xff1a;基于Three.jsv0.155.0 精灵模型Sprite精灵模型标注场景(贴图)Sprite模拟下雨、下雪 精灵模型Sprite Three.js的精灵模型Sprite和Threejs的网格模型Mesh一样都是模型对象&#xff0c;父类都是Object3…

【设计者模式】单例模式

文章目录 1、模式定义2、代码实现&#xff08;1&#xff09;双重判空加锁方式两次判空的作用&#xff1f;volatile 关键字的作用&#xff1f;构造函数私有&#xff1f; &#xff08;2&#xff09;静态内部类【推荐】&#xff08;3&#xff09;Kotlin中的单例模式lateinit 和 by…

Matlab 最小二乘插值(曲线拟合)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在多项式插值时,当数据点个数较多时,插值会导致多项式曲线阶数过高,带来不稳定因素。因此我们可以通过固定幂基函数的最高次数 m(m < n),来对我们要拟合的曲线进行降阶。之前的函数形式就可以变为: 二、实现…

spring Boot 报错RedisConnectionFailureException

错误描述&#xff1a; 错误重点&#xff1a;&#xff08;图片中蓝色区域&#xff09; Unable to connect to Redis; 无法连接到Redis Unable to connect to 127.0.0.1 无法连接到本地服务器 所以&#xff0c;错误是本地服务器没有连接上Redis所引起的 错误解析…

vue3中的父传子,子传父

在Vue 3中&#xff0c;父组件向子组件传递数据和子组件向父组件通信的方式与Vue 2非常相似&#xff0c;但Vue 3提供了Composition API和更多的响应式API&#xff0c;为组件间的通信提供了更多的可能性。下面是父传子和子传父的基本方法&#xff1a; ### 父组件传递数据给子组件…

【InternLM 实战营笔记】使用SDK接口上传模型到OpenXLab

概述 浦源内容平台-模型中心的Python SDK旨在为开发人员提供编程方式来管理和操作模型中心平台的功能&#xff0c;以便他们可以轻松地与模型中心进行交互和模型管理。通过Python SDK提供的推理接口&#xff0c;开发人员能够高效地调用不同的模型&#xff0c;实现模型应用的开发…

递归实现排列型枚举(c++题解)

题目描述 把 1~n 这 n(n<10) 个整数排成一行后随机打乱顺序&#xff0c;输出所有可能的次序。 输入格式 一个整数n。 输出格式 按照从小到大的顺序输出所有方案&#xff0c;每行1个。 首先&#xff0c;同一行相邻两个数用一个空格隔开。其次&#xff0c;对于两个不同的…

Linux——进程控制(二)进程等待

目录 前言 一、进程等待 二、如何进行进程等待 1.wait 2.waitpid 2.1第二个参数 2.2第三个参数 3. 等待多个进程 三、为什么不用全局变量获取子进程的退出信息 前言 前面我们花了大量的时间去学习进程的退出&#xff0c;退出并不难&#xff0c;但更深入的学习能为本…