大数据分析案例-基于梯度提升决策树回归算法构建医疗保险费用预测模型

9a634410cc6b7f35886b50945fab99c7.gif

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章

大数据分析案例合集
大数据分析案例-基于随机森林算法预测人类预期寿命
大数据分析案例-基于随机森林算法的商品评价情感分析
大数据分析案例-用RFM模型对客户价值分析(聚类)
大数据分析案例-对电信客户流失分析预警预测
大数据分析案例-基于随机森林模型对北京房价进行预测
大数据分析案例-基于RFM模型对电商客户价值分析
大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型
大数据分析案例-基于决策树算法构建员工离职预测模型

大数据分析案例-基于KNN算法对茅台股票进行预测

大数据分析案例-基于多元线性回归算法构建广告投放收益模型
大数据分析案例-基于随机森林算法构建返乡人群预测模型
大数据分析案例-基于决策树算法构建金融反欺诈分类模型

目录

1.项目背景

2.项目简介

2.1项目说明

2.2数据说明

2.3技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.3探索性数据分析

4.4特征工程

4.5模型构建

5.实验总结

源代码


 

1.项目背景

        随着全球医疗健康体系的不断完善和人们健康意识的日益提高,医疗保险作为保障民众健康权益的重要工具,其重要性愈发凸显。然而,医疗保险费用的准确预测一直是保险行业面临的一大挑战。传统的医疗保险费用预测方法往往基于简单的统计模型或专家经验,难以全面、准确地反映影响医疗保险费用的多种复杂因素,从而导致预测结果的不准确和不合理。

        近年来,随着大数据和人工智能技术的迅猛发展,机器学习和数据挖掘方法逐渐在医疗保险费用预测领域展现出巨大的潜力和应用价值。其中,梯度提升决策树回归算法(Gradient Boosting Decision Tree, GBDT)作为一种先进的集成学习算法,因其强大的拟合能力和良好的泛化性能,在医疗保险费用预测领域引起了广泛关注。

        GBDT算法通过将多个弱学习器(如决策树)组合成一个强学习器,能够有效地处理医疗保险费用预测中的非线性关系和复杂交互效应。它不仅能够充分利用历史数据中的信息,还能够自动学习和优化预测模型,从而提高预测的准确性和可靠性。此外,GBDT算法还具有易于实现、鲁棒性强等优点,使得其在医疗保险费用预测领域具有广泛的应用前景。

2.项目简介

2.1项目说明

        本研究旨在基于梯度提升决策树回归算法构建医疗保险费用预测模型,通过挖掘和分析历史医疗数据中的有用信息,实现对医疗保险费用的准确预测。该研究不仅有助于提高医疗保险费用预测的准确性和可靠性,还能够为保险公司提供科学的定价依据和风险控制手段,进而促进医疗保险行业的健康发展。

2.2数据说明

数据集概述:

医保数据集包含了影响医疗费用的各种因素,如年龄、性别、BMI、吸烟状况、儿童数量、地区等。该数据集是训练能够预测新投保人医疗费用的机器学习模型的基础。

其目的是揭示导致保险成本增加的关键因素,帮助公司在定价和风险评估方面做出更明智的决策。

该数据集包含 2772 行和 7 列,包括:

age:年龄

sex:性别

bmi:BMI(身体质量指数)

children:家庭孩子数

smoker:是否吸烟

region:地区

charges:费用

2.3技术工具

Python版本:3.9

代码编辑器:jupyter notebook

3.算法原理

GBDT(Gradient Boosting Decision Tree)是一种常见的集成学习算法,其基本原理是利用多个决策树进行集成,从而提高预测性能。在GBDT中,每个决策树都是基于梯度提升(Gradient Boosting)算法构建的,因此GBDT也被称为梯度提升决策树(Gradient Boosting Decision Tree)。

