当前位置: 首页 > news >正文

机器学习校招面经二

快手 机器学习算法

一、AUC(Area Under the ROC Curve)怎么计算?AUC接近1可能的原因是什么?

见【搜广推校招面经四】
AUC 是评估分类模型性能的重要指标,用于衡量模型在不同阈值下区分正负样本的能力。它是 ROC 曲线(Receiver Operating Characteristic Curve)下的面积。

1.1. ROC 曲线的坐标

ROC 曲线以 真正例率(True Positive Rate, TPR) 为纵轴,假正例率(False Positive Rate, FPR) 为横轴。

1.1.1. 真正例率(TPR) = 召回率(Recall) = 灵敏度(Sensitivity)

= T P T P + F N = T P P = \frac{TP}{TP + FN} = \frac{TP}{P} =TP+FNTP=PTP
其中:

  • T P TP TP:真正例(True Positives),即模型正确预测的正样本数。
  • F N FN FN:假反例(False Negatives),即模型错误预测的负样本数。

2.2 假正例率(FPR)

F P R = F P F P + T N = F P N FPR = \frac{FP}{FP + TN} = \frac{FP}{N} FPR=FP+TNFP=NFP
其中:

  • F P FP FP:假正例(False Positives),即模型错误预测的正样本数。
  • T N TN TN:真反例(True Negatives),即模型正确预测的负样本数。

1.2. AUC 的计算公式

AUC 是 ROC 曲线下的面积,可以通过以下方法计算:

1.2.1. 积分法

A U C = ∫ 0 1 T P R ( F P R ) d F P R AUC = \int_{0}^{1} TPR(FPR) \, dFPR AUC=01TPR(FPR)dFPR
即对 ROC 曲线下的面积进行积分。

1.2.2. 排序法(更常用)

AUC 可以通过对样本的预测概率进行排序计算:
A U C = ∑ i = 1 N + ∑ j = 1 N − I ( p i > p j ) N + × N − AUC = \frac{\sum_{i=1}^{N_+} \sum_{j=1}^{N_-} \mathbb{I}(p_i > p_j)}{N_+ \times N_-} AUC=N+×Ni=1N+j=1NI(pi>pj)
其中:

  • ( N_+ ):正样本的数量。
  • ( N_- ):负样本的数量。
  • ( p_i ):第 ( i ) 个正样本的预测概率。
  • ( p_j ):第 ( j ) 个负样本的预测概率。
  • I ( p i > p j ) \mathbb{I}(p_i > p_j) I(pi>pj):指示函数,当 p i > p j p_i > p_j pi>pj 时为 1,否则为 0。

1.3. 手撕AUC

def cal_auc_1(label, pred):numerator = 0    # 分子denominator = 0  # 分母for i in range(len(label) - 1):for j in range(i, len(label)):if label[i] != label[j]:denominator += 1# 统计所有正负样本对中,模型把相对位置排序正确的数量r = (label[i] - label[j]) * (pred[i] - pred[j])if r > 0:numerator += 1elif r == 0:numerator += 0.5return numerator / denominator

二、LR逻辑回归的损失函数,使用熟悉的语言,写出交叉熵的伪代码

首先明确,逻辑回归的损失函数是交叉熵损失函数,也被称为对数损失函数(log loss)。
手撕:见【搜广推校招面经二十三】

import numpy as npclass LogisticRegression:def __init__(self, learning_rate=0.01, num_iterations=1000):self.learning_rate = learning_rate  # 学习率self.num_iterations = num_iterations  # 迭代次数self.theta = None  # 模型参数def sigmoid(self, z):"""计算 Sigmoid 函数"""return 1 / (1 + np.exp(-z))def compute_cost(self, X, y):"""计算交叉熵损失函数"""m = len(y)h = self.sigmoid(np.dot(X, self.theta))cost = - (1/m) * np.sum(y * np.log(h) + (1 - y) * np.log(1 - h))return costdef gradient_descent(self, X, y):"""梯度下降优化"""m = len(y)for i in range(self.num_iterations):h = self.sigmoid(np.dot(X, self.theta))  # 计算预测值gradient = (1/m) * np.dot(X.T, (h - y))  # 计算梯度self.theta -= self.learning_rate * gradient  # 更新参数if i % 100 == 0:  # 每100次输出一次损失值cost = self.compute_cost(X, y)print(f"Iteration {i}, Cost: {cost}")def fit(self, X, y):"""训练模型"""m, n = X.shapeself.theta = np.zeros(n)  # 初始化参数self.gradient_descent(X, y)def predict(self, X):"""预测新样本的类别"""probabilities = self.sigmoid(np.dot(X, self.theta))return probabilities >= 0.5  # 预测类别:如果大于等于 0.5,分类为 1,否则为 0

