大数据分析案例-基于XGBoost算法构建居民收入分类预测模型

news2024/9/26 5:16:14

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

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


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

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

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

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

目录

1.背景及意义

2.项目简介

2.1项目说明

2.2数据说明

2.3技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.3探索性数据分析

4.3.1分析目标变量数量分布情况 

4.3.2分析男女比例情况

4.3.3分析年龄分布情况

4.3.4分析不同年龄和性别对于收入的影响

4.3.5分析不同种族的分布情况

4.3.6分析不同职业的数量情况

4.4特征工程

4.5模型构建

4.6特征重要性

4.7模型预测

5.实验总结

源代码


1.背景及意义

        居民收入预测分类研究是一种基于数据分析和机器学习算法的研究,旨在根据个人或家庭的背景信息和经济指标,预测其未来的收入水平。这种研究对于金融机构、政府部门和企业等具有重要的实际应用价值。

        首先,居民收入是社会经济发展的重要指标之一,对于政府决策和宏观经济调控具有重要意义。通过收入预测分类研究,政府可以更加准确地了解不同人群的收入状况,有针对性地实施相应政策,促进经济发展和社会稳定。

        其次,金融机构和企业也需要了解客户的收入水平,以便更好地为客户提供金融服务和产品。通过居民收入预测分类研究,金融机构和企业可以更好地了解客户的经济状况,制定更加个性化的金融方案和产品,提高客户满意度和企业盈利能力。

        此外,居民收入预测分类研究还有助于提高社会公平性和经济包容性。通过分析不同人群的收入水平和影响因素,政府和社会组织可以更好地了解不同人群的经济状况,有针对性地制定扶贫政策和社会福利计划,实现社会公平和经济包容。

        综上所述,居民收入预测分类研究对于政府、金融机构、企业和社会组织等都具有重要的实际应用价值,有助于推动社会经济发展和提高社会公平性和经济包容性。

2.项目简介

2.1项目说明

        本项目通过分析加州大学机器学习存储库中的收入分类数据集,找出影响收入的主要因素,最后使用机器学习算法构建收入分类预测模型。本项目是一个二分类问题。

2.2数据说明

        本数据集来源于kaggle,原始数据集共有32561条数据,15列特征变量,具体变量说明如下:

  • age: continuous.
  • workclass: Private, Self-emp-not-inc, Self-emp-inc, Federal-gov, Local-gov, State-gov, Without-pay, Never-worked.
  • fnlwgt: continuous.
  • education: Bachelors, Some-college, 11th, HS-grad, Prof-school, Assoc-acdm, Assoc-voc, 9th, 7th-8th, 12th, Masters, 1st-4th, 10th, Doctorate, 5th-6th, Preschool.
  • education-num: continuous.
  • marital-status: Married-civ-spouse, Divorced, Never-married, Separated, Widowed, Married-spouse-absent, Married-AF-spouse.
  • occupation: Tech-support, Craft-repair, Other-service, Sales, Exec-managerial, Prof-specialty, Handlers-cleaners, Machine-op-inspct, Adm-clerical, Farming-fishing, Transport-moving, Priv-house-serv, Protective-serv, Armed-Forces.
  • relationship: Wife, Own-child, Husband, Not-in-family, Other-relative, Unmarried.
  • race: White, Asian-Pac-Islander, Amer-Indian-Eskimo, Other, Black.
  • sex: Female, Male.
  • capital-gain: continuous.
  • capital-loss: continuous.
  • hours-per-week: continuous.
  • native-country: United-States, Cambodia, England, Puerto-Rico, Canada, Germany, Outlying-US(Guam-USVI-etc), India, Japan, Greece, South, China, Cuba, Iran, Honduras, Philippines, Italy, Poland, Jamaica, Vietnam, Mexico, Portugal, Ireland, France, Dominican-Republic, Laos, Ecuador, Taiwan, Haiti, Columbia, Hungary, Guatemala, Nicaragua, Scotland, Thailand, Yugoslavia, El-Salvador, Trinadad&Tobago, Peru, Hong, Holand-Netherlands.

2.3技术工具

Python版本:3.10

代码编辑器:jupyter notebook

