【Python数据挖掘实战案例】机器学习LightGBM算法原理、特点、应用---基于鸢尾花iris数据集分类实战

一、引言

1、简要介绍数据挖掘的重要性和应用

在数字化时代,数据已经成为企业和社会决策的重要依据。数据挖掘作为一门交叉学科,结合了统计学、机器学习、数据库技术和可视化等多个领域的知识,旨在从海量数据中提取有价值的信息,以支持商业决策、科学研究和社会治理。通过数据挖掘,企业可以发现市场趋势、优化产品设计、提升用户体验;科研人员可以揭示自然规律、推动学科发展;政府部门可以优化资源配置、提高治理效率。因此,数据挖掘在当今社会具有极其重要的地位和应用价值。

2、引出LightGBM算法及其在数据挖掘中的地位

在数据挖掘的众多算法中,LightGBM(Light Gradient Boosting Machine)凭借其高效、准确和灵活的特点,成为了近年来备受关注的机器学习算法之一。LightGBM是一种基于梯度提升框架的决策树算法,它通过优化数据结构和算法设计,实现了在保持高精度的同时,显著提升了训练速度和内存效率。这使得LightGBM在处理大规模数据集和复杂模型时具有显著优势,成为数据挖掘领域的重要工具之一。

3、简述鸢尾花iris数据集及其在分类问题中的应用

鸢尾花iris数据集是数据挖掘和机器学习领域的一个经典数据集,它包含了150个样本,每个样本有四个特征(花萼长度、花萼宽度、花瓣长度和花瓣宽度)和一个标签(鸢尾花的种类)。这个数据集通常用于分类问题的学习和实践,因为它具有简单明了的数据结构和明确的分类目标。在本文中,我们将使用鸢尾花iris数据集来展示LightGBM算法在分类问题中的应用和效果。

二、LightGBM算法背景

1、算法的历史与发展

LightGBM算法是在梯度提升框架的基础上发展而来的。梯度提升是一种通过迭代地添加弱学习器(如决策树)来构建强学习器的集成学习方法。这种方法通过不断拟合残差来优化模型性能,具有较高的预测精度和鲁棒性。然而,传统的梯度提升算法在处理大规模数据集时存在训练速度慢和内存消耗大的问题。为了解决这些问题,研究者们提出了一系列优化方法,其中就包括LightGBM算法。

LightGBM算法由微软亚洲研究院的Ke Guo等人于2017年提出,并在GitHub上开源。该算法通过优化数据结构和算法设计,实现了在保持高精度的同时,显著提升了训练速度和内存效率。具体来说,LightGBM采用了基于梯度的单边采样(Gradient-based One-Side Sampling, GOSS)和基于树的排他特征捆绑(Exclusive Feature Bundling, EFB)等创新技术,有效降低了计算复杂度和内存消耗。

2、与其他梯度提升框架(如XGBoost)的比较

与其他梯度提升框架相比,LightGBM在多个方面都具有优势。首先,LightGBM采用了基于梯度的单边采样技术,通过保留梯度较大的样本并随机丢弃梯度较小的样本来降低计算复杂度。这种方法可以在保证模型精度的同时,显著减少计算量。其次,LightGBM采用了基于树的排他特征捆绑技术,通过将互斥的特征捆绑在一起来减少特征数量,从而降低计算复杂度和内存消耗。此外,LightGBM还支持多线程并行计算和GPU加速等特性,进一步提升了训练速度。

与XGBoost相比,LightGBM在训练速度和内存效率方面更具优势。虽然XGBoost也是一种优秀的梯度提升框架,但它在处理大规模数据集时可能会遇到训练速度慢和内存消耗大的问题。而LightGBM通过优化数据结构和算法设计,有效解决了这些问题,使得它在处理大规模数据集时具有更高的效率和更好的性能。

3、LightGBM在大数据和机器学习竞赛中的表现

LightGBM算法自提出以来,在大数据和机器学习竞赛中取得了广泛的应用和优异的成绩。许多知名的机器学习竞赛中,参赛者都使用了LightGBM算法来构建模型,并取得了优秀的成绩。这充分证明了LightGBM算法在处理大规模数据集和复杂模型时的优势和实力。同时,LightGBM也受到了广大机器学习爱好者和研究人员的青睐和关注,成为了数据挖掘和机器学习领域的重要工具之一。

