集成学习(二):从理论到实战(附代码)

接上一篇续写《集成学习(一):从理论到实战(附代码)》

五、实用算法

5.1 随机森林

随机森林在数据集的各个子样本上拟合许多决策树分类器,并使用平均来提高预测精度和控制过拟合。每一个分类器拟合了一部分随机样本,同时也拟合一部分随机特征

通过以下两个主要步骤来构建强大的预测模型:

  1. Bootstrap Sampling:从原始数据集中随机抽取样本(有放回抽样),创建多个不同的子集。
  2. Random Feature Selection:在每个子集上训练一个决策树时,在每次分裂节点时只考虑一部分特征,而不是所有特征。这样可以增加模型的多样性,并减少过拟合的风险。

最终,对于分类问题,随机森林通常使用多数投票的方式来决定最终类别;对于回归问题,则通常使用平均值的方式来决定最终预测值。

RandomForestClassifierRandomForestRegressor 是基于集成学习方法中的随机森林(Random Forest)算法实现的分类和回归模型。随机森林通过构建多个决策树并将它们的结果结合起来,以提高预测的准确性和控制过拟合。

5.1.1 RandomForestClassifier

RandomForestClassifier 用于分类任务,通过构建多个决策树分类器,并将它们的预测结果进行组合来得出最终的分类决策。

工作原理

  • Bootstrap Aggregating (Bagging):对原始数据集进行有放回抽样,生成多个不同的训练子集。
  • Random Feature Selection:在每个节点分裂时,只考虑一个随机选择的特征子集,而不是所有特征。
  • Majority Voting:每棵树都对输入数据进行分类,最终的分类结果是所有树的分类结果中出现次数最多的类别(即多数投票)。

示例代码

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# 创建合成数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 定义随机森林分类器
rf_clf = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)

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

# 使用训练好的模型进行预测
predictions = rf_clf.predict(X_test)
5.1.2 RandomForestRegressor

RandomForestRegressor 用于回归任务,通过构建多个决策树回归器,并将它们的预测结果进行组合来得出最终的预测值。

工作原理

  • Bootstrap Aggregating (Bagging):与分类器类似,通过对原始数据集进行有放回抽样生成多个不同的训练子集。
  • Random Feature Selection:在每个节点分裂时,同样只考虑一个随机选择的特征子集。
  • Average Prediction:每棵树都对输入数据进行预测,最终的预测结果是对所有树的预测结果取平均值。

示例代码

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split