3.算法原理

 XGBoost(Extreme Gradient Boosting)是一种基于决策树集成的机器学习算法,它使用梯度提升方法(Gradient Boosting)来训练决策树。XGBoost的主要优点是速度快,准确性高,可扩展性好,因此在机器学习和数据科学领域中非常流行。

下面是XGBoost的算法原理:

1.损失函数:

        XGBoost的目标是最小化损失函数,其中损失函数由两个部分组成:正则化项和目标函数。正则化项用于防止过拟合,目标函数用于衡量模型预测结果与实际结果之间的误差。常见的目标函数包括平方误差损失函数、Logistic损失函数等。

2.决策树:

        XGBoost使用决策树作为基本模型,而不是使用传统的线性模型。决策树由节点和叶子节点组成,每个节点表示一个特征,每个叶子节点表示一个类别或一个实数值。决策树是通过递归地将数据集分割为越来越小的子集来构建的。

3.梯度提升:

        XGBoost使用梯度提升方法训练决策树模型。梯度提升是一种迭代的方法,每次迭代都训练一个新的决策树模型,它的预测结果与前面所有模型的预测结果相加得到最终的预测结果。在每一次迭代中,XGBoost计算残差的梯度,并用残差更新目标函数。然后,XGBoost使用这个更新后的目标函数训练一个新的决策树模型。

4.正则化:

        XGBoost通过正则化方法防止过拟合。常用的正则化方法包括L1正则化和L2正则化。L1正则化可以使得一些决策树的权重为0,从而剪枝一些不必要的决策树。L2正则化可以使得决策树的权重变得更加平滑,从而提高模型的泛化能力。

5.优化算法:

        XGBoost使用了一些优化算法来提高训练速度和准确性。其中最重要的优化算法是加权梯度下降算法(Weighted Gradient Descent)。加权梯度下降算法可以根据损失函数的梯度和二阶导数来自适应地调整学习率,从而提高模型的准确性。

XGBoost算法的具体步骤如下:

  1. 初始化模型。设定迭代次数,学习率和决策树的深度等超参数。

  2. 对于每一次迭代:

    a. 计算负梯度。根据当前模型在训练数据上的表现,计算每个样本的负梯度,用于构建下一棵决策树。

    b. 构建决策树。根据负梯度的大小,构建一棵新的决策树。

    c. 计算叶子节点权重。对于每个叶子节点,计算它的权重,以最小化损失函数。

    d. 更新模型。将新的决策树加入模型,并根据学习率更新模型参数。

  3. 返回最终的模型。

XGBoost的优点在于它的泛化能力强,可以处理高维度、稀疏数据,并且有很好的防止过拟合的机制。同时,它的速度也非常快,可以处理大规模的数据集。因此,XGBoost已经成为了机器学习领域中应用最广泛的算法之一。

4.项目实施步骤

4.1理解数据

首先使用pandas导入收入分类数据集并查看前五行

 查看数据大小

可以发现数据共有32561行,15列

查看数据基本信息

 从结果中我们可以看出各变量的数据类型以及空值情况。

查看数值型描述性统计

 从结果中可看出各个数值型变量的均值、方差、最大最小值、四分位数等信息。

查看非数值型数据描述性统计

4.2数据预处理

首先统计一下各特征的缺失值情况

 通过结果发现各特征都不存在缺失值,故不需要处理

统计一下数据集中的重复值个数

 通过结果我们发现数据集中共有24个重复数据,需要进行处理。这里我们直接删除即可。

通过肉眼发现,原始数据集中虽然没有空值,但是有很多“?”,所以这里我们需要对其进行处理。原理是遍历所有数据,如果发现值为‘?’则将其设为空值,否则直接返回值本身。

 

经过前面的处理后,我们发现异常的数据主要集中在workclass、occupation和native-country这三列,由于数据量不大,我们直接删除即可。

4.3探索性数据分析

首先导入可视化用到的第三方库

4.3.1分析目标变量数量分布情况 

 通过结果我们发现,原始数据集中<=50k的数据显著多于>50k的,说明整体上收入少的人数还是占多数,也符合实际。

4.3.2分析男女比例情况

 

从结果中我们发现数据集中男性占据多数为67.57%,女性只有32.43%。