三、LightGBM算法原理

1、梯度提升框架的基本原理

梯度提升(Gradient Boosting)是一种集成学习算法,它通过迭代地添加弱学习器(通常是决策树)来构建一个强学习器。在每次迭代中,算法都会根据当前模型的预测误差(即损失函数的梯度)来训练一个新的弱学习器,并将其添加到模型中。通过这种方式,梯度提升能够逐步减小预测误差,提高模型的性能。

具体来说,梯度提升框架通过以下步骤工作:

  1. 初始化一个弱学习器(如决策树桩)。
  2. 对于每个样本,计算其损失函数关于模型输出的梯度。
  3. 使用这些梯度作为新的目标变量来训练一个新的弱学习器。
  4. 将新训练的弱学习器添加到模型中,并更新模型预测值。
  5. 重复上述步骤直到满足停止条件(如达到预设的迭代次数或模型性能不再提升)。
2、LightGBM的核心优化技术

LightGBM在梯度提升框架的基础上,通过引入两种核心优化技术来提高训练速度和内存效率:
在这里插入图片描述

2.1 基于梯度的单边采样(Gradient-based One-Side Sampling, GOSS)

GOSS技术是一种数据采样方法,旨在减少训练样本的数量,同时保持模型的性能。它根据样本的梯度大小进行采样,只保留梯度较大的样本,并随机丢弃一部分梯度较小的样本。这样做可以显著降低计算复杂度,同时保持模型的精度。

2.2 基于树的排他特征捆绑(Exclusive Feature Bundling, EFB)

EFB技术是一种特征压缩方法,旨在减少特征的数量,降低内存消耗。它通过将互斥的特征捆绑在一起来减少特征的数量,从而降低计算复杂度和内存消耗。EFB通过寻找特征之间的互斥性(即一个特征的出现导致另一个特征的出现概率降低),将互斥的特征组合成一个新的特征,以减少总的特征数量。

3、LightGBM的决策树构建过程

LightGBM的决策树构建过程与传统的决策树算法类似,但也有一些特殊之处。它采用了基于梯度的历史信息来构建决策树,通过计算每个特征的信息增益(或类似的指标)来选择最优的分裂点。在构建过程中,LightGBM还考虑了特征的稀疏性和数据的不平衡性等因素,以进一步提高模型的性能。

4、算法的参数设置与调优

LightGBM提供了丰富的参数供用户调整,以优化模型的性能。这些参数包括学习率、树的深度、叶子节点数、最小数据量等。通过合理地设置这些参数,可以平衡模型的复杂度和泛化能力,提高模型的预测精度。此外,LightGBM还支持交叉验证和网格搜索等高级功能,帮助用户自动调优参数。

四、LightGBM算法特点

1、高效性:快速训练和预测

LightGBM通过引入GOSS和EFB等优化技术,显著提高了训练速度和内存效率。这使得LightGBM能够处理大规模数据集和复杂模型,并在短时间内给出准确的预测结果。在实际应用中,LightGBM通常比其他梯度提升框架具有更快的训练速度和更低的内存消耗。

2、准确性:良好的分类和回归性能

LightGBM继承了梯度提升框架的优点,通过迭代地添加弱学习器来构建强学习器,能够逐步减小预测误差并提高模型的性能。同时,LightGBM还采用了基于梯度的历史信息和特征捆绑等技术来进一步优化模型的性能。因此,LightGBM在分类和回归问题上通常具有良好的性能表现。

3、灵活性:支持多种目标函数和评价指标

LightGBM支持多种目标函数和评价指标,可以根据不同的任务需求选择合适的配置。例如,在分类问题中,可以使用对数损失函数作为目标函数;在回归问题中,可以使用均方误差作为目标函数。此外,LightGBM还支持自定义评价指标和损失函数,以满足更复杂的任务需求。

4、可解释性:通过特征重要性评估变量贡献

LightGBM提供了特征重要性评估功能,可以计算每个特征对模型性能的影响程度。这使得用户可以了解哪些特征对模型预测结果贡献最大,从而进行特征选择和模型解释。这种可解释性有助于用户更好地理解模型的工作原理和预测结果。

5、兼容性:易于与Python等编程语言集成

LightGBM提供了丰富的编程接口和库函数,可以与Python等主流编程语言轻松集成。这使得用户可以在自己熟悉的编程环境中使用LightGBM算法进行数据挖掘和机器学习任务。同时,LightGBM还支持与其他机器学习库(如scikit-learn)进行交互和集成,方便用户进行模型比较和评估。