# 创建合成数据集
X, y = make_regression(n_samples=1000, n_features=20, noise=0.1, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 定义随机森林回归器
rf_reg = RandomForestRegressor(n_estimators=100, max_depth=5, random_state=42)

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

# 使用训练好的模型进行预测
predictions = rf_reg.predict(X_test)

关键参数解释

  • n_estimators:指定要构建的决策树数量。更多的树通常能带来更好的性能,但也会增加计算成本。
  • max_depth:设置每棵树的最大深度。限制树的深度可以帮助防止过拟合。
  • random_state:控制随机性,确保实验结果的可重复性。
5.1.3 总结
  • RandomForestClassifierRandomForestRegressor 都是基于随机森林算法的模型,分别用于解决分类和回归问题。
  • 随机森林通过构建大量的决策树,并结合这些树的预测结果来提高模型的稳定性和准确性。
  • 在分类任务中,采用多数投票法决定最终类别;在回归任务中,则通过平均各树的预测值得到最终预测结果。
  • 随机森林的一个重要特性是其对高维数据的良好适应性以及对噪声数据的鲁棒性,使其成为实际应用中非常流行的机器学习算法之一。

5.2 XGBoost

XGBoost的核心是梯度提升决策树(Gradient Boosting Decision Trees, GBDT),但其在性能优化、正则化等方面做了很多改进,使得它在速度和效果上都优于传统的GBDT实现。以下是XGBoost的一些关键特性:

  1. 梯度提升:从一个初始预测开始,然后迭代地添加新的树,每棵树都在尝试修正之前所有树的预测误差。具体来说,每棵新树都是根据前一棵树的残差(即预测值与真实值之间的差异)来训练的。

  2. 正则化:XGBoost引入了正则项到损失函数中,帮助控制模型复杂度,减少过拟合的风险。

  3. 列采样和行采样:类似于随机森林,XGBoost也支持特征子集(列)采样和样本子集(行)采样,增加了模型的多样性并提高了计算效率。

  4. 近似树分裂:为了提高处理大规模数据集的能力,XGBoost使用了一种近似算法来寻找最佳分裂点,而不是精确搜索,这大大加快了训练过程。

  5. 并行处理:尽管每棵树的构建过程本质上是顺序的,XGBoost通过并行化计算每个节点的最佳分裂点来加速训练。

XGBClassifierXGBRegressor 是基于XGBoost(eXtreme Gradient Boosting)算法的实现,专门用于分类和回归任务。XGBoost是一种高效的梯度提升框架,它通过构建一系列决策树并将它们组合起来以形成一个强大的预测模型。

5.2.1 XGBClassifier

XGBClassifier 适用于分类问题。它通过构建一系列决策树,并使用梯度下降的方法来最小化损失函数(如对数损失),从而逐步改善模型的预测能力。

示例代码

from xgboost import XGBClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 创建合成数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 定义XGB分类器
xgb_clf = XGBClassifier(use_label_encoder=False, eval_metric='mlogloss')

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

# 使用训练好的模型进行预测
predictions = xgb_clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, predictions)
print(f"XGB Classifier Accuracy: {accuracy:.4f}")
  • use_label_encoder=False:避免警告信息,因为从某些版本开始,默认情况下会使用标签编码器转换标签。
  • eval_metric='mlogloss':指定评估指标为多类对数损失。
5.2.2 XGBRegressor

XGBRegressor 适用于回归问题。它的工作方式与XGBClassifier类似,但目标是最小化回归任务中的损失函数(如均方误差)。

示例代码

from xgboost import XGBRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 创建合成数据集
X, y = make_regression(n_samples=1000, n_features=20, noise=0.1, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 定义XGB回归器
xgb_reg = XGBRegressor()

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

# 使用训练好的模型进行预测
predictions = xgb_reg.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, predictions)
print(f"XGB Regressor MSE: {mse:.4f}")

关键参数解释

  • n_estimators:要构建的树的数量。更多的树通常可以带来更好的性能,但也可能增加过拟合的风险。
  • max_depth:每棵树的最大深度。限制树的深度可以帮助防止过拟合。
  • learning_rate:每次迭代时对新增加的树的重要性进行缩放的比例。较小的学习率通常需要更多的树来达到同样的效果,但它有助于提高模型的泛化能力。
  • subsample:用于训练每棵树的数据比例。设置小于1.0的值可以减少过拟合。
  • colsample_bytree:用于训练每棵树的特征比例。同样,设置小于1.0的值可以增加模型的多样性,减少过拟合。
5.2.3 总结
  • XGBClassifierXGBRegressor 基于XGBoost算法,分别用于解决分类和回归问题。
  • XGBoost通过梯度提升方法构建一系列决策树,并通过多种技术如正则化、列采样和行采样等手段来提高模型的稳定性和泛化能力。
  • 这些模型因其高效性和良好的性能,在实际应用中非常受欢迎,特别是在处理大型数据集时表现出色。

5.3 LightGBM

由微软维护,特别适合处理大数据集的机器学习算法。
终极推荐:
- 训练速度
- 推理速度
- 处理数据量
- 结果层面
- 综合来看,最优!!!!!!