梯度提升算法的基本思路是,首先构建一个简单的模型(如单个决策树),然后对模型进行改进,使其能够更好地拟合数据。在每一轮迭代中,梯度提升算法都会使用当前模型的预测结果与真实值之间的误差来构建一个新的模型,并将其与当前模型相加。这样,模型的预测结果就会逐步接近真实值,从而提高模型的预测性能。

具体来说,GBDT的算法流程如下:

初始化模型:将目标变量的平均值作为初始模型的预测结果。

迭代训练:在每一轮迭代中,执行以下步骤:

a. 计算残差:用当前模型的预测结果与真实值之间的差值作为残差。

b. 构建新模型:使用残差作为目标变量,构建一棵新的决策树模型。

c. 更新模型:将新模型的预测结果与当前模型的预测结果相加,得到更新后的模型。

返回模型:当迭代次数达到设定的值或者模型的性能满足一定的条件时,返回最终的模型。

在GBDT中,每个决策树都是基于回归树(Regression Tree)算法构建的。在构建每个决策树时,通常会采用贪心策略来选择最优的划分点,以最小化预测误差。同时,为了避免过拟合,通常会对决策树进行剪枝操作。

GBDT算法的优点是能够有效地处理非线性关系和高维数据,具有很强的预测能力和鲁棒性。但是,GBDT算法也存在一些缺点,比如对异常值和噪声数据比较敏感,需要进行特殊处理。此外,由于每个决策树都是串行构建的,因此算法的训练速度较慢。

4.项目实施步骤

4.1理解数据

导入数据分析第三方库并加载数据集

2c3e5c944cc23cb5d236a3397932d8f5.png

查看数据大小

7dbba6630658e8ba4adc38fe7af79c1d.png

查看数据基本信息

1269186bd4d948d055415c2c23eed6f0.png

查看数值型变量的描述性统计

8fc2ebe2f14db4fec75c796412c505c0.png

查看非数值型变量的描述性统计

49dc9ab8ffc126ee4961ee7fad437302.png

4.2数据预处理

统计数据缺失值情况

b54a5efd1e9d49a5c7086f6028169910.png

可以发现没有缺失值

统计数据重复值情况

06d6cf95c5f043047f556be42a8ff00a.png

可以发现共有1435个重复值

删除重复值

9c72686a8bcd9ba13cb6915146863897.png

4.3探索性数据分析

初始化设置

2292ffcaa8ca978b21dc639164474fac.png

ac4df88526ac469c085add31985bd3e7.png

30db8ebbe8d0d9b0d79ae95dcf998d91.png

149f1a47912654468230f3d445c65f37.png

e2daee4a883c20370c99851de201433a.png

d0ccd40cfdd08e5285d131d7f8f112d4.png

15475dc7d549cfd09a5ec9c64c166a9a.png

749bebe3ed5694575a7cec2b296b4bab.png

1eea8bd902c1510aef3852a27ff66409.png

809e094adbb21edc01fa38d0492a7caf.png

c2c37dc5b8a7e035ce14e9c350eb684c.png

f1c49aef29f0c47df4d6e900e73ff6e5.png

5448cf7f58942db698e69565e835f2a5.png

82920a5630946e504089e3b59eeedf30.png69430139c0a0ec883fa41b70abb11fe2.png

5886b44bfe0e3b9a5e4b05e1db43b375.png

e236ba2c2d8002c3559f113c9f6b0b39.png

0a9f6aeeb6031595f44c5b620929d138.png

0c2777c23011d376e4fedb81e8f557ec.png

316b3714ad85cd5149dde1af806074a4.png

ed5297fedf347d60aa1284b8590996b7.png

4.4特征工程

对非数值型变量进行编码处理

85776bfab604bbf990d99f420e28d640.png

c1fb71a31e7f9592c54b7f3c5056c501.png

4.5模型构建

4af69cacb228c8053c57a4ec5573b400.png

82658c29f57d92c9e206c090f106238a.png

构建回归模型

1f0a96edaafb8dbc39bb57256edd7d3f.png

14d54be403f3c6d3a5f0014b495af389.png

