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

机器学习DAY4续:梯度提升与 XGBoost (完)

本文将通过 XGBoost 框架来实现回归、分类和排序任务,帮助理解和掌握使用 XGBoost 解决实际问题的能力。我们将从基本的数据处理开始,逐步深入到模型训练、评估以及预测。最后,将模型进行保存和加载训练好的模型。

知识点
  • 回归任务
  • 分类任务
  • 排序任务
  • 模型保存
  • 模型加载
决策树回顾

回归前面的实验,我们已经学习了决策树,决策树是一种常见的监督学习模型,可以用于分类和回归任务。它通过将数据集分割为不同的分支,创建一棵树状结构来做出决策。每个分支代表了一个特征条件,最终叶子节点代表预测的结果。

梯度提升

梯度提升(Gradient Boosting)是一种集成机器学习方法,它通过组合多个性能一般的模型来增强整体的预测能力。这种方法的关键在于,每一个模型都尝试去纠正前一个模型的预测失误。具体操作时,梯度提升会利用损失函数的梯度信息来指导后续模型的调整方向,目的是逐步降低整体的预测误差。

工作原理:

  1. 初始模型
    • 在梯度提升中,初始模型通常是一个非常简单的模型,如一个决策树。这个初始模型也称为基学习器或弱学习器。
    • 初始模型不需要很复杂,因为它只是整个提升过程的起点。它的目的是提供一个基本的预测,即使这个预测并不十分准确。
  2. 残差拟合
    • 一旦有了初始模型的预测结果,算法接下来会计算每个训练样本的残差,即真实值与预测值之间的差异。
    • 这些残差反映了初始模型的不足之处,是算法接下来需要集中改进的部分。
  3. 迭代更新
    • 在每一轮迭代中,新的弱学习器都会被训练来拟合上一轮产生的残差。
    • 通过这种方式,每一轮都专注于纠正前一轮模型未能解决的错误。因此,每一轮的学习器都在尝试解决一个更难的问题,即减少残差。
    • 每个新的弱学习器通常是一个简单的模型,比如一个浅层决策树。
  4. 模型合并
    • 每个弱学习器产生的预测结果不是独立使用的,而是与之前的模型合并,通常是通过加权求和的方式。
    • 合并后的模型在每次迭代后都会更新,整合新学习器的预测结果,以此提高整体预测的精度。
    • 通过多次迭代,模型逐渐积累更多关于数据的知识,并不断减小训练误差。

这个过程不断重复,直到达到预定的迭代次数或模型的改进不再显著。在实际应用中,梯度提升算法可以高度自定义,包括如何生成新的学习器、如何合并它们的预测结果以及何时停止迭代等。这使得梯度提升在各种机器学习问题中都是一个非常强大和灵活的工具。

梯度提升决策树

梯度提升决策树(GBDT, Gradient Boosting Decision Trees)是将梯度提升与决策树结合的算法。在 GBDT 中,多个决策树被逐步训练,每棵树都试图拟合上一次的预测误差。GBDT 能够有效处理回归和分类任务,并且在实践中表现非常优异。

GBDT 的关键特点:

  • 每个树的目标是减少前一棵树的预测误差。
  • 通过梯度下降的方式来最小化损失函数。
  • 适用于各种类型的损失函数(如均方误差、对数损失等)。

GBDT 的主要缺点在于训练速度较慢,尤其在处理大规模数据时,由于模型的逐步训练和弱模型的迭代更新,这种方法计算复杂度较高。

分布式梯度提升

随着数据规模的增加,传统的 GBDT 在大规模数据集上的训练效率变得低下。为了提高效率,研究人员提出了分布式梯度提升。这种方法可以将数据分片,分配到多个计算节点上并行计算,从而加速模型的训练。分布式计算利用多核处理器和集群资源,使得模型能够在更大的数据集上进行训练,并且缩短训练时间。

然而,传统的分布式梯度提升在工程实现上仍然面临许多挑战,如如何合理分配计算任务、管理内存资源等。

XGBoost

 XGBoost(eXtreme Gradient Boosting)是对传统 GBDT 的极大改进和优化。XGBoost 在保持 GBDT 强大性能的基础上,针对模型训练进行了多种优化,特别是在处理大规模数据集时表现出色。

通过该库,我们可以执行回归、分类、排名以及用户自定义的预测任务。

XGBoost 库的使用非常简单,通过以下命令直接导入