五、基于鸢尾花iris数据集的分类实战

1、数据集介绍
1.1 鸢尾花iris数据集的特征和标签

鸢尾花iris数据集是一个经典的多类分类数据集,它包含了150个样本,每个样本有四个特征(花萼长度、花萼宽度、花瓣长度和花瓣宽度)和一个标签(鸢尾花的种类),分别是山鸢尾(Iris-setosa)、杂色鸢尾(Iris-versicolour)和维吉尼亚鸢尾(Iris-virginica)。

1.2 数据集的加载和预处理

在Python中,我们可以使用sklearn.datasets库中的load_iris()函数来加载iris数据集。加载后,数据集通常不需要进行复杂的预处理,因为特征已经是数值型的,并且标签也已经编码为整数。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, roc_curve, auc
import matplotlib.pyplot as plt
import lightgbm as lgb

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 数据集划分(如果需要的话,这里我们直接划分)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
2、LightGBM模型构建
2.1 数据集划分:训练集和测试集

(注意:上面的代码已经完成了这一步)

2.2 初始化LightGBM分类器

初始化一个LightGBM分类器,这里我们使用LGBMClassifier

# 初始化LightGBM分类器
lgb_clf = lgb.LGBMClassifier()
2.3 设置模型参数

(这里只给出一些示例参数,具体参数设置需要根据任务和数据集来调整)

# 设置模型参数
params = {
    'learning_rate': 0.1,
    'n_estimators': 100,
    'max_depth': 3,
    'num_leaves': 31,
    'min_data_in_leaf': 20,
    'objective': 'multiclass',
    'num_class': 3,
    'metric': 'multi_logloss'
}

# 初始化时设置参数
lgb_clf = lgb.LGBMClassifier(**params)
3、模型训练与评估
3.1 训练模型
# 训练模型
lgb_clf.fit(X_train, y_train)
3.2 评估模型性能:准确率、混淆矩阵、ROC曲线等
# 预测测试集
y_pred = lgb_clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)
print(f"Confusion Matrix:\n{cm}")

# 计算ROC曲线和AUC(对于多分类问题,可能需要为每个类别分别计算)
# 这里只展示二分类问题的ROC曲线和AUC计算,对于多分类问题,可以使用one-vs-rest策略
# ...(省略多分类ROC曲线和AUC计算的代码)
4、特征重要性分析
4.1 解读特征重要性排名
# 获取特征重要性
feature_importances = lgb_clf.feature_importances_
feature_names = iris.feature_names

# 打印特征重要性
for feature_name, importance in zip(feature_names, feature_importances):
    print(f"{feature_name}: {importance}")

# 绘制特征重要性柱状图
plt.bar(feature_names, feature_importances)
plt.title('Feature Importances')
plt.xlabel('Feature')
plt.ylabel('Importance')
plt.show()
4.2 探讨特征对分类结果的影响

根据特征重要性分析的结果,我们可以探讨哪些特征对分类结果的影响最大,以及这些特征是如何影响分类的。

5、模型调优
5.1 网格搜索和随机搜索

为了找到LightGBM分类器的最佳参数,我们可以使用网格搜索(GridSearchCV)或随机搜索(RandomizedSearchCV)从scikit-learn库中。这里我们展示一个简单的网格搜索例子:

from sklearn.model_selection import GridSearchCV

# 定义要搜索的参数网格
param_dist = {
    'boosting_type': ['gbdt', 'dart'],  # 提升类型  梯度提升决策树(gbdt)和Dropouts meet Multiple Additive Regression Trees(dart)
    'objective': ['binary', 'multiclass'],  # 目标;二分类和多分类
    'num_leaves': range(20, 150),  # 叶子节点数量
    'learning_rate': [0.01, 0.05, 0.1],  # 学习率
    'feature_fraction': [0.6, 0.8, 1.0],  # 特征采样比例
    'bagging_fraction': [0.6, 0.8, 1.0],  # 数据采样比例
    'bagging_freq': range(0, 80),  # 数据采样频率
    'verbose': [-1]  # 是否显示训练过程中的详细信息,-1表示不显示
}

# 初始化LightGBM分类器
lgb_clf = lgb.LGBMClassifier()