LightGBM 的核心原理

  1. 基于梯度的单边采样 (GOSS):在传统的 GBDT 中,每次迭代都会使用全部的数据进行训练。而在 LightGBM 中,GOSS 通过保留具有较大梯度的实例,并对剩余的小梯度实例进行随机抽样来减少数据量。这种方法能够在不严重损害模型精度的情况下大幅减少数据量,从而加快训练速度。

  2. 互斥特征捆绑 (EFB):许多实际应用中的特征是稀疏的,且某些特征之间很少或几乎不会同时非零(即它们是互斥的)。EFB 技术利用这一点,将这些互斥特征捆绑在一起作为一个新特征,减少了特征维度,进而提高了训练速度和降低了内存消耗。

  3. 直方图算法:不同于传统的精确分割方法,LightGBM 使用直方图算法来寻找最佳分裂点。这意味着它不是直接计算每个可能分裂点的信息增益,而是将连续的特征值离散化为若干个区间(桶),然后基于这些区间的统计信息来决定分裂点。这种方法不仅加快了分裂点的选择过程,还支持并行处理。

  4. 叶子生长策略:大多数 GBDT 实现采用深度优先(Depth-wise)的增长策略,而 LightGBM 使用叶子导向(Leaf-wise)的增长策略。这意味着它会优先选择分裂那些能带来最大收益的叶子节点,而不是简单地逐层增长树。这种策略有助于生成更少但更深的树,从而可能达到更高的准确性。

LGBMClassifierLGBMRegressor 是基于 LightGBM(Light Gradient Boosting Machine)框架的分类和回归模型。LightGBM 是一种梯度提升框架,它被设计用于提高传统梯度提升决策树(GBDT)的速度和效率,同时保持高准确率。LightGBM 通过引入一些创新技术,如基于梯度的单边采样(GOSS, Gradient-based One-Side Sampling)和互斥特征捆绑(EFB, Exclusive Feature Bundling),显著提高了计算效率和内存使用效率。

5.3.1 LGBMClassifier

LGBMClassifier 是专门用于解决分类问题的 LightGBM 模型。它通过上述技术构建一系列决策树,并结合这些树的结果来进行最终的分类预测。

示例代码

from lightgbm import LGBMClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 创建合成数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 定义LGBM分类器
lgbm_clf = LGBMClassifier(n_estimators=100, learning_rate=0.1, max_depth=5, random_state=42)

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

# 使用训练好的模型进行预测
predictions = lgbm_clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, predictions)
print(f"LGBM Classifier Accuracy: {accuracy:.4f}")
5.3.2 LGBMRegressor

LGBMRegressor 是用于回归任务的 LightGBM 模型。其工作方式与 LGBMClassifier 类似,但目标是最小化回归损失函数(如均方误差)。

示例代码

from lightgbm import LGBMRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 创建合成数据集
X, y = make_regression(n_samples=1000, n_features=20, noise=0.1, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 定义LGBM回归器
lgbm_reg = LGBMRegressor(n_estimators=100, learning_rate=0.1, max_depth=5, random_state=42)

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

# 使用训练好的模型进行预测
predictions = lgbm_reg.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, predictions)
print(f"LGBM Regressor MSE: {mse:.4f}")

关键参数解释

  • n_estimators:要构建的树的数量。更多的树通常可以带来更好的性能,但也可能增加过拟合的风险。
  • learning_rate:每次迭代时对新增加的树的重要性进行缩放的比例。较小的学习率通常需要更多的树来达到同样的效果,但它有助于提高模型的泛化能力。
  • max_depth:每棵树的最大深度。限制树的深度可以帮助防止过拟合。
  • num_leaves:控制树的复杂度的一个重要参数,指定了每棵树的叶子节点数。适当调整这个参数可以帮助找到平衡点,在不过度拟合的同时获得较好的模型表现。
5.3.3 总结
  • LGBMClassifierLGBMRegressor 基于 LightGBM 框架,分别用于解决分类和回归问题。
  • LightGBM 通过多种技术创新,如 GOSS、EFB 和直方图算法,显著提高了训练速度和效率,同时保持了高准确率。
  • 这些模型因其高效性和良好的性能,在处理大规模数据集时特别有用,并广泛应用于各种机器学习竞赛和实际项目中。

六、实战建议

使用 GridSearchCV 来进行超参数调优,以找到最佳的模型配置。举个例子,使用 XGBoost 的分类器 XGBClassifier 作为基础模型,并通过网格搜索来寻找最优的超参数组合。

# 自动化建模流程示例
from sklearn.model_selection import GridSearchCV