评估了各种回归模型对保险收费的预测效果。梯度增强回归R2得分最高为0.90,且其误差也是最小的。

构建分类模型

根据每个值是高于还是低于中位数收费,将连续可变收费转换为二元分类变量charges_category。这允许从回归到分类任务的转变,将数据集分为两个平衡的组:高于和低于中位数收费。在每个类别中具有相等的实例的情况下,对数据集进行分割,有效地训练和测试分类模型,为基于中位数阈值的保险风险分类提供了一种简化的方法。

3ae2280445943a27f1602671b650f546.png

0cdb8e66c7d56681492fe007cc0a0553.png

模型被训练成根据保险费用将个人分为两类:高于或低于中位数。Logistic回归的准确率最高(0.91),KNN分类次之,SVM分类次之。朴素贝叶斯分类准确率最低。逻辑回归的成功表明了强线性关系,有助于有效的基于风险的保险费调整分类。

fb1f596460cc4221ad10585e5a501c34.png

3859d73d67086c3d87caa0fdf129ba0c.png

该图显示了将保险费用分类为高于或低于中位数的ROC曲线。Logistic回归和朴素贝叶斯分类显示出较高的AUC得分,表明表现较好。SVM分类性能稍差,KNN分类性能最差。逻辑回归和朴素贝叶斯分类有效地区分了收费类别,强调了它们在保险任务中的效用。 

5.实验总结

        通过应用梯度提升决策树回归算法构建医疗保险费用预测模型,并基于历史医疗数据进行训练和验证,我们取得了令人满意的预测准确率,达到了91%。这一结果表明,梯度提升决策树回归算法在医疗保险费用预测领域具有显著的优势和有效性。该模型能够准确地捕捉影响医疗保险费用的多种复杂因素,并对其进行有效的预测和分析。

        这一实验结论不仅验证了梯度提升决策树回归算法在医疗保险费用预测中的适用性,也为保险公司提供了一种新的、有效的预测工具。通过利用该模型,保险公司可以更准确地评估风险、制定保费策略,提高定价的公平性和科学性,进一步满足广大客户的健康保险需求。同时,这也为医疗保险行业的数据驱动决策提供了新的思路和方法,有助于推动行业的持续创新和发展。

        总的来说,梯度提升决策树回归算法在医疗保险费用预测领域展现出了良好的预测性能和应用潜力,为医疗保险行业的风险管理和业务发展提供了有力的支持。

心得与体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

源代码

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