4.3.3分析年龄分布情况

 从结果来看,年龄主要集中在20-50岁之间,60岁以上还是占据不少

4.3.4分析不同年龄和性别对于收入的影响

 从结果中我们发现,在<=50k的群体中,女性的年龄平均大于男性,而在>50k的群体中,男性的年龄平均大于女性。<=50k的群体年龄普遍集中30多岁,而>50k的群体年龄普遍集中在40多岁。

4.3.5分析不同种族的分布情况

 从结果看出,该数据集中绝大多数为白人,其次是黑人,其他种族占比较少。

4.3.6分析不同职业的数量情况

4.4特征工程

首先处理收入变量,将<=50k用0表示,>50k用1表示。其次是性别,用0表示女性,1表示男性。

但是这样处理的话效率较低,所以我们直接使用LabelEncoder进行编码 

 接着准备数据,及目标变量和特征变量,然后拆分数据集为训练集和测试集,其中测试集比例为0.2。

4.5模型构建

首先构建逻辑回归模型,并输出模型的各项评估指标

 

从模型准确率和ROC曲线看出,逻辑回归模型效果较差。

构建决策树模型

 

 决策树的整体指标优于逻辑回归,但是效果还是不够好。

构建随机森林模型

 

随机森林模型的各项指标明显高于前面两种模型,我们看看还有没有更好的模型。

构建XGBoost模型

 

可以看出XGBoost模型的各项指标略微高于随机森林,所以我们最终选取XGBoost模型作为本次实验的最终的算法模型。 

4.6特征重要性

接下来我们使用前面的XGBoost来打印特征重要性并可视化

 

 从结果我们看出relationship关系最收入影响最大。

4.7模型预测

我们将前面模型预测的结果进行汇总并随机抽取10个来检测一下:

 从结果我们发现,随机抽取10个,预测正确的个数为9个,模型效果还不错。

5.实验总结

        本次实验我们分析了美国加州地区的收入数据集,我们发现该地区主要以白人、男性、收入<=50k,年龄处于20-50的群体为主,最后构建的收入分类模型准确率为0.87,模型效果还不错,还有待提高。

心得与体会:

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

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

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

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

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

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

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

源代码

import pandas as pd
import warnings
warnings.filterwarnings('ignore')

data = pd.read_csv('income_evaluation.csv') # 加载数据集
data.head() # 查看数据前五行
data.shape # 查看数据大小
data.info()  # 查看数据基本信息
data.describe()  # 查看数值型数据的描述性统计
data.describe(include='O')  # 查看非数值型数据的描述性统计
数据预处理
data.isnull().sum()  # 统计各特征的缺失值情况
data.duplicated().sum()  # 统计数据集中的重复值个数
data.drop_duplicates(inplace=True)  # 删除重复值
print(data.shape)
data.duplicated().sum()
# 异常值处理
def disploy_character(x):
    if x == ' ?':
        return None
    else:
        return x

for col in data.columns.to_list():
    data[col] = data[col].apply(disploy_character)
data.isnull().sum()
data.dropna(inplace=True)  # 删除缺失值
data.shape
数据可视化
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font='SimHei')
# 查看目标变量的数量分布情况
sns.countplot(data=data,x='income')
plt.show()
# 分析男女比例情况
y = data['sex'].value_counts().values.tolist()
labels = data['sex'].value_counts().index.to_list()
plt.pie(y,labels=labels, # 设置饼图标签
        autopct='%.2f%%', # 格式化输出百分比
       )
plt.show()
# 分析年龄分布情况
sns.histplot(data=data,x='age',kde=True)
plt.show()
# 分析不同年龄和性别对于收入的影响
sns.boxenplot(data=data,x='income',y='age',hue='sex')
plt.show()
# 分析不同种族的数量
data['race'].value_counts().plot(kind='bar')
plt.show()
# 分析不同职业的数量
data['occupation'].value_counts().plot(kind='barh')
plt.show()
特征工程
# 处理收入特征,用0和1表示
data['income'].replace(to_replace={' <=50K':0,' >50K':1},inplace=True) 
# 处理性别特征,用0和1表示
data['sex'].replace(to_replace={' Female':0,' Male':1},inplace=True)  
from sklearn.preprocessing import LabelEncoder
for col in data.describe(include='O').columns.to_list():
    data[col] = LabelEncoder().fit_transform(data[col])