# 使用网格搜索
grid_search = GridSearchCV(estimator=lgb_clf, param_grid=param_grid, cv=5, scoring='accuracy')

# 训练模型
grid_search.fit(X_train, y_train)

# 输出最佳参数
print("Best parameters: ", grid_search.best_params_)

# 使用最佳参数训练模型
best_lgb_clf = grid_search.best_estimator_

# 对测试集进行预测
y_pred_best = best_lgb_clf.predict(X_test)

# 计算准确率
accuracy_best = accuracy_score(y_test, y_pred_best)
print(f"Accuracy with best parameters: {accuracy_best}")
5.2 交叉验证

在上面的网格搜索中,我们已经使用了交叉验证(cv=5),这是为了更准确地评估模型的性能。交叉验证将数据划分为多个子集,并在每个子集上训练模型,然后在剩余的子集上评估模型的性能。这样,我们可以得到模型性能的更稳健的估计。

# 初始化模型
model = lgb.LGBMClassifier()


# 使用随机搜索进行参数调优
random_search = RandomizedSearchCV(estimator=model,
                                   param_distributions=param_dist, # 参数组合
                                   n_iter=100, 
                                   cv=5, # 5折交叉验证
                                   verbose=2, 
                                   random_state=42, 
                                   n_jobs=-1)
# 模型训练
random_search.fit(X_train, y_train)
Fitting 5 folds for each of 100 candidates, totalling 500 fits

输出最佳的参数组合:

 # 输出最佳参数
print("Best parameters found: ", random_search.best_params_)
5.3 使用最佳参数建模
# 使用最佳参数训练模型
best_model = random_search.best_estimator_
best_model.fit(X_train, y_train)

# 预测
y_pred = best_model.predict(X_test)
y_pred = [round(i) for i in y_pred]  # 将概率转换为类别

# 评估模型
print('Accuracy: %.4f' % accuracy_score(y_test, y_pred))
5.4 优化模型参数以提升性能

在得到最佳参数后,我们可以使用这些参数来训练模型,并评估其在测试集上的性能。然而,我们还可以通过以下方法来进一步优化模型的性能:

  • 特征选择:删除不相关或冗余的特征,以减少模型的复杂度并提高性能。
  • 集成方法:使用多个模型的集成(如Bagging、Boosting)来进一步提高分类性能。
  • 调整类别权重:如果数据集中存在类别不平衡问题,我们可以调整类别权重来优化模型性能。
  • 尝试不同的模型:除了LightGBM外,还可以尝试其他机器学习算法,如随机森林、梯度提升树(XGBoost)等,并比较它们的性能。

六、实战案例总结

1、总结LightGBM在iris数据集上的表现

在iris数据集上的分类实战案例中,LightGBM表现出了出色的性能。通过合理的参数调整和优化,我们成功地在训练集上训练了模型,并在测试集上取得了较高的准确率。LightGBM的基于梯度的一阶和二阶信息以及基于树的算法结构,使得它能够快速且准确地处理分类任务。此外,通过特征重要性分析,我们还能够清晰地看到哪些特征对分类结果的影响最大,从而有助于我们更好地理解数据。

2、分析模型的优势和不足

LightGBM在iris数据集上的优势主要体现在以下几个方面:

  • 高效性:LightGBM采用基于梯度的单边采样(GOSS)和基于树的互斥特征捆绑(EFB)技术,大大减少了计算量,提高了训练速度。
  • 准确性:通过合理的参数调整和网格搜索,我们能够找到使模型性能最优的参数组合,从而获得较高的分类准确率。
  • 可解释性:LightGBM提供了特征重要性分析功能,可以帮助我们理解哪些特征对分类结果的影响最大。

然而,LightGBM也存在一些不足之处:

  • 参数敏感性:LightGBM的性能对参数的选择较为敏感,需要花费一定的时间和精力进行参数调整和优化。
  • 处理大规模数据时的内存消耗:虽然LightGBM在内存优化方面做得很好,但在处理超大规模数据集时,仍然需要较大的内存空间。
3、提出可能的改进方向

针对LightGBM在iris数据集上的表现,我们可以提出以下可能的改进方向:

  • 使用集成学习:将多个LightGBM模型进行集成,如使用Bagging或Boosting方法,可以进一步提高模型的分类性能。
  • 特征工程:通过进一步的特征工程,如特征选择、特征编码等,可以提取出更有用的特征,从而提高模型的分类效果。
  • 调整类别权重:如果数据集中存在类别不平衡问题,可以通过调整类别权重来优化模型性能。