df = pd.read_csv("medical_insurance.csv")
df.head()
df.shape
df.info()
df.describe()
df.describe(include='O')
df.isnull().sum()
df.duplicated().sum()
df.drop_duplicates(inplace=True)
df.duplicated().sum()
# 设置背景色为黑色
plt.style.use('dark_background')
# 设置红色色调
red_palette = sns.dark_palette("red", n_colors=3)
# 可视化1:年龄分布
plt.figure(figsize=(10, 6))
sns.histplot(df['age'], color=red_palette[0])
plt.title('Distribution of Age', color='red')
plt.xlabel('Age', color='red')
plt.ylabel('Count', color='red')
plt.show()
# 可视化2:BMI分布
plt.figure(figsize=(10, 6))
sns.histplot(df['bmi'], color=red_palette[1],kde=True)
plt.title('Distribution of BMI', color='red')
plt.xlabel('BMI', color='red')
plt.ylabel('Count', color='red')
plt.show()
# 可视化3:儿童人数分布
plt.figure(figsize=(10, 6))
sns.countplot(data=df, x='children', palette=red_palette)
plt.title('Distribution of Number of Children', color='red')
plt.xlabel('Number of Children', color='red')
plt.ylabel('Count', color='red')
plt.show()
# 可视化4:性别分布
plt.figure(figsize=(8, 5))
sns.countplot(data=df, x='sex', palette=red_palette)
plt.title('Distribution of Sex', color='red')
plt.xlabel('Sex', color='red')
plt.ylabel('Count', color='red')
plt.show()
# 可视化5:吸烟状况的分布
plt.figure(figsize=(8, 5))
sns.countplot(data=df, x='smoker', palette=red_palette)
plt.title('Distribution of Smoking Status', color='red')
plt.xlabel('Smoker', color='red')
plt.ylabel('Count', color='red')
plt.show()
# 可视化6:区域分布
plt.figure(figsize=(10, 6))
sns.countplot(data=df, x='region', palette=red_palette)
plt.title('Distribution of Region', color='red')
plt.xlabel('Region', color='red')
plt.ylabel('Count', color='red')
plt.show()
# 可视化7:按吸烟状况分列的收费箱线图
plt.figure(figsize=(10, 6))
sns.boxplot(data=df, x='smoker', y='charges', palette=red_palette)
plt.title('Charges by Smoking Status', color='red')
plt.xlabel('Smoker', color='red')
plt.ylabel('Charges', color='red')
plt.show()
# 可视化8:按区域收费的箱线图
plt.figure(figsize=(12, 6))
sns.boxplot(data=df, x='region', y='charges', palette=red_palette)
plt.title('Charges by Region', color='red')
plt.xlabel('Region', color='red')
plt.ylabel('Charges', color='red')
plt.show()
# 可视化9:按性别排列的小提琴图
plt.figure(figsize=(10, 6))
sns.violinplot(data=df, x='sex', y='charges', palette=red_palette)
plt.title('Charges by Sex', color='red')
plt.xlabel('Sex', color='red')
plt.ylabel('Charges', color='red')
plt.show()
# 可视化10:相关关系热力图
plt.figure(figsize=(12,9))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm', fmt=".2f")
plt.show()
# 将性别、吸烟、区域变量进行编码处理
df['sex'].replace(to_replace={'female':0,'male':1},inplace=True)
df['smoker'].replace(to_replace={'no':0,'yes':1},inplace=True)
df['region'].replace(to_replace={'southeast':0,'southwest':1,
                                 'northwest':2,'northeast':3},inplace=True)
df.head()
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression, Ridge, LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, r2_score, mean_squared_error, mean_absolute_error, roc_curve, auc
# 准备建模数据
X =df.drop('charges', axis=1)
y = df['charges']
# 拆分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 准备回归模型
models = {
    "Linear Regression": LinearRegression(),
    "Ridge Regression": Ridge(),
    "Decision Tree Regression": DecisionTreeRegressor(),
    "Random Forest Regression": RandomForestRegressor(),
    "Gradient Boosting Regression": GradientBoostingRegressor(),
}
# 训练并评估模型
print("Regression Models Evaluation:")
for name, model in models.items():
    model.fit(X_train, y_train)
    predictions = model.predict(X_test)
    r2_score_model = r2_score(y_test, predictions)
    mse_score = mean_squared_error(y_test, predictions)
    mae_score = mean_absolute_error(y_test, predictions)

    print("Model:", name)
    print("R2 Score:", r2_score_model)
    print("MSE Score:", mse_score)
    print("MAE Score:", mae_score)
    print()
评估了各种回归模型对保险收费的预测效果。梯度增强回归R2得分最高为0.90,且其误差也是最小的。
根据每个值是高于还是低于中位数收费,将连续可变收费转换为二元分类变量charges_category。这允许从回归到分类任务的转变,将数据集分为两个平衡的组:高于和低于中位数收费。在每个类别中具有相等的实例的情况下,对数据集进行分割,有效地训练和测试分类模型,为基于中位数阈值的保险风险分类提供了一种简化的方法。
# 准备构建分类模型
# 构建一个分类指标,若费用大于中位数则为1,反之则为0
df['charges_category'] = (df['charges'] > df['charges'].median()).astype(int)
y_categorical = df['charges_category']
X_train_cat, X_test_cat, y_train_cat, y_test_cat = train_test_split(X, y_categorical, test_size=0.2, random_state=42)
# 分类模型
class_models = {
    "Logistic Regression": LogisticRegression(max_iter=1000),
    "KNN Classification": KNeighborsClassifier(),
    "SVM Classification": SVC(probability=True),
    "Naive Bayes Classification": GaussianNB()
}
# 训练并评估模型
print("\nClassification Models Evaluation:")
for name, model in class_models.items():
    model.fit(X_train_cat, y_train_cat)
    if name == "SVM Classification":
        predictions = model.decision_function(X_test_cat)
    else:
        predictions = model.predict_proba(X_test_cat)[:, 1]
    accuracy = accuracy_score(y_test_cat, model.predict(X_test_cat))
    print(f"{name}: Accuracy = {accuracy:.2f}")