三、平均绝对误差(MAE)与均方误差(MSE)的理解及区别

见【搜广推实习面经四】

3.1. 平均绝对误差(MAE)

定义

MAE表示预测值和真实值之间绝对误差的平均值,是一个非负值,MAE越小表示模型越好。其公式如下:
M A E = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ MAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| MAE=n1i=1nyiy^i
其中 y i y_i yi 是真实值, y ^ i \hat{y}_i y^i 是预测值, n n n 是样本数量。

特点

  • 直观性: MAE以原始数据单位表示,因此更直观易懂。例如,在房价预测问题中,MAE可以直接解释为预测价格与实际价格之间的平均偏差。
  • 鲁棒性: MAE对异常值不敏感,因为它使用的是绝对值而不是平方值来计算误差。这意味着即使存在极端值,其影响也不会被放大。

3.2. 均方误差(MSE)

定义

MSE是预测值和真实值之间误差平方的平均值。其公式如下:
M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2

特点

  • 敏感性: MSE对较大的误差更为敏感,因为误差被平方后,较大的误差会被进一步放大。这使得MSE非常适合用于检测异常值或重要的偏离情况。
  • 可微性: MSE是一个平滑可微的函数,便于进行数学运算和优化算法的应用。

3.3. 区别

3.3.1. 误差处理方式

  • MAE采用绝对值处理误差,所有个体差异在平均值上的权重都相等。
  • MSE则通过对误差进行平方处理,给予大误差更多的权重,从而更加突出大误差的影响。

3.3.2. 对异常值的反应

  • MAE由于其线性性质,对异常值具有较好的鲁棒性。
  • 相比之下,MSE由于其平方特性,对异常值更加敏感。

3.3.3. 优化过程中的表现

  • 在训练过程中,MAE可能导致更新梯度始终相同的问题,即使对于很小的损失值,梯度也可能较大,不利于模型的学习。
  • 而MSE在这种情况下的表现较好,即便使用固定的学习率也可以有效收敛,因为其梯度随损失增大而增大,损失趋于0时则会减小。

3.3.4. 应用场景

  • 如果异常点代表了商业上重要的异常情况,并且需要被检测出来,则应选用MSE作为损失函数。
  • 若仅把异常值当作受损数据,则应选用MAE作为损失函数。

相关文章:

机器学习校招面经二

快手 机器学习算法 一、AUC(Area Under the ROC Curve)怎么计算?AUC接近1可能的原因是什么? 见【搜广推校招面经四】 AUC 是评估分类模型性能的重要指标,用于衡量模型在不同阈值下区分正负样本的能力。它是 ROC 曲线…...

Spring Boot如何利用Twilio Verify 发送验证码短信?

Twilio提供了一个名为 Twilio Verify 的服务,专门用于处理验证码的发送和验证。这是一个更为简化和安全的解决方案,适合需要用户身份验证的应用。 使用Twilio Verify服务的步骤 以下是如何在Spring Boot中集成Twilio Verify服务的步骤: 1.…...

毕业项目推荐:基于yolov8/yolo11的苹果叶片病害检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...

Linux的用户与权限--第二天

认知root用户(超级管理员) root用户用于最大的系统操作权限 普通用户的权限,一般在HOME目录内部不受限制 su与exit命令 su命令: su [-] 用户名 -符号是可选的,表示切换用户后加载环境变量 参数为用户名&#xff0c…...

【Flink银行反欺诈系统设计方案】1.短时间内多次大额交易场景的flink与cep的实现

【flink应用系列】1.Flink银行反欺诈系统设计方案 1. 经典案例:短时间内多次大额交易1.1 场景描述1.2 风险判定逻辑 2. 使用Flink实现2.1 实现思路2.2 代码实现2.3 使用Flink流处理 3. 使用Flink CEP实现3.1 实现思路3.2 代码实现 4. 总结 1. 经典案例:短…...

HashMap的table数组何时初始化?默认容量和扩容阈值是多少?