import xgboost as xgb

在本文中,我们将学习如何使用 XGBoost 库来处理一个回归问题。回归任务的目标是预测一个连续的目标值,这里我们将使用糖尿病数据集,这是一个常用的机器学习数据集,用于预测一年后糖尿病患者的病情进展情况。 

数据准备

我们先从 sklearn.datasets 导入 load_diabetes 函数,它能帮助我们加载糖尿病数据集。

# 导入数据集
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_splitdiabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
# 数据维度
print("Data Shape:", X.shape, y.shape)

数据集包括 442 个病人的 10 个生理特征(年龄、性别、体重指数、血压等)和一年后的病情进展情况,这将作为我们的目标变量。

通过打印数据的维度和目标变量的一些基本统计特征:最小值、最大值、均值和标准差,我们可以更好地了解数据的分布和范围。

import numpy as np# 变量的统计特征
print("Min:", np.min(diabetes.target))
print("Max:", np.max(diabetes.target))
print("Mean:", np.mean(diabetes.target))
print("Standard Deviation:", np.std(diabetes.target))
数据预处理

数据预处理是机器学习中的一个重要步骤。我们首先将数据拆分为训练集和测试集,使用 80% 的数据进行训练,剩下 20% 的数据用于测试。这样可以帮助我们评估模型在未见过的数据上的表现。

# 将数据拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

虽然 XGBoost 对数据缩放的要求不像线性模型那样严格,但进行标准化处理——减去均值并除以标准差,仍然有助于优化算法的性能,特别是在涉及到梯度和步长选择的算法中。

from sklearn.preprocessing import StandardScaler# 标准化数据
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
模型训练

在模型训练步骤中,我们首先将数据转换为 XGBoost 的 DMatrix 格式,这是一种专为 XGBoost 优化的数据结构,可以使得模型运行更快。

# 将数据转换为 DMatrix 格式,这是 XGBoost 的高效数据格式
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

接下来,我们设定模型的参数,在这里,我们使用的是平方误差损失函数,这是回归任务中常用的损失函数。

# 设置参数
params = {'objective': 'reg:squarederror',  # 回归任务的目标函数'max_depth': 4,                   # 树的最大深度'eta': 0.1,                       # 学习率'subsample': 0.8,                 # 随机采样比例'colsample_bytree': 0.8           # 每棵树使用特征的比例
}

最后,使用 train 方法进行训练 100 轮。

# 训练模型
model = xgb.train(params, dtrain, num_boost_round=100)
模型评估

在模型评估阶段,我们将使用 MSE(Mean Squared Error,均方误差)来衡量模型的性能。MSE 测量的是预测值和实际值之间的差异的平方的平均值,是评估回归模型常用的指标。

from sklearn.metrics import mean_squared_error# 在测试集上进行预测
y_pred = model.predict(dtest)# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.4f}")

均方误差的值为 3061.4492,3061.4492≈55.333​061.4492≈55.33,小于前面展示的样本的标签的标准差,说明模型有学习到特征,不过这个误差并没有太小,说明算法还有进一步的优化空间,感兴趣的同学可以尝试使用特征工程与调参的技术,使得模型的性能进一步提升。

预测新数据

最后,我们将展示如何使用训练好的模型来进行新数据的预测。这里我们随机生成了一些新的特征数据,并使用模型来预测其对应的目标值。

new_data = np.random.randn(3, 10)
dnew = xgb.DMatrix(new_data)
new_pred = model.predict(dnew)
print(f"Predicted value: {new_pred}")

在这一部分,我们将通过一个分类任务来进一步探索 XGBoost 的使用。分类任务的目标是预测离散的标签或类别。我们将使用鸢尾花数据集(Iris dataset)进行演示,这是一个著名的多类分类问题数据集,包含 150 个样本,每个样本有 4 个特征和 3 种不同的类别标签。

数据准备

首先,我们加载鸢尾花数据集。这个数据集包含了 150 个样本,每个样本有 4 个特征:萼片长度、萼片宽度、花瓣长度、花瓣宽度,目标变量是花的种类,一共三种。这里我们通过打印数据的维度来确认数据的结构。

from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
print(X.shape, y.shape)
print(set(iris.target))
数据预处理

数据预处理步骤与回归任务类似,我们将数据集拆分为训练集和测试集,这里同样采用 80% 的数据用于训练,20% 的数据用于测试。这种拆分有助于我们在实际应用中评估模型的泛化能力。