模型被训练成根据保险费用将个人分为两类:高于或低于中位数。Logistic回归的准确率最高(0.91),KNN分类次之,SVM分类次之。朴素贝叶斯分类准确率最低。逻辑回归的成功表明了强线性关系,有助于有效的基于风险的保险费调整分类。
sns.set(font='SimHei')
plt.figure(figsize=(10, 8))
for name, model in class_models.items():
    if name == "SVM Classification":
        predictions = model.decision_function(X_test_cat)
    else:
        predictions = model.predict_proba(X_test_cat)[:, 1]
    fpr, tpr, _ = roc_curve(y_test_cat, predictions)
    roc_auc = auc(fpr, tpr)
    plt.plot(fpr, tpr, label=f'{name} (area = {roc_auc:.2f})')

plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve Comparison')
plt.legend(loc="lower right")
plt.show()
该图显示了将保险费用分类为高于或低于中位数的ROC曲线。Logistic回归和朴素贝叶斯分类显示出较高的AUC得分,表明表现较好。SVM分类性能稍差,KNN分类性能最差。逻辑回归和朴素贝叶斯分类有效地区分了收费类别,强调了它们在保险任务中的效用。

 

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

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

相关文章

轩凯生物被警示,财务内控不规范,华泰证券又被处罚

作者:Tracy 来源:IPO魔女 11月21日,南京轩凯生物科技股份有限公司(简称“轩凯生物”)被交易所下达书面警示的自律监管函。同时其保荐机构华泰联合证券和会计师事务所天衡,均受到监管处罚。这是今年来&…

IoTDB 常见问题 QA 第二期

关于 IoTDB 的 Q&A IoTDB Q&A 第二期来啦~我们将定期汇总社区讨论频繁的问题,并展开进行详细回答,通过积累常见问题“小百科”,方便大家使用 IoTDB。 Q1:集群扩容方法 问题 问题1:当 IoTDB 集群的存储占用达到…

RT-DETR融合[CVPR2024]Starnet中的star block特征提取模块

RT-DETR使用教程: RT-DETR使用教程 RT-DETR改进汇总贴:RT-DETR更新汇总贴 《Rewrite the Stars》 一、 模块介绍 论文链接:https://arxiv.org/abs/2403.19967 代码链接:https://github.com/ma-xu/Rewrite-the-Stars/tree/main 论…

Java web - 后端开发

一 Maven Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。 Maven的作用