# 参数网格
param_grid = {
    'n_estimators': [100, 200],
    'max_depth': [3, 5],
    'learning_rate': [0.1, 0.05]
}

# 网格搜索
grid_search = GridSearchCV(
    estimator=XGBClassifier(),
    param_grid=param_grid,
    scoring='accuracy',
    cv=5,
    n_jobs=-1
)
# 执行网格搜索:调用 `fit` 方法开始训练模型。
# `GridSearchCV` 会对 `param_grid` 中所有可能的超参数组合进行训练和评估。
# 最终,它会选择在交叉验证中表现最好的一组超参数。
grid_search.fit(X_train, y_train)
# `best_params_` 属性存储了在交叉验证中得分最高的那组超参数。
# 通过打印 `grid_search.best_params_` 可以查看这些最佳参数。
print(f"最佳参数: {grid_search.best_params_}")

代码解释
GridSearchCV 是一个用于自动化超参数调整的强大工具,它通过交叉验证(Cross-Validation)来评估不同超参数设置下的模型性能。

# 参数网格
param_grid = {
    'n_estimators': [100, 200],
    'max_depth': [3, 5],
    'learning_rate': [0.1, 0.05]
}

定义参数网格:这里定义了一个字典 param_grid,其中键是模型的超参数名称,值是一个列表,包含了该超参数可能取的所有值。

  • 'n_estimators':表示要构建的树的数量。在这里尝试了 [100, 200]
  • 'max_depth':每棵树的最大深度。在这里尝试了 [3, 5]
  • 'learning_rate':每次迭代时对新增加的树的重要性进行缩放的比例。在这里尝试了 [0.1, 0.05]
# 网格搜索
grid_search = GridSearchCV(
    estimator=XGBClassifier(),
    param_grid=param_grid,
    scoring='accuracy',
    cv=5,
    n_jobs=-1
)

初始化 GridSearchCV 对象

  • estimator=XGBClassifier():指定使用的模型为 XGBClassifier
  • param_grid=param_grid:传入之前定义的参数网格。
  • scoring='accuracy':指定模型评估指标为准确率(适用于分类问题)。对于回归问题,可以使用如 'neg_mean_squared_error' 等其他评分标准。
  • cv=5:指定使用 5 折交叉验证。这意味着数据集将被分成 5 份,模型会训练 5 次,每次使用不同的 4/5 数据作为训练集,剩余的 1/5 数据作为验证集。
  • n_jobs=-1:利用所有可用的 CPU 核心并行计算,加快搜索速度。

总结:上面这段代码的主要目的是通过网格搜索和交叉验证自动找到 XGBClassifier 模型的最佳超参数组合。这样做有助于提高模型的性能,并避免手动逐一尝试每个超参数组合的繁琐过程。
通过设置不同的参数值范围,GridSearchCV 可以系统地探索所有可能的组合,并基于指定的评分标准(此处为准确率)选择最佳模型配置。这种方法尤其适合于寻找最优超参数设置,特别是在处理复杂或大规模数据集时。

调优策略:

  • 优先调节学习率和树数量(n_estimators)
  • 控制单棵树复杂度(max_depth, min_child_weight)
  • 采样策略(subsample, colsample_bytree)
  • 正则化参数(lambda, alpha)
  • 早停法防止过拟合

七、结论与推荐

对于结构化数据或表格类数据,集成学习通常是最有效的选择。尽管深度学习在某些领域表现出色,但在处理这类数据时,集成学习往往能提供更好的结果。

  • 训练速度:集成学习算法如随机森林、XGBoost和LightGBM在大多数情况下都能快速训练。
  • 推理速度:这些算法也具有较快的推理速度,非常适合实时应用。
  • 处理数据量:特别是LightGBM,在处理大规模数据集方面表现出色。
  • 结果层面:集成学习方法通常能够提供高准确度和鲁棒性的预测结果。

算法选型指南

指标随机森林XGBoostLightGBM
训练速度★★★☆☆★★★★☆★★★★★
预测速度★★★☆☆★★★★☆★★★★★
内存消耗★★☆☆☆★★★☆☆★★★★★
处理类别特征需要编码需要编码原生支持
可解释性★★★★☆★★★☆☆★★★☆☆
大数据支持★★☆☆☆★★★★☆★★★★★