# 将数据拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

尽管 XGBoost 是一个基于树的模型,通常对特征的缩放不敏感,但标准化处理可以有助于提高数值稳定性和优化性能。在这里,我们使用 StandardScaler 对特征进行标准化处理,确保每个特征均值为 0,方差为 1。

# 对数据进行标准化
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
模型训练

与回归任务相似,我们需要将数据转换为 XGBoost 的 DMatrix 格式。

# 转换为 DMatrix 格式
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

分类任务中,我们设置的目标函数是 multi:softmax,这意味着我们正在执行一个多类分类,其中 num_class 参数指定了类别的总数。

# 设置参数
params = {'objective': 'multi:softmax',  # 分类任务的目标函数'num_class': 3,                # 类别数量'max_depth': 4,'eta': 0.1,'subsample': 0.8,'colsample_bytree': 0.8
}# 训练模型
model = xgb.train(params, dtrain, num_boost_round=100)

 模型评估

在模型评估阶段,我们使用准确率来衡量模型的性能。准确率是正确预测的样本数与总样本数的比率。这是评估分类模型性能的直接和常用的方法。

from sklearn.metrics import accuracy_score# 在测试集上进行预测
y_pred = model.predict(dtest)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.4f}")
预测新数据

最后,我们随机生成了一些新的特征数据,并使用模型进行类别预测。

new_data = np.random.randn(3, 4)
dnew = xgb.DMatrix(new_data)
new_pred = model.predict(dnew)
print(f"Predicted class: {new_pred}")

在本节中,我们将探讨 XGBoost 在排序任务中的应用。排序任务通常用于搜索引擎优化和推荐系统,其中模型需要预测相关性或重要性的顺序。这种类型的任务是通过预测排名来优化搜索结果或推荐内容的相关性。

数据准备

首先,我们生成一个模拟的数据集,用于模拟搜索引擎的排序任务。这个数据集包含多个查询,每个查询关联一组文档。我们为每个文档生成随机特征,并为每个查询的文档分配一个随机的相关性评分。这些评分代表了文档相对于查询的相关性,评分越高,相关性越大。

# 生成查询组,每个查询有 10 个文档,每个文档有 2 个特征
n_queries = 5  # 查询数
n_docs_per_query = 10  # 每个查询的文档数量
n_features = 2  # 每个文档的特征数# 生成随机特征数据
X = np.random.rand(n_queries * n_docs_per_query, n_features)# 生成每个查询的排序标签(真实值)
# 假设标签为从 0 到 9 的排序分数,数值越高,表示文档在该查询中的相关性越高
y = np.hstack([np.random.permutation(n_docs_per_query) for _ in range(n_queries)])# 生成查询组的 ID(如:每个查询的一组文档 ID)
query_ids = np.repeat(np.arange(n_queries), n_docs_per_query)print(X.shape, y.shape, query_ids.shape)
数据预处理

在预处理阶段,我们将数据拆分为训练集和测试集。与前两个任务相同,我们使用 80% 的数据进行训练和 20% 的数据进行测试。此外,我们保留每个查询的 ID,这对于后续的评估非常重要,因为评估排序质量需要按查询组织数据。

# 将数据拆分为训练集和测试集
X_train, X_test, y_train, y_test, query_train, query_test = train_test_split(X, y, query_ids, test_size=0.2, random_state=42
)
模型训练

在排序任务中,我们需要特别注意数据的格式和处理。XGBoost 提供了专门的排序目标函数,这里我们使用 rank:pairwise,它通过优化成对的文档顺序来训练模型。我们将训练数据转换为 DMatrix 格式,并使用排序任务的特定参数配置模型。

# 转换为 DMatrix 格式
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)# 设置参数
params = {'objective': 'rank:pairwise',  # 排序任务的目标函数'max_depth': 4,'eta': 0.1,'subsample': 0.8,'colsample_bytree': 0.8
}# 训练模型
model = xgb.train(params, dtrain, num_boost_round=100)
模型评估

在模型评估阶段,我们使用 NDCG(Normalized Discounted Cumulative Gain,归一化折损累计增益)来衡量排序的质量。NDCG 是一种衡量排名质量的指标,它考虑了排名的位置折扣因子,使得排在前面的错误比排在后面的错误影响更大。我们计算每个查询的 NDCG 得分,并求得平均值来评估整个模型的性能。