HashMap 的 table 数组何时初始化? 答案: table 数组在第一次调用 put() 方法时初始化。 为什么? HashMap 为了节省内存,采用了“懒加载”机制。即使用 new HashMap() 创建对象时,只是计算了参数(如容量、…...

基于CURL命令封装的JAVA通用HTTP工具

文章目录 一、简要概述二、封装过程1. 引入依赖2. 定义脚本执行类 三、单元测试四、其他资源 一、简要概述 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具&…...

docker学习笔记(1)从安装docker到使用Portainer部署容器

docker学习笔记第一课 先交代背景 docker宿主机系统:阿里云ubuntu22.04 开发机系统:win11 docker镜像仓库:阿里云,此阿里云与宿主机系统没有关系,是阿里云提供的一个免费的docker仓库 代码托管平台:github&…...

数据集/API 笔记:新加坡PSI(空气污染指数)API

data.gov.sg 数据范围:2016年2月 - 2025年3月 1 获取API方式 curl --request GET \--url https://api-open.data.gov.sg/v2/real-time/api/psi 2 返回数据 API 的数据结构可以分为 3 大部分: 区域元数据(regionMetadata) →…...

计算机网络数据传输探秘:包裹如何在数字世界旅行?

计算机网络数据传输探秘:包裹如何在数字世界旅行? 一、从快递网络看数据传输本质 想象你网购了一件商品: 打包:商家用纸箱包装,贴上地址标签(数据封装)运输:包裹经过网点→分拣中心→运输车(网络节点与链路)签收:快递员核对信息后交付(数据校验与接收)数据的网络…...

笔记:代码随想录算法训练营day36:LeetCode1049. 最后一块石头的重量 II、494. 目标和、474.一和零

学习资料:代码随想录 1049.最后一块石头的重量II 力扣题目链接 思路:如何讲该问题转化为背包问题:还是对半分去碰,对半分去碰碰剩下的就是最小的。然后背包容量就是一半儿,物品重量等于物品价值等于stones[i] 和上…...

Bitmap -> Bitmap安卓设备上的显示和内存

Android 屏幕显示与 Bitmap 内存详解 前言 在 Android 开发中,理解屏幕显示单位和 Bitmap 内存占用是构建高效应用的基础。本文将详细介绍相关概念、计算公式及单位转换,并通过实例分析 Bitmap 在内存中的表现。 一、屏幕显示单位基础 1.1 基本单位及…...

QT study DAY2

作业 代码 Widget.h class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();void save_data(const QString& filename,const QString& data); private slots:void on_lineEdit_textChanged(); //账户栏void on_l…...

QT-自定义参数设计框架软件

QT-自定义参数设计框架软件 Chapter1 QT-自定义参数设计框架软件前言一、演示效果二、使用步骤1.应用进行参数注册2.数据库操作单例对象3.参数操作单例对象 三、下载链接 Chapter2 Qt中管理配置参数(QSettings、单例模式)1 前言2 QSettings类ini文件写in…...

VUE集成Live2d

VUE集成Live2d 目前基于大模型,可以实现一个桌面的3D动画小人,个人猜测可以简介这个项目进行实现 1-参考网址 试了很多项目,只有这个项目直观的把问题说清楚了 Live2D Vue3技术应用:https://blog.csdn.net/hh1233321/article/details/1406947…...

【CPP面经】科大讯飞 腾讯后端开发面经分享

文章目录 C 面试问题整理基础问题简答1. 内存对齐2. this 指针3. 在成员函数中删除 this4. 引用占用内存吗?5. C 越界访问场景6. 进程通信方式7. 无锁队列实现8. ping 在哪一层?实现原理?9. HTTPS 流程10. GDB 使用及 CPU 高使用定位11. 智能…...

el-card 结合 el-descriptions 作为信息展示

记录下el-card 组合 el-descriptions 实现动态展示信息 文章结构 实现效果1. el-descriptions 组件使用1.1 结合v-for实现列表渲染1.2 解析 2. 自定义 el-descriptions 样式2.1 修改背景色、字体颜色2.2 调整字体大小2.3 解析 3. el-card 结合 el-descriptions 作为信息展示3.…...

GaussDB自带诊断工具实战指南

一、引言 GaussDB是一种分布式的关系型数据库。在数据库运维中,快速定位性能瓶颈、诊断故障是保障业务连续性的关键。GaussDB内置了多种诊断工具,结合日志分析、执行计划解析和实时监控功能,帮助开发者与运维人员高效解决问题。本文深入讲解…...

LeetCode 链表章节

简单 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2…...

SSL证书和HTTPS:全面解析它们的功能与重要性

每当我们在互联网上输入个人信息、进行在线交易时,背后是否有一个安全的保障?这时,SSL证书和HTTPS便扮演了至关重要的角色。本文将全面分析SSL证书和HTTPS的含义、功能、重要性以及它们在网络安全中的作用。 一、SSL证书的定义与基本概念 S…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

JVM垃圾回收机制全解析

Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...