data.head()
# 准确数据
X = data.drop('income',axis=1)
y = data['income']
# 划分数据集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
print('训练集大小:',X_train.shape[0])
print('测试集大小:',X_test.shape[0])
# from sklearn.model_selection import train_test_split
构建模型
# 构建逻辑回归模型
from sklearn.metrics import accuracy_score,confusion_matrix,classification_report,auc,roc_curve
from sklearn.linear_model import LogisticRegression
lg = LogisticRegression()
lg.fit(X_train,y_train)
# 模型评估
y_pred = lg.predict(X_test)
print('模型准确率:',accuracy_score(y_test,y_pred))
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))
# 画出ROC曲线
y_prob = lg.predict_proba(X_test)[:,1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_prob) 
roc = auc(false_positive_rate, true_positive_rate)
plt.title('ROC')
plt.plot(false_positive_rate,true_positive_rate, color='red',label = 'AUC = %0.2f' % roc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],linestyle='--')
plt.axis('tight')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
# 构建决策树模型
from sklearn.metrics import accuracy_score,confusion_matrix,classification_report,auc,roc_curve
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier()
tree.fit(X_train,y_train)
# 模型评估
y_pred = tree.predict(X_test)
print('模型准确率:',accuracy_score(y_test,y_pred))
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))
# 画出ROC曲线
y_prob = tree.predict_proba(X_test)[:,1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_prob) 
roc = auc(false_positive_rate, true_positive_rate)
plt.title('ROC')
plt.plot(false_positive_rate,true_positive_rate, color='red',label = 'AUC = %0.2f' % roc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],linestyle='--')
plt.axis('tight')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
# 构建随机森林模型
from sklearn.metrics import accuracy_score,confusion_matrix,classification_report,auc,roc_curve
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier()
forest.fit(X_train,y_train)
# 模型评估
y_pred = forest.predict(X_test)
print('模型准确率:',accuracy_score(y_test,y_pred))
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))
# 画出ROC曲线
y_prob = forest.predict_proba(X_test)[:,1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_prob) 
roc = auc(false_positive_rate, true_positive_rate)
plt.title('ROC')
plt.plot(false_positive_rate,true_positive_rate, color='red',label = 'AUC = %0.2f' % roc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],linestyle='--')
plt.axis('tight')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
# 构建GBDT梯度提升决策树模型
from sklearn.metrics import accuracy_score,confusion_matrix,classification_report,auc,roc_curve
from sklearn.ensemble import GradientBoostingClassifier
gbdt = GradientBoostingClassifier()
gbdt.fit(X_train,y_train)
# 模型评估
y_pred = gbdt.predict(X_test)
print('模型准确率:',accuracy_score(y_test,y_pred))
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))
# 画出ROC曲线
y_prob = gbdt.predict_proba(X_test)[:,1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_prob) 
roc = auc(false_positive_rate, true_positive_rate)
plt.title('ROC')
plt.plot(false_positive_rate,true_positive_rate, color='red',label = 'AUC = %0.2f' % roc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],linestyle='--')
plt.axis('tight')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
# 构建XGBoost模型
from sklearn.metrics import accuracy_score,confusion_matrix,classification_report,auc,roc_curve
from xgboost import XGBClassifier
xgb = XGBClassifier()
xgb.fit(X_train,y_train)
# 模型评估
y_pred = xgb.predict(X_test)
print('模型准确率:',accuracy_score(y_test,y_pred))
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))
# 画出ROC曲线
y_prob = xgb.predict_proba(X_test)[:,1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_prob) 
roc = auc(false_positive_rate, true_positive_rate)
plt.title('ROC')
plt.plot(false_positive_rate,true_positive_rate, color='red',label = 'AUC = %0.2f' % roc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],linestyle='--')
plt.axis('tight')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
#打印特征重要性评分
import numpy as np
feat_labels = X_train.columns[0:]
importances = xgb.feature_importances_
indices = np.argsort(importances)[::-1]
index_list = []
value_list = []
for f,j in zip(range(X_train.shape[1]),indices):
    index_list.append(feat_labels[j])
    value_list.append(importances[j])
    print(f + 1, feat_labels[j], importances[j])