from sklearn.metrics import ndcg_score# 在测试集上进行预测
y_pred = model.predict(dtest)# 将每个查询的真实标签和预测结果分开,计算 NDCG
ndcg_scores = []
for i in np.unique(query_test):# 对于每个查询,提取对应的真实标签和预测分数idx = np.where(query_test == i)y_true_query = np.array([y_test[idx]])  # 真实排序标签y_pred_query = np.array([y_pred[idx]])  # 预测的排序得分# 计算 NDCG 得分ndcg = ndcg_score(y_true_query, y_pred_query)ndcg_scores.append(ndcg)# 输出平均 NDCG 得分
avg_ndcg = np.mean(ndcg_scores)
print(f"Average NDCG Score: {avg_ndcg}")

NDCG 的取值范围为 0 到 1,值越接近 1,说明模型的排序效果越好。

预测新数据

最后,我们展示如何使用训练好的模型来预测新的数据集的排序。这里我们生成一些新的随机特征数据,使用模型来预测它们在特定查询下的相关性评分。

new_data = np.random.rand(3, 2)
dnew = xgb.DMatrix(new_data)
new_pred = model.predict(dnew)
print(f"Predicted rank score: {new_pred}")

模型存储与加载 

在实际应用中,模型训练后的存储与再次加载是一个重要环节,因为它允许我们在不同的环境中重复使用已经训练好的模型,而无需重新训练。

模型保存

在模型训练完成后,我们可以将其保存到一个文件中。这里我们使用 XGBoost 的 save_model 方法,将训练好的模型保存为一个 JSON 格式的文件。

# 保存模型到文件
model.save_model('xgboost_model.json')
print("Model saved to 'xgboost_model.json'")

JSON 是一种轻量级的数据交换格式,使得模型文件既易于存储,也便于在不同的平台之间进行共享和迁移。

保存成功后,可以点开 xgboost_model.json 文件,里面存储了 XGBoost 的参数名称、结构,以及具体的参数值。

模型加载

当我们需要使用保存的模型进行预测或进一步分析时,可以通过 XGBoost 的 load_model 方法来加载模型。这种方式非常方便,特别是在生产环境中,我们通常需要快速加载并使用模型。

# 从文件加载模型
loaded_model = xgb.Booster()
loaded_model.load_model('xgboost_model.json')
print("Model loaded from 'xgboost_model.json'")

在本文中,我们深入探讨了 XGBoost 框架,并应用其处理多种机器学习任务,包括回归、分类和排序。通过一系列实践,我们不仅学习了 XGBoost 的基本使用,也了解了其在不同类型任务中的强大能力。

本实验环境为单机环境,未能充分展示 XGBoost 的强大分布式处理能力。建议在有条件的环境中,如集群环境下,继续探索和学习 XGBoost 的分布式计算特性。

相关文章:

机器学习DAY4续:梯度提升与 XGBoost (完)

本文将通过 XGBoost 框架来实现回归、分类和排序任务,帮助理解和掌握使用 XGBoost 解决实际问题的能力。我们将从基本的数据处理开始,逐步深入到模型训练、评估以及预测。最后,将模型进行保存和加载训练好的模型。 知识点 回归任务分类任务…...

Maven 测试和单元测试介绍

一、测试介绍 二、单元测试 1&#xff09;介绍 2&#xff09;快速入门 添加依赖 <dependencies><!-- junit依赖 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9…...

LeetCode7. 整数反转

难度&#xff1a;中等 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示…...

Java编程题_面向对象和常用API01_B级

Java编程题_面向对象和常用API01_B级 第1题 面向对象、异常、集合、IO 题干: 请编写程序&#xff0c;完成键盘录入学生信息&#xff0c;并计算总分将学生信息与总分一同写入文本文件 需求&#xff1a;键盘录入3个学生信息(姓名,语文成绩,数学成绩) 求出每个学生的总分 ,并…...

WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征

目录 定义 1.前端验证 2.MIME验证 3.htaccess文件和.user. ini 4.对内容进行了过滤&#xff0c;做了内容检测 5.[ ]符号过滤 6.内容检测php [] {} ; 7.()也被过滤了 8.反引号也被过滤 9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件&#xff08;如木马…...

ubuntu20.04 调试bcache源码