终极建议

  • 中小数据集:XGBoost(精度优先)
  • 大数据集:LightGBM(效率优先)
  • 快速原型:随机森林(易用性好)
  • 类别特征多:CatBoost
  • 需要可解释性:随机森林特征重要性

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

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

相关文章

在C++的DLL文件中定义的结构体,在DLL外可以使用吗,如何使用?

在C的DLL文件中定义的结构体,在DLL外可以使用,但需要正确处理类型匹配和内存管理。‌ 在DLL外使用DLL中定义的结构体的方法: 一、 ‌使用extern "C"声明‌: 在DLL的导出声明中使用extern "C"可以确保函数和…

PDF另存为图片的一个方法

说明 有时需要把PDF的每一页另存为图片。用Devexpress可以很方便的完成这个功能。 窗体上放置一个PdfViewer。 然后循环每一页 for (int i 1; i < pdfViewer1.PageCount; i) 调用 chg_pdf_to_bmp函数获得图片并保存 chg_pdf_to_bmp中调用了PdfViewer的CreateBitmap函数…

中间件-安装Minio-集成使用(ubantu-docker)

目录 1、安装docer 2、运行以下命令拉取MinIO的Docker镜像 3、检查当前所有Docker下载的镜像 4、创建目录 5、创建Minio容器并运行 6、SDK操作 FileUploader.java 1、安装docer 参考这篇&#xff1a;Linux安装Docker 2、运行以下命令拉取MinIO的Docker镜像 docker pull…

ffmpeg学习:ubuntu下编译Android版ffmpeg-kit

文章目录 前言一. 配置环境1.1 虚拟机版本1.2 安装Android环境1.2.1 Android SDK安装1.2.2 Android NDK安装 1.3 编译前的准备工作1.3.1 libtasn1-1安装1.3.2 meson安装1.3.3 harfbuzz下载 二. 编译ffmpeg-kit三. 总结 前言 ffmpeg-kit是一款跨多个平台的&#xff0c;用于在应…

【全球人口数据集】全球人口密度数据集GPWv4

目录 数据概述数据处理方法数据下载参考GPWv4: Population Density, Revision 11 是由 NASA Socioeconomic Data and Applications Center (SEDAC) 提供的全球人口密度数据集,旨在支持社会经济和环境研究。 数据概述 Gridded Population of the World, Version 4 (GPWv4): Po…

PyTorch 中 `torch.cuda.amp` 相关警告的解决方法

在最近的写代码过程中&#xff0c;遇到了两个与 PyTorch 的混合精度训练相关的警告信息。这里随手记录一下。 警告内容 警告 1: torch.cuda.amp.autocast FutureWarning: torch.cuda.amp.autocast(args...) is deprecated. Please use torch.amp.autocast(cuda, args...) i…

NLP面试之-激活函数

一、动机篇 1.1 为什么要有激活函数&#xff1f; 数据角度&#xff1a;由于数据是线性不可分的&#xff0c;如果采用线性化&#xff0c;那么需要复杂的线性组合去逼近问题&#xff0c;因此需要非线性变换对数据分布进行重新映射;线性模型的表达力问题&#xff1a;由于线性模型…

四、自然语言处理_08Transformer翻译任务案例

0、前言 在Seq2Seq模型的学习过程中&#xff0c;做过一个文本翻译任务案例&#xff0c;多轮训练后&#xff0c;效果还算能看 Transformer作为NLP领域的扛把子&#xff0c;对于此类任务的处理会更为强大&#xff0c;下面将以基于Transformer模型来重新处理此任务&#xff0c;看…

关于conda换镜像源,pip换源

目录 1. 查看当前下载源2. 添加镜像源2.1清华大学开源软件镜像站2.2上海交通大学开源镜像站2.3中国科学技术大学 3.删除镜像源4.删除所有镜像源&#xff0c;恢复默认5.什么是conda-forge6.pip换源 1. 查看当前下载源 conda config --show channels 如果发现多个 可以只保留1个…