plt.figure(figsize=(10,6))
plt.barh(index_list[::-1],value_list[::-1])
plt.yticks(fontsize=12)
plt.title('Feature Importance Sorted',fontsize=14)
plt.show()
# 模型预测
res = pd.DataFrame()
res['真实值'] = y_test
res['预测值'] = y_pred
res.sample(10)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

互联网明厨亮灶智慧监管算法 yolov7

互联网明厨亮灶智慧监管系统基于pythoyolov7网络模型AI视觉图像分析技术&#xff0c;互联网明厨亮灶智慧监管算法模型可以识别人员行为及穿戴是否合规&#xff0c;不穿厨师服、不按要求穿戴厨师帽或者佩戴口罩和手套、行为如违规在后厨抽烟、出现老鼠等情景。近几年来&#xff…

数字化转型导师坚鹏:数字化时代企业管理变革与创新营销

数字化时代企业管理变革与创新营销 课程背景&#xff1a; 很多饮水机企业存在以下问题&#xff1a; 不清楚数字化时代企业面临的机遇与挑战&#xff1f; 不知道如何利用大数据发现问题与机会&#xff1f; 不清楚如何进行精准的数字化营销&#xff1f; 不知道如何进行…

【ChatGPT】ChatGPT+MindShow三分钟生成PPT

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 第一步&#xff1a;获取PPT内容大概&#xff1a; 1.打开ChatGPT镜像 2.向他提问&#xff0c;提问格式如下&#xff0c;主题替换成你想获得的信息。比如某本书的拆解&#xff0c;…

数据可视化第二版-拓展-网约车分析案例

文章目录 数据可视化第二版-拓展-网约车分析案例竞赛介绍 1等奖作品-虾虾蟹蟹哈哈的作品引言&#xff1a;背景度量指标 & 结论过程数据与思考一、数据处理二、大盘存量数据一览1. 分城市关键指标变化情况2. 各项指标相关性分析 三、数量维度分析1. 城市间比较1.1 工作日 vs…

HTML和CSS

1、概述 超文本标记语言&#xff08;HyperText Markup Language&#xff09;简称&#xff1a;HTML&#xff1b;是一种用于创建网页的标准标记语言。HTML 不是一种编程语言&#xff0c;而是一种标记语言&#xff1b;HTML文档也叫做 web 页面。 运行后的浏览器页面 我的第一个标…

鲁大师4月安卓新机性能/流畅榜:ROG游戏手机7摘得性能桂冠 vivo登顶流畅榜

性能榜&#xff1a;ROG 游戏手机7众望所归&#xff0c;摘得性能桂冠 2023年4月的手机市场也是异常火爆&#xff0c;各大厂商纷纷推出自己的旗舰手机。骁龙8 Gen2仍然是厂商们的首选芯片&#xff0c;不论是“小米照相机”、vivo折叠机还是ROG 游戏机&#xff0c;他们都纷纷搭载了…

你不能不知道的string类的基础知识

文章目录 前言string类1. 为什么要学习string类1.1 C语言中的字符串不够好用 2. 标准库中的string类2.1 string类(了解)2.2 string类的常用接口说明2.3 string类对象的容量操作2.4string类对象的访问及遍历操作2.5 string类对象的修改操作2.6 string类非成员函数2.7 vs和g下str…

《花雕学AI》大揭秘:ChatGPT 如何让你的聊天机器人更智能、更有趣、更有用

你是否想过有一个可以和你聊天、陪你玩耍、帮你学习、给你创意的机器人&#xff1f;如果你的答案是肯定的&#xff0c;那么你一定会喜欢 ChatGPT。 ChatGPT 是一个基于 GPT-3 或者 GPT-4 技术的聊天机器人&#xff0c;可以与人类进行自然和流畅的对话。GPT-4 是目前最先进的自…

[Gitops--8]微服务前置中间件部署

微服务前置中间件部署 1. MySQL主从 1.1 创建持久化存储 使用project-admin账号 进入sangomall项目 [存储],[存储卷],sangomall-mysql-master-pvc storageclass创建详见K8s集群中部署KubeSphere 2.1章节 在k8s环境下可以看到这个sc rootks-master:~/yaml# kubectl get sc NA…