搭建单步调试bcache的环境&#xff0c;/dev/sdb作为backing dev&#xff0c; /dev/sdc作为cache dev。 一、宿主机环境 1&#xff09;安装ubuntu 20.04 &#xff1a; 参考ubuntu20.04 搭建kernel调试环境第一篇--安装系统_ubuntu kernel-CSDN博客安装&#xff0c;其中的第六…...

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)(四)

实战训练1—最大差值 问题描述&#xff1a; 输入n个非负整数&#xff0c;找出这个n整数的最大值与最小值&#xff0c;并求最大值和最小值的差值。 输入格式&#xff1a; 共两行&#xff0c;第一行为整数的个数 n&#xff08;1≤n≤1000)。第二行为n个整数的值&#xff08;整…...

基于深度学习(HyperLPR3框架)的中文车牌识别系统-python程序开发测试

本篇内容为python开发&#xff0c;通过一个python程序&#xff0c;测试搭建的开发环境&#xff0c;读入一张带有车牌号的图片&#xff0c;成功识别出车牌号。 1、通过PyCharm新建一个工程&#xff0c;如&#xff1a;PlateRecognition&#xff0c;配置虚拟环境。 2、在工程中新…...

【SpringMVC】拦截器

拦截器&#xff08;Interceptor&#xff09;是一种用于动态拦截方法调用的机制。在 Spring MVC 中&#xff0c;拦截器能够动态地拦截控制器方法的执行过程。以下是请求发送与接收的基本流程&#xff1a; 当浏览器发出请求时&#xff0c;请求首先到达 Tomcat 服务器。Tomcat 根…...

离线的方式:往Maven的本地仓库里安装依赖

jar文件及源码的绝对路径&#xff0c;gav坐标&#xff0c;打包方式&#xff0c;Maven本地仓库的路径 mvn install:install-file ^-DfileD:\hello-spring-boot-starter-1.0-SNAPSHOT.jar ^-DsourcesD:\hello-spring-boot-starter-1.0-SNAPSHOT-sources.jar ^-DgroupIdcom.examp…...

短视频矩阵系统后端源码搭建实战与技术详解,支持OEM

一、引言 随着短视频行业的蓬勃发展&#xff0c;短视频矩阵系统成为了众多企业和创作者进行多平台内容运营的有力工具。后端作为整个系统的核心支撑&#xff0c;负责处理复杂的业务逻辑、数据存储与交互&#xff0c;其搭建的质量直接影响着系统的性能、稳定性和可扩展性。本文将…...

ArcGIS Pro地形图四至角图经纬度标注与格网标注

今天来看看ArcGIS Pro 如何在地形图上设置四至角点的经纬度。方里网标注。如下图的地形图左下角经纬度标注。 如下图方里网的标注 如下为本期要介绍的例图&#xff0c;如下&#xff1a; 图片可点击放大 接下来我们来介绍一下 推荐学习&#xff1a;GIS入门模型构建器Arcpy批量…...

鸿蒙Next状态管理V2 - @Once初始化用法总结

一、概述 Once装饰器用于实现变量仅在初始化时同步一次外部传入值&#xff0c;后续数据源更改时不会将修改同步给子组件。其必须搭配Param使用&#xff0c;且不影响Param的观测能力&#xff0c;仅拦截数据源变化&#xff0c;与Param装饰变量的先后顺序不影响实际功能&#xff…...

全新免押租赁系统助力商品流通高效安全

内容概要 全新免押租赁系统的推出&#xff0c;可以说是一场商品流通领域的小革命。想象一下&#xff0c;不再为押金烦恼&#xff0c;用户只需通过一个简单的信用评估&#xff0c;就能快速租到所需商品&#xff0c;这种体验简直令人惊喜&#xff01;这个系统利用代扣支付技术&a…...

VUE前端实现防抖节流 Lodash

方法一&#xff1a;采用Lodash工具库 Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。 &#xff08;1&#xff09;采用终端导入Lodash库 $ npm i -g npm $ npm i --save lodash &#xff08;2&#xff09;应用 示例&#xff1a;搜索框输入防抖 在这个示例…...

Redisson 框架详解

目录 一.为什么要使用分布式锁&#xff1f; 二.Redisson 的基本使用&#xff1a; 1.添加 Redisson 依赖&#xff1a; 2.在 application.yml 配置 Redis&#xff1a; 3. 创建 Redisson 客户端&#xff1a; &#xff08;1&#xff09;单节点模式&#xff1a; &#xff08;…...

WebSocket 入门详解