因果机器学习(CausalML)前沿创新思路

结合了传统因果推断与机器学习的因果机器学习是目前AI领域的前沿研究方向&#xff0c;其核心优势在于将因果逻辑融入数据驱动模型&#xff0c;从根本上解决了传统方法的缺陷。因此&#xff0c;它也是突破传统机器学习瓶颈的关键方向&#xff0c;不仅当下热度高&#xff0c;在未…

网络防御高级02-综合实验

web页面&#xff1a; [FW]interface GigabitEthernet 0/0/0 [FW-GigabitEthernet0/0/0]service-manage all permit 需求一&#xff0c;接口配置&#xff1a; SW2: [Huawei]sysname SW2 1.创建vlan [sw2]vlan 10 [sw2]vlan 20 2.接口配置 [sw2]interface GigabitEther…

【devops】 Git仓库如何fork一个私有仓库到自己的私有仓库 | git fork 私有仓库

一、场景说明 场景&#xff1a; 比如我们Codeup的私有仓库下载代码 放入我们的Github私有仓库 且保持2个仓库是可以实现fork的状态&#xff0c;即&#xff1a;Github会可以更新到Codeup的最新代码 二、解决方案 1、先从Codeup下载私有仓库代码 下载代码使用 git clone 命令…

一竞技瓦拉几亚S4预选:YB 2-0击败GG

在2月11号进行的PGL瓦拉几亚S4西欧区预选赛上,留在欧洲训练的YB战队以2-0击败GG战队晋级下一轮。双方对阵第二局:对线期YB就打出了优势,中期依靠卡尔带队进攻不断扩大经济优势,最终轻松碾压拿下比赛胜利,以下是对决战报。 YB战队在天辉。阵容是潮汐、卡尔、沙王、隐刺、发条。G…

ATF系统安全从入门到精通

CSDN学院课程连接&#xff1a;https://edu.csdn.net/course/detail/39573

Linux内核实时机制x - 中断响应测试 Cyclictest分析1

Linux内核实时机制x - 中断响应测试Cyclitest 1 实时性测试工具 rt-test 1.1 源码下载 1.下载源码&#xff1a; ~/0-code/5.15$ git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git 正克隆到 rt-tests... remote: Enumerating objects: 5534, done. remot…

实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)

如上图&#xff0c;我的百度网盘已登录设备列表&#xff0c;有一个手机&#xff0c;2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的&#xff1f;下面分别给出android APP中采集手机信…

如何获取,CPU,GPU,硬盘,网卡,内存等硬件性能监控与各项温度传感器

首先需要下载 OpenHardwareMonitorServer 这是一个基于OpenHardwareMonitor 的 Web 服务器。可以让任何语言都可以获取硬件信息和值&#xff0c;OpenHardwareMonitorServer 是没有UI界面的因此它可以当成控制台程序使用。 该程序可用参数如下 参数&#xff1a;需要管理员权限…

解锁大语言模型潜能:KITE 提示词框架全解析

大语言模型的应用日益广泛。然而&#xff0c;如何确保这些模型生成的内容在AI原生应用中符合预期&#xff0c;仍是一个需要不断探索的问题。以下内容来自于《AI 原生应用开发&#xff1a;提示工程原理与实战》一书&#xff08;京东图书&#xff1a;https://item.jd.com/1013604…

C++STL容器之map的使用及复现

map 1. 关联式容器 vector、list、deque、forward_list(C11) 等STL容器&#xff0c;其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身&#xff0c;这样的容器被统称为序列式容器。而 map、set 是一种关联式容器&#xff0c;关联式容器也是用来存储数据的&#xf…

网络工程师 (30)以太网技术

一、起源与发展 以太网技术起源于20世纪70年代&#xff0c;最初由Xerox公司的帕洛阿尔托研究中心&#xff08;PARC&#xff09;开发。最初的以太网采用同轴电缆作为传输介质&#xff0c;数据传输速率为2.94Mbps&#xff08;后发展为10Mbps&#xff09;&#xff0c;主要用于解决…