Cadence Allegro(1):手动PCB封装制作(以TYPE-C 16Pin为例)

Cadence Allegro 16.6&#xff08;1&#xff09;&#xff1a;手动PCB封装制作&#xff08;以TYPE-C 16Pin为例&#xff09; 前提摘要&#xff1a; PCB设计软件版本&#xff1a; 焊盘设计 &#xff1a;Pad Designer 16.6PCB设计 &#xff1a;PCB Editor 16.6 个人说明&#xf…

【HarmonyOS】自定义组件之ArkUI实现通用标题栏组件

【关键字】 标题栏、常用内置组件整合、ArkUI、自定义组件 1、写在前面 在上一篇文章中我们通过Java语言实现了一个通用的标题栏组件&#xff0c;有需要的可以看下&#xff0c;文章地址&#xff1a; 华为开发者论坛 现在很多朋友都已经转战ArkTS语言了&#xff0c;那么今天…

项目集的定义及管理

一、什么是项目集 项目集是相互关联且被协调管理的项目、子项目集和项目集活动&#xff0c;以便获得分别管理所无法获 得的效益。 以项目集的形式管理项目、子项目集及项目集活动能确保项目集组件的战略和工作计划根据各组 件的成果做出相应调整&#xff0c;或者按照发起组织的…

PWM控制舵机

文章目录 运行环境&#xff1a;1.1 原理1)A板原理图2)PA8引脚配置3)定时器Timers配置 2.1代码解释1)定时器1初始化函数2)启动定时器中断3)启动PWM/设置占空比4)launch设置5) 编译调试 3.1实验效果 运行环境&#xff1a; ubuntu18.04.melodic 宏基暗影骑士笔记本 stm32f427IIH6…

JAVA常用的工具类

文章目录 1 集合工具类1.1 java.util.Collections1.1.1 基本操作1.1.2 转换线程安全集合 1.2 org.springframework.util.CollectionUtils1.3 org.apache.commons.collections.CollectionUtils1.4 org.apache.commons.lang.ArrayUtils1.5 org.apache.commons.lang3.ArrayUtils1.…

[Java] 中的具体集合

文章目录 集合根接口List列表&#xff08;线性表&#xff09;Queue & Deque双端队列 Set集合HashSet源码应用 TreeSet源码 Map映射Map的底层实现HashMapLinkedHashMapTreeMap Maps methodcompute()merge()replace()remove() Stream流Collections工具类 集合表示一组对象&am…

Reactor 第九篇 WebFlux重构个人中心,效果显著

1 重构背景 原有的开发人员早已离职&#xff0c;代码细节没人知道&#xff0c;经过了一段时间的维护&#xff0c;发现有以下问题&#xff1a; 个人中心系统的特征就是组装各个业务的接口&#xff0c;输出个人中心业务需要的数据&#xff0c;整个系统调用了几十个第三方业务线的…

moment在vue的使用

第一步&#xff1a;安装moment npm install moment --save-dev第二步&#xff1a;在使用moment的地方引入moment import moment from "moment"; monent的方法&#xff1a; &#xff08;1&#xff09;moment([日期])&#xff1a; 获取当前日期或指定日期&#xff…

pytorch学习率设置——optimizer.param_groups、对不同层设置学习率、动态调整学习率。

文章目录 前言1、关于optimizer.param_groups2、设置学习率3、optim 提供的优化器 前言 我的需求&#xff1a;我需要在yolov7中更改其中一层的学习率&#xff0c;但yolov7的学习率是随着eporch的变化动态变化的。 1、关于optimizer.param_groups “param_groups” 是 Pytorch…

LeetCode1047. 删除字符串中的所有相邻重复项

1047. 删除字符串中的所有相邻重复项 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一…

RabbitMQ 工作队列模型(任务队列)

任务模型 概念 ​ 当消息处理比较耗时的时候&#xff0c;可能生产消息的速度大于消费的速度&#xff0c;长此以往&#xff0c;就会导致消息堆积&#xff0c;无法及时处理&#xff0c;此时可以使用任务模型&#xff0c;当多个消费者绑定一个队列&#xff0c;共同消费其中的消息…