开发领域&#xff1a;前端开发 | AI 应用 | Web3D | 元宇宙 技术栈&#xff1a;JavaScript、React、Three.js、WebGL、Go 经验经验&#xff1a;6年 前端开发经验&#xff0c;专注于图形渲染和AI技术 开源项目&#xff1a;智简未来 晓智元宇宙、数字孪生引擎 大家好&#xff01;…...

chinahrt 题库

只针对 https://ouc-sz.chinahrt.com/center/MyExam import requests import time import random import pandas as pd from openpyxl import load_workbookexcel_file rC:\Users\N3verL4nd\Desktop\exam_answers.xlsx# 定义请求头&#xff0c;包含 Authorization headers {…...

uniapp通过v-if进行判断时,会出现闪屏?【已解决】

1.问题&#xff1a;按钮切换时&#xff0c;通过v-if来判断&#xff0c;会出现闪烁情况&#xff0c;影响用户体验 2.v-if 闪烁问题可能的原因 ‌条件切换频繁‌&#xff1a;如果 v-if 指令的条件在短时间内频繁切换&#xff0c;会导致元素不断被销毁和重新创建&#xff0c;从而…...

jmeter设置tps、响应时间监测时间间隔

jmeter设置tps、响应时间监测时间间隔 思路&#xff1a; 1、设置tps和响应时间插件的采集时间间隔&#xff0c;然后运行jmeter脚本&#xff1b; 2、先按默认配置跑出jtl文件保存下来&#xff0c;再添加tps和响应时间插件&#xff0c;设置采集时间间隔后&#xff0c;导入jtl文件…...

Android Notification 问题:Invalid notification (no valid small icon)