七、附录

1、参考文献

[列出在撰写本文时参考的书籍、论文、在线文章等]

例如:

  • Ke, G., Meng, Q., Finley, T., Wang, T., Chen, W., Ma, W., … & Liu, X. (2017). LightGBM: A Highly Efficient Gradient Boosting Decision Tree. In Advances in Neural Information Processing Systems 30 (NIPS 2017).
2、相关资源推荐

[推荐一些与LightGBM算法和数据挖掘相关的在线课程、教程、书籍、数据集等]

例如:

  • LightGBM官方文档:https://lightgbm.readthedocs.io/en/latest/
  • 数据挖掘与机器学习相关书籍推荐:《Python数据挖掘入门与实践》、《机器学习实战》等。
3、代码示例(可选,提供部分关键代码段)

[在这里提供部分关键代码段,如LightGBM模型的初始化、训练、评估等]

# LightGBM模型初始化、训练与评估的示例代码
lgb_clf = lgb.LGBMClassifier(**params)
lgb_clf.fit(X_train, y_train)
y_pred = lgb_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

八、结语

1、强调LightGBM在数据挖掘中的实用性和重要性

通过本次实战案例,我们深刻体会到了LightGBM在数据挖掘中的实用性和重要性。LightGBM以其高效性、准确性和可解释性,成为了数据挖掘领域中的一把利器。无论是处理大规模数据集还是解决复杂的分类问题,LightGBM都能够展现出其卓越的性能。

2、鼓励读者进一步学习和应用LightGBM算法解决实际问题

因此,我鼓励读者们进一步学习和应用LightGBM算法,将其应用于实际的数据挖掘项目中。通过不断地实践和学习,我们相信大家一定能够掌握LightGBM的精髓,并将其发挥到极致。同时,也希望大家能够积极探索更多的数据挖掘算法和技术,为解决实际问题提供更多有效的解决方案。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Marvelous Designer中一些棉质布料预设

Marvelous Designer中一些棉质布料预设的解释: Cotton_14_Wale_Corduroy:14条细鲸鱼纹的灯芯绒,适合制作温暖且有质感的服装。Cotton_40s_Chambray:40支精梳针织的府绸布,通常用于制作休闲衬衫。Cotton_40s_Poplin&am…

echars饼图、柱状图 java返回的数据格式

1、echars饼状图返回的数据格式 [ { "name": "A", "value": 3 }, { "name": "B", "value": 2 }, { "name": "C", "value": 2 } ] java代码Demo 为例:根据名字分组&…

vuInhub靶场实战系列--prime:1

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 nmap主机扫描2.1.3 arp-scan主机扫描 2.2 端口扫描…

【CMake系列】06-项目结构与输出路径管理

为了对大型项目实现更好的管理【模块化协作开发等等】,cmake 提供了很多指令,可以对项目的结构进行调整、管理,便于项目的合理规划。本文我们要学习的就是 项目结构的设置,以及 构建程序等 输出路径的设置 本专栏的实践代码全部放…

倾斜侧壁增强光提取效率相关机制的建模仿真研究

较低的光提取效率(LEE)是制约深紫外发光二极管(LED)快速发展的一个重要因素,倾斜侧壁结构可以直接将横向传播的横向磁场(TM)偏振光散射到c面逃逸锥,从而提高器件的LEE,因…

review of c++

友元关系是单向的。 指针

什么是数字化转型?

作者: 峡山老曹 数字神化 ”企业如何实现数字化转型“是摆在现代企业面前一个无法回避的问题,数字化转型的重要性不容忽视,它不仅是企业适应数字化时代的必然要求,更是提升竞争力、实现可持续发展的关键。随着科技的飞速发展和市场…

MFTCoder论文被KDD 2024接收,开源v0.4.2版发布

1. MFTCoder 简介 CodeFuse在2023年9月开源了一种多任务微调框架——MFTCoder,它可以实现在多个任务上同时并行地进行微调。通过结合多种损失函数,我们有效地解决了多任务学习中常见的任务间数据量不平衡、难易不一和收敛速度不一致等挑战。大量实验结果…

【C语言】文件操作(下卷)