Unity学习笔记(二)如何制作角色动画

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 创建一个角色 我们的目的是创建一个可移动、跳跃、冲刺等动作的角色 需要的组件:Rigidbody(用于创建物理规则)、Collider(用于检测碰撞&am…

Pytest-Bdd-Playwright 系列教程(16):标准化JSON报告Gherkin格式命令行报告

Pytest-Bdd-Playwright 系列教程(16):标准化JSON报告&Gherkin格式命令行报告 前言一、创建Feature文件二、创建步骤定义文件三、生成Cucumber格式的JSON报告四、使用Gherkin格式的命令行报告五、将BDD报告集成到Jenkins中总结 前言 在自动…

harbor镜像仓库搭建

Harbor简介 Harbor的发展背景和现状 Harbor项目起始于2014年左右,当时正值容器技术和微服务架构迅速崛起的时期。随着越来越多的企业开始采用容器化部署应用,对于私有镜像管理的需求也日益增长。传统的解决方案要么缺乏必要的企业级特性(如访问控制、安全性和可扩展性),…

Windows安装Jira

下载 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理员身份安装,否则弹出以下提醒 创建和配置MySQL数据库:参照 Connecting Jira applicat…

【企业微信自建应用-前端篇】企业微信自建应用开发流程详细介绍

前言 最近接到需求,需要我在企业微信端自建一个应用,用来接受PC端派发的工单,告警,公告等内容。 这里写一个帖子汇总一下我经历的全流程开发,当然这是基础的流程啊。因为功能要求也不高。后面如果开发更多的东西再补充…

[每周一更]-(第127期):Go新项目-Gin中使用超时中间件实战(11)

在项目不断迭代过程中,发现基础架构中,没有进行超时控制,有些接口由于网络延迟以及远程调用等情况存在请求时间过长的问题,消耗了资源,也降低了用户体验,这一讲我们聊下超时控制中间件,来完善我…

定时/延时任务-Kafka时间轮源码分析

文章目录 1. 概要2. TimingWheel2.1 核心参数2.2 添加任务2.3 推进时间 3. TimerTaskList3.1 添加节点3.2 删除节点3.3 刷新链表3.4 队列相关 4. 时间轮链表节点-TimerTaskEntry5. TimerTask6. Timer 和 SystemTimer - 设计降级逻辑7. 上层调用8. 小结 1. 概要 时间轮的文章&a…

【传感器技术】第6章 压电式传感器,压电材料,压电效应,电压放大器

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

端点鉴别、安全电子邮件、TLS

文章目录 端点鉴别鉴别协议ap 1.0——发送者直接发送一个报文表明身份鉴别协议ap 2.0——ap1.0 的基础上,接收者对报文的来源IP地址进行鉴别鉴别协议ap 3.0——使用秘密口令,口令为鉴别者和被鉴别者之间共享的秘密鉴别协议ap 3.1——对秘密口令进行加密&…

XDOJ 877 图的深度优先遍历

题目:图的深度优先遍历 问题描述 已知无向图的邻接矩阵,以该矩阵为基础,给出深度优先搜索遍历序列,并且给出该无向图的连通分量的个数。在遍历时,当有多个点可选时,优先选择编号小的顶点。(即…

Spring--07-01---@Transactional注解失效的8大场景

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Transactiona1.默认回滚:RuntimeException 1.Transactional注解失效的8大场景1.数据库引擎是否支持事务3.方法不是public的4.自身调用5.数据源没有配置事…

拆解大语言模型RLHF中的PPO

** 拆解大语言模型RLHF中的PPO ** 参考链接:https://zhuanlan.zhihu.com/p/645225982 为什么大多数介绍RLHF的文章,一讲到PPO算法的细节就戛然而止了呢?要么直接略过,要么就只扔出一个PPO的链接。然而LLM PPO跟传统的PPO还是有…

【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)

【工业机器视觉】基于深度学习的仪表盘识读(读数识别)(3)-CSDN博客 训练与预测 Ultralytics YOLO指的是由Ultralytics公司开发的一系列基于YOLO(You Only Look Once)架构的目标检测算法。YOLO是一种实时目标检测系统,它…

Qt Pro 常用配置

Part1: Summary Qt 开发中 Pro 文件的内容很多,需要不断的去学习和使用,现系统性的整理一下。以备录; 1.创建pro文件 1.1 步骤: Qt Creator--->New Project--->应用程序--->Qt Widgets Application--->名称为&…

ChatGPT生成测试用例的最佳实践(一)

前面介绍的案例主要展示了ChatGPT在功能、安全和性能测试用例生成方面的应用和成果。通过ChatGPT生成测试用例,测试团队不仅可以提升工作效率,还可以加快测试工作的速度,尽早发现被测系统中的问题。问题及早发现有助于提高软件的质量和用户满…

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string

文章目录 知识回顾一、栈(Stack)和堆(Heap)1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢?值类型引用类型 2、总结 三、特殊的引用类…