问题描述与处理策略 1、问题描述 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.notifications/com.my.notifications.MainActivity}: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(chan…...

Kotlin 协程基础知识总结四 —— Flow

异步流 Flow 主要内容&#xff1a; 认识&#xff1a;特性、构建器与上下文、启动、取消与取消检测特性、缓冲操作符&#xff1a;过渡操作符、末端操作符、组合、扁平异常&#xff1a;异常处理、完成 1、认识 1.1 如何异步返回多个值 挂起函数可以异步返回单个值&#xff0c…...

Ubuntu24.04安装NVIDIA驱动及工具包

Ubuntu24.04安装NVIDIA驱动及工具包 安装nvidia显卡驱动安装cuda驱动安装cuDNN安装Anaconda 安装nvidia显卡驱动 NVIDIA 驱动程序&#xff08;NVIDIA Driver&#xff09;是专为 NVIDIA 图形处理单元&#xff08;GPU&#xff09;设计的软件&#xff0c;它充当操作系统与硬件之间…...

雷电模拟器安装LSPosed

雷电模拟器最新版支持LSPosed。记录一下安装过程 首先到官网下载并安装最新版&#xff0c;我安装的时候最新版是9.1.34.0&#xff0c;64位 然后开启root和系统文件读写 然后下载magisk-delta-6并安装 ,这个是吾爱破解论坛提供的&#xff0c;号称适配安卓7以上所有机型&#x…...

基于深度学习(HyperLPR3框架)的中文车牌识别系统-搭建开发环境

本篇内容为搭建开发环境。包括&#xff1a;python开发环境&#xff0c;Qt/C开发环境&#xff0c;以及用到的各个库的安装和配置。 一、Python开发环境搭建与配置 1、下载并安装Anaconda 我没有用最新的版本&#xff0c;安装的是 Anaconda3-2021.05-Windows-x86_64.exe&#…...

TCP 为什么采用三次握手和四次挥手以及 TCP 和 UDP 的区别

1. TCP 为什么采用三次握手和四次挥手 采用三次握手的原因&#xff1a; 确认双方的收发能力。第一次握手&#xff0c;客户端发送 SYN 报文&#xff0c;告诉服务器自身具备发送数据的能力&#xff0c;第二次握手&#xff0c;服务器回应 SYN ACK 报文&#xff0c;表名自己既能…...

Apriori关联规则算法 HNUST【数据分析技术】(2025)

1.理论知识 Apriori是一种常用的数据关联规则挖掘方法&#xff0c;它可以用来找出数据集中频繁出现的数据集合。该算法第一次实现在大数据集上的可行的关联规则提取&#xff0c;其核心思想是通过连接产生候选项及其支持度&#xff0c;然后通过剪枝生成频繁项集。 Apriori算法的…...

Sqoop的使用

每个人的生活都是一个世界&#xff0c;即使最平凡的人也要为他那个世界的存在而战斗。 ——《平凡的世界》 目录 一、sqoop简介 1.1 导入流程 1.2 导出流程 二、使用sqoop 2.1 sqoop的常用参数 2.2 连接参数列表 2.3 操作hive表参数 2.4 其它参数 三、sqoop应用 - 导入…...

华为 IPD,究竟有什么特点?(一)

关注作者 &#xff08;一&#xff09;华为版 IPD 特点一&#xff1a;一定要让研发转身为作战 部队 冲到前台的研发&#xff0c;应主动拉通公司上下游&#xff0c;向前抓需求&#xff0c;向后支撑可制造性、可 服务性&#xff0c;并推动制造、服务的改进。 1&#xff09;研发从…...

Go快速开发框架2.6.0版本更新内容快速了解

GoFly企业版框架2.6.0版本更新内容较多&#xff0c;为了大家能够快速了解&#xff0c;本文将把更新内容列出详细讲解。本次更新一段时间以来大伙反馈的问题&#xff0c;并且升级后台安全认证机制&#xff0c;增加了RBAC权限管理及系统操作日志等提升后台数据安全性。 更新明细…...

C++的第一个程序

前言 在学习c之前&#xff0c;你一定还记得c语言的第一个程序 当时刚刚开始进行语言学习 因此告诉到&#xff0c;仅仅需要记住就可以 #include <stdio.h>int main(){printf("Hello World");return 0; }而对于c中的第一个程序&#xff0c;似乎有所变化 C的…...

《机器学习》线性回归模型实现

目录 一、一元线性回归模型 1、数据 2、代码 3、结果 二、多元线性回归模型 1、数据 2、代码 3、结果 一、一元线性回归模型 1、数据 2、代码 # 导入所需的库 import pandas as pd # 用于数据处理和分析 from matplotlib import pyplot as plt # 用于数据可视化 fr…...

蓝桥杯速成教程{三}(adc,i2c,uart)

目录 一、adc 原理图​编辑引脚配置 Adc通道使能配置 实例测试 ​编辑效果显示 案例程序 badc 按键相关函数 测量频率占空比 main 按键的过程 显示界面的过程 二、IIC通信-eeprom 原理图AT24C02 引脚配置 不可用状态&#xff0c;用的软件IIC 官方库移植 At24c02手册 ​编辑…...

【Agent】Chatbot、Copilot与Agent如何帮助我们的提升效率?

人工智能&#xff08;AI&#xff09;技术的迅猛发展正在深刻改变我们的生活和工作方式。你是否曾想过&#xff0c;未来的工作场景会是什么样子&#xff1f;AI的崛起不仅仅是科技的进步&#xff0c;更是我们生活方式的革命。今天&#xff0c;我们将深入探讨三种主要的AI能力&…...

PostgreSQL 数据库连接

title: PostgreSQL 数据库连接 date: 2024/12/29 updated: 2024/12/29 author: cmdragon excerpt: PostgreSQL是一款功能强大的开源关系数据库管理系统,在现代应用中广泛应用于数据存储和管理。连接到数据库是与PostgreSQL进行交互的第一步,这一过程涉及到多个方面,包括连…...

C++ 设计模式:中介者模式(Mediator Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 门面模式 链接&#xff1a;C 设计模式 - 代理模式 链接&#xff1a;C 设计模式 - 适配器 中介者模式&#xff08;Mediator Pattern&#xff09;是行为型设计模式之一&#xff0c;它的主要目的是通过一个中介者对象来…...

计算机网络期末复习

目录 第一章-概述 第二章-物理层 第三章-数据链路层 第四章-网络层 第五章-运输层 第六章-应用层 试卷 郑州轻工业大学--计算机网络&#xff08;谢希仁-第八版&#xff09;--期末复习重点题型及试卷 如果有答案错乱或者不对的地方请告知一下&#xff0c;感谢&#xff0…...

JUC并发工具---线程协作

信号量能被FixedThreadPool代替吗 Semaphore信号量 控制需要限制访问量的资源&#xff0c;没有获取到信号量的线程会被阻塞 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore;public class Sem…...

SkyWalking java-agent 是如何工作的,自己实现一个监控sql执行耗时的agent

Apache SkyWalking 是一个开源的应用性能监控 (APM) 工具&#xff0c;支持分布式系统的追踪、监控和诊断。SkyWalking Agent 是其中的一个重要组件&#xff0c;用于在服务端应用中收集性能数据和追踪信息&#xff0c;并将其发送到 SkyWalking 后端服务器进行处理和展示。 SkyW…...

Linux 常用命令 - pwd 【显示当前工作目录】

简介 pwd 命令来源于 “print working directory”&#xff0c;即“打印当前工作目录”。这个命令的最主要功能就是显示当前用户所在的完整目录路径。在实际工作中我们经常会频繁在各个目录下进行切换&#xff0c;为了快速获取当前我们所在的目录&#xff0c;可以使用该命令进…...

如何在 Ubuntu 上安装 PyTorch

简介 PyTorch 因其易用性、动态计算图和高效性而日益流行&#xff0c;成为实现深度学习模型的首选。如果你想探索这个工具并学习如何在 Ubuntu 上安装 PyTorch&#xff0c;本指南将对你有所帮助&#xff01; 在本教程中&#xff0c;我们将引导你完成在 Ubuntu 系统上使用 Pip…...

redis优化

在高并发、高性能、高可用系统中&#xff0c;Redis 的优化至关重要。以下是一些在面试中可以详细说明的 Redis 优化策略&#xff0c;以及具体的实践经验和技术亮点&#xff1a; 1. 数据模型与结构设计优化 使用合适的数据结构 &#xff1a;根据业务需求选择合适的 Redis 数据结…...

QT的信号和槽页面的应用

完善对话框&#xff0c;点击登录弹出对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&…...

Jmeter自学【8】- 使用JMeter模拟设备通过MQTT发送数据

今天使用jmeter推送数据到MQTT&#xff0c;给大家分享一下操作流程。 一、安装JMeter 参考文档&#xff1a;Jmeter自学【1】- Jmeter安装、配置 二、安装MQTT插件 1、下载插件 我的Jmeter版本是5.6.3&#xff0c;用到的插件是&#xff1a;mqtt-xmeter-2.0.2-jar-with-depe…...

深度学习任务中的 `ulimit` 设置优化指南

深度学习任务中的 ulimit 设置优化指南 1. 什么是 ulimit&#xff1f;2. 深度学习任务中的关键 ulimit 设置2.1 max locked memory&#xff08;-l&#xff09;2.2 open files&#xff08;-n&#xff09;2.3 core file size&#xff08;-c&#xff09;2.4 stack size&#xff08…...

C++(Qt)软件调试---VS性能探查器(27)

文章目录 [toc]1 概述&#x1f41c;2 VS工具说明2.1 使用场景2.2 工具适用项目 3 CPU使用率4 内存分析4.1 调试模式下分析内存4.2 非调试模式下分析内存 5 相关地址&#x1f410; 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;C软件调试 &#x1f448; 1 概述…...

Spring源码_05_IOC容器启动细节

前面几章&#xff0c;大致讲了Spring的IOC容器的大致过程和原理&#xff0c;以及重要的容器和beanFactory的继承关系&#xff0c;为后续这些细节挖掘提供一点理解基础。掌握总体脉络是必要的&#xff0c;接下来的每一章都是从总体脉络中&#xff0c; 去研究之前没看的一些重要…...

【c语言】简单的c程序设计

内存 1byte8bit 1KB1024byte 1MB1024byte 1G1024MB 1T1024G 变量 变量可以由数字、字母和下划线组成且不能以数字开头任何不满足条件的变量都是非法变量&#xff0c;如含有特殊字符的变量等变量不能含有空白字符&#xff0c;如空格、换行符等变量区分大小写变量不能是c语言…...

k8s dashboard可视化操作界面的安装

一、官方安装方法 根据官网的安装配置可以选择如下安装&#xff1a; kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml 二、添加阿里云加速进行安装 #修改recommended.yaml拉取镜像的链接 vim recommended.yam…...

鸿蒙项目云捐助第三十一讲云捐助项目云前台显示商品列表

鸿蒙项目云捐助第三十一讲云捐助项目云前台显示商品列表 前面完成了云数据库后台的商品批量添加&#xff0c;这里需要把数据放在分类导航页面中显示。 一、云前台显示商品列表 这里需要把商品列表显示在MyNavSliderBar的组件中,MyNavSliderBar组件是通过首页路由实现的,在项…...