前言 在上一卷中,我们知道了文件指针、文件的打开和关闭(打开其他位置的文件)、文件的顺序读写(其中的fputc()、fgetc()),这一卷中,将继续讲解文件操作未讲到的地方。 内容有点多,…

Vue3【三】 使用TS自己编写APP组件

Vue3【三】 使用TS自己编写APP组件 运行截图 目录结构 注意目录层级 文件源码 APP.vue <template><div class"app"><h1>你好世界!</h1></div> </template><script lang"ts"> export default {name:App //组…

redsystems教程的基本使用之重置密码(忘记密码解决方法)

前言&#xff1a; 相信很多人都有疑惑&#xff0c;要是我不记得密码怎么办&#xff1f;如果你登录了&#xff0c;点击更改密码后&#xff0c;还是要你填写登录密码才能修改。为了解决这问题&#xff0c;博主通过了钻研成功搞出来了&#xff01;&#xff01;&#xff01;&#…

重学java 64.IO流 字符流

Action speak louder than words —— 24.6.5 字符输入流 一、字节流读取中文的问题 1.注意&#xff1a; 字节流是万能流&#xff0c;这个万能更侧重于文件复制&#xff0c;但是尽量不要边读边看 2.原因&#xff1a; UTF-8&#xff1a;一个汉字占三个字节 GBK&#xff1a;一…

SQLAlchemy 模型中数据的错误表示

1. 问题背景 在使用 SQLAlchemy 0.6.0 版本&#xff08;也曾尝试使用 0.6.4 版本&#xff09;的 Pylons 应用程序中遇到了一个 SQLAlchemy ORM 问题。该问题出现在使用 psycopg2 作为数据库驱动程序、连接至 Postgresql 8.2 数据库的环境中。定义了一个 User 模型对象&#xf…

专为成长型企业打造的Java CRM系统源码:CRM客户关系管理系统技术解析与功能构建

一、序章 在激烈的市场竞争环境中&#xff0c;客户关系管理&#xff08;CRM&#xff09;系统是企业保持竞争优势、提高客户满意度、推动业务发展的核心工具。本文将深入探讨一款集成了现代技术的CRM系统&#xff0c;该系统基于Spring Cloud Alibaba与Spring Boot构建&#xff…

关于安装typescript后运行tsc -v命令报错问题

报错信息&#xff1a; tsc 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 没有配置环境变量&#xff0c;使用npm命令查看typescript的安装目录&#xff1a; npm config get prefix 根据控制台输出的目录&#xff0c;配置path环境变量 tsc -v 运行成功&…

申请医疗设备注册变更时,需要补充考虑网络安全的情况有哪些?

在申请医疗器械设备注册变更时&#xff0c;需要补充网络安全的情况主要包括以下几点&#xff1a; 网络安全功能更新&#xff1a;如果医疗器械的自研软件发生网络安全功能更新&#xff0c;或者合并网络安全补丁更新的情形&#xff0c;需要单独提交一份自研软件网络安全功能更新…

计算机网络 期末复习(谢希仁版本)第1章

大众熟知的三大网络&#xff1a;电信网络、有线电视网络、计算机网络。发展最快起到核心的是计算机网络。Internet是全球最大、最重要的计算机网络。互联网&#xff1a;流行最广、事实上的标准译名。互连网&#xff1a;把许多网络通过一些路由器连接在一起。与网络相连的计算机…

DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)

场景 DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑&#xff1a; DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑_jenkins的安装以及集成jdkgitmaven 提示警告-CSDN博客 Windows10(家庭版…

基于centos7打包当前环境的系统为iso镜像文件

1. 准备工作 1.下载安装mondo 切换到root用户&#xff0c;进入yum下载库 # cd /etc/yum.repos.d # wget ftp://ftp.mondorescue.org/centos/7/x86_64/mondorescue.repo 打开文件mondorescue.repo&#xff0c;修改gpgcheck属性为0&#xff0c;指定mondorescue.repo安装 # 安…

Java 8 中的 Stream API,用于处理集合数据

Java 8 引入了 Stream API&#xff0c;使得处理集合数据变得更加简洁和高效。Stream API 允许开发者以声明式编程风格操作数据集合&#xff0c;而不是使用传统的迭代和条件语句。 一、基本概念 1.1 什么是 Stream Stream 是 Java 8 中的一个新抽象&#xff0c;它允许对集合数…