CatBoost算法模型实现贷款违约预测


前言

此篇文章为整个Boost(提升方法)集成算法模型的终章,前几篇文章依次结合详细项目案例讲解了AdaBoost、GBDT、XGBoost、LighGBM共四个常用的集成算法模型,每一篇文章都包含实战项目以及可运行代码。仅通过看一遍文章不去实践是很难掌握集成算法模型的,其中很多思想和优化参数的方法需要长期使用才能掌握,集成学习的方法在全球各大机器学习、数据挖掘竞赛中使用的非常广泛,其概念和思想也是风靡学术界和工业界,所以有此需求的朋友推荐细读实践。

之前我们已经详细描述了AdaBoost算法模型和GBDT原理以及实践。通过这两类算法就可以明白Boosting算法的核心思想以及基本的运行计算框架,余下几种Boosting算法都是在前者的算法之上改良得到,尤其是以GBDT算法为基础改进衍生出的三种Boosting算法:XGBoost、LightGBM、CatBoost。看过之前GBDT的读者应该对GBDT模型有了一个很清楚的认知,对于理解CatBoost算法有一定的基础。

作为一个从事数据建模五年的专业人士,我参与了许多数学建模项目,了解各种模型的原理、建模流程和题目分析方法。我希望通过这个专栏让你能够快速掌握各类数学模型、机器学习和深度学习知识,并掌握相应的代码实现。每篇文章都包含实际项目和可运行的代码。我会紧跟各类数模比赛,将最新的思路和代码分享给你,保证你能够高效地学习这些知识。
博主非常期待与你一同探索这个精心打造的专栏,里面充满了丰富的实战项目和可运行的代码,希望你不要错过:专栏链接


一、CatBoost

CatBoost(Categorical Boosting)是由俄罗斯搜索引擎巨头Yandex开发的一种梯度提升树算法。它可以与深度学习框架轻松集成。它可以处理多种数据类型,以帮助解决企业今天面临的各种问题。CatBoost 和 XGBoost、LightGBM 并称为 GBDT 的三大主流神器,都是在 GBDT 算法框架下的一种改进实现。XGBoost 被广泛的应用于工业界,LightGBM 有效的提升了 GBDT 的计算效率,而 Yandex 的 CatBoost 号称是比 XGBoost 和 LightGBM 在算法准确率等方面表现更为优秀的算法。
CatBoost相比与其他GBDT算法系列,其特点以下表可以清楚区别:

算法差异点GBDTXGBoostLightGBMCatBoost
弱学习器CART回归树

1.CART回归树

2.线性学习器

3.Dart树

Leaf-wise树对称树
寻找分裂点贪心算法近似算法直方图算法预排序算法
稀疏值处理稀疏感知算法EFB(互斥特征捆绑)
类别特征不直接支持,可自行编码后输入模型同GBDT直接支持,GS编码直接支持,Ordered TS编码
并行支持不可以可以可以可以

CatBoost最大的特点是能够直接处理类别型特征,而不需要进行独热编码或其他转换,这点和LightGBM算法相同,但是二者采取编码的算法不同,CatBoost比LightGBM处理类别特征也更加直接。

CatBoost 是一种基于 对称决策树(oblivious trees)为基学习器实现的参数较少、支持类别型变量和高准确性的GBDT框架:GBDT,主要解决的痛点是高效合理地处理类别型特征,这一点从它的名字中可以看出来,CatBoost 是由 Categorical 和 Boosting 组成。此外,CatBoost 还解决了梯度偏差(Gradient Bias)以及预测偏移(Prediction shift)的问题,从而减少过拟合的发生,进而提高算法的准确性和泛化能力。

此外,CatBoost 梯度提升算法库中的学习算法基于 GPU 实现,打分算法基于 CPU 实现。

1.CatBoost算法特点

1.1自动处理分类特征

CatBoost 能够直接处理分类特征,无需进行独热编码或其他预处理。这使得它在处理实际数据时更为方便。

import catboost
from catboost import CatBoostClassifier, Pool# 假设我们有一个包含分类特征的数据集
X = [[1, 'a', 0.1], [2, 'b', 0.2], [3, 'a', 0.3], [4, 'b', 0.4]]
y = [0, 1, 0, 1]# 创建一个 Pool 对象,它会自动识别分类特征
dataset = Pool(data=X, label=y, cat_features=[1])# 初始化并训练一个 CatBoost 分类器
model = CatBoostClassifier(iterations=100, depth=6, learning_rate=0.1, loss_function='Logloss', verbose=200)
model.fit(dataset)# 进行预测
preds = model.predict(dataset)# 输出预测结果
print(preds)

在这个示例中,我们使用了一个简单的数据集 X,其中包含了一个整数特征、一个字符串特征和一个浮点数特征。我们将分类特征的索引传递给 cat_features 参数,CatBoost 将会自动识别并处理这些特征。我们创建了一个 Pool 对象,它会自动将分类特征编码为数字。接着,我们初始化了一个 CatBoost 分类器,并对其进行训练。

最后,我们使用训练好的模型进行预测。CatBoost 可以自动处理分类特征,无需进行额外的独热编码等预处理步骤。

1.2自动处理缺失值

数据存在缺失值是很正常的,一般来说我们会采取很多方法去填充这些空值,可以使用均值或者统计指标,也可以使用机器学习算法去学习再填充,而CatBoost会在训练过程中学习如何处理缺失值。它会自动将缺失值的处理纳入模型中,而无需进行显式的填充或处理。CatBoost会将缺失值视为一个特定的数值,这个数值在内部被用作缺失值的标识符。

对分类特征的处理:对于分类特征,CatBoost会将缺失值作为一个额外的类别,不需要对其进行特殊处理。

对数值特征的处理:对于数值特征,CatBoost会将缺失值视为一个额外的分支,因此不会影响其他分支的计算。

对目标变量的处理:在目标变量中也可以包含缺失值。CatBoost会自动处理这些缺失值,并在训练过程中进行适当的计算。

1.3特征重要性评估

CatBoost可以通过内置的get_feature_importance()方法来获取特征重要性评估。这个方法返回一个包含特征重要性得分的数组,可以用来衡量每个特征对于模型预测的贡献程度。这大大增加了模型的可解释性,帮助理解模型。

1.4可交互模型过程可视化

CatBoost自带的可交互模型过程可视化,查看模型的学习过程。

模型交叉验证

2.CatBoost算法计算原理

首先基础的流程还是和GBDT一致的:

相较于GBDT、XGBoost、LightGBM算法,CatBoost算法有很多特点,但最引人注目的还是这两个:

  • 对分类型特征的处理。这使得我们在训练模型之前可以考虑不用再通过特征工程去处理分类型特征
  • 预测偏移处理。这可以减少模型的过拟合,提升模型预测效果

2.1ordered TS编码

这是基于TS编码改进的一种编码方式。对于一些类别基数比较小的特征,例如2~3类,可以直接使用one-hot编码,但对于类别基数较大的特征,one-hot编码会产生特征维度问题,这种情况下TS编码会合适一些。

CatBoost算法中采用了ordered TS编码方法来解决Greedy TS编码的目标泄露问题。ordered TS编码是基于排序的,在CatBoost算法中,会对样本进行多次洗牌,每次得到不同排序状态的样本集。

排序的目的产生一种随机性,减少过拟合。每一轮迭代、构建一个树时,都会选择一种排序状态的样本集,这样在不同轮次迭代中,不同排序状态的样本集综合起来,会使模型的方差更小,越不容易过拟合。

主要有以下几个步骤:

  1.     产生一个随机排列顺序 并对数据集进行编号
  2.     对于训练样本:
  3.     对于测试样本:
  4.     根据带先验概率的Greedy TS计算

这样计算得到的 Ordered TS能够满足P1,同时也能够使用所有的训练样本。且比在线学习的划窗(sliding window)处理能够进一步减小 的方差。需要注意的是,CatBoost在不同的迭代上会采用不同的排列顺序。
下面是Ordered TS与其它各种TS在不同数据集上面在logloss/zero-one loss上面的效果比较:

2.2 特征组合

CatBoost的另一个重要实现是在构建决策树时,动态地考虑了不同类别型特征的组合,从而获取了高阶依赖关系。例如,在广告点击预测中,考虑了用户ID与广告话题之间的联合信息,或者在音乐推荐中,结合了用户ID和音乐流派的信息。

这一实现涉及到了对特征组合的动态考虑。在树的第一次分割时,不考虑任何特征的组合。然而,在下一个分割时,CatBoost会将当前树的所有组合特征、类别型特征与数据集中的所有类别型特征相结合。这种方法能够动态地将新的组合类别型特征转换为数值型特征,以便在树的构建过程中考虑到更多的信息。

具体来说,CatBoost会将树中选定的所有分割点都视为具有两个值的类别型特征,然后像对待普通的类别型特征一样,将它们进行组合考虑。这种策略能够在不引入过多特征组合的情况下,依然有效地捕获到特征之间的复杂关系,从而提升了模型的性能。

感兴趣的推荐阅读paper很有帮助:http://learningsys.org/nips17/assets/papers/paper_11.pdf

2.3 预测偏移处理

基础原理还是和GBDT一致:在梯度提升中,每个弱学习器的训练都是基于前一个弱学习器的预测误差,通过梯度下降的方式来最小化误差。具体来说,对于回归问题,我们可以选择平方损失函数作为损失函数。关于梯度提升算法我之前在Logistic原理详解和遗传算法里面也有详解讲过,此类最优算法最核心的一点就是对于残差的使用。而损失函数就是衡量调整每一次迭代模型算法的权重的参考功能。

这个技术的实现原理是通过在目标函数中引入PredictionValuesChange,使得模型在训练时会在最小化损失的同时,尽量保持预测值的稳定性。这样,在测试时,即使输入的数据分布与训练集有所不同,模型也能够更好地适应新的数据分布,保证了模型的泛化性能。

CatBoost的预测偏移处理通过反复对样本进行重新排序来减小预测方差。在这个过程中,模型会根据当前迭代的样本排序计算梯度,以获取一个无偏估计。然而,对于排名靠前的样本,由于它们是由较少的样本训练的,因此估计结果可能会有一定的不准确性和较大的方差。

为了解决这个问题,CatBoost在每轮迭代中都会重新对样本进行排序,然后基于新的排序计算梯度。这样做的好处是,在多轮迭代的过程中,模型可以逐步获取更为准确的梯度估计,从而降低了预测的方差。

二、实现贷款违约预测

上述的理论其实是比较复杂的,博主本人研究此算法也花了很大一部分工作去阅读原papar和其他解释文章。最重要的是我们能够使用catboost来进行一些实际案例运行,这点对我们来说更为重要。对于贷款违约预测这个比较经典的课题,我们很容易拿到现成的数据,对于建模来讲,我们最缺的就是数据,而阿里天池提供了一份开源贷款违约数据,大家直接下载即可,具体看博主资源免费下载:https://download.csdn.net/download/master_hunter/88434149

1.数据背景及描述

赛题以预测用户贷款是否违约为任务,数据集报名后可见并可下载,该数据来自某信贷平台的贷款记录,总数据量超过120w,包含47列变量信息,其中15列为匿名变量。为了保证比赛的公平性,将会从中抽取80万条作为训练集,20万条作为测试集A,20万条作为测试集B,同时会对employmentTitle、purpose、postCode和title等信息进行脱敏。

字段表

FieldDescription
id为贷款清单分配的唯一信用证标识
loanAmnt贷款金额
term贷款期限(year)
interestRate贷款利率
installment分期付款金额
grade贷款等级
subGrade贷款等级之子级
employmentTitle就业职称
employmentLength就业年限(年)
homeOwnership借款人在登记时提供的房屋所有权状况
annualIncome年收入
verificationStatus验证状态
issueDate贷款发放的月份
purpose借款人在贷款申请时的贷款用途类别
postCode借款人在贷款申请中提供的邮政编码的前3位数字
regionCode地区编码
dti债务收入比
delinquency_2years借款人过去2年信用档案中逾期30天以上的违约事件数
ficoRangeLow借款人在贷款发放时的fico所属的下限范围
ficoRangeHigh借款人在贷款发放时的fico所属的上限范围
openAcc借款人信用档案中未结信用额度的数量
pubRec贬损公共记录的数量
pubRecBankruptcies公开记录清除的数量
revolBal信贷周转余额合计
revolUtil循环额度利用率,或借款人使用的相对于所有可用循环信贷的信贷金额
totalAcc借款人信用档案中当前的信用额度总数
initialListStatus贷款的初始列表状态
applicationType表明贷款是个人申请还是与两个共同借款人的联合申请
earliesCreditLine借款人最早报告的信用额度开立的月份
title借款人提供的贷款名称
policyCode公开可用的策略_代码=1新产品不公开可用的策略_代码=2
n系列匿名特征匿名特征n0-n14,为一些贷款人行为计数特征的处理

数据均被处理过,详细处理过程在我的另一篇文章上有具体代码和每一个步骤的数据可视化展示:

一文速学-XGBoost模型算法原理以及实现+Python项目实战

 2.划分数据集

首先每天catboost库的需要安装:

pip installl catboost

导入sklearn帮助我们快速搭建模型和计算对应指标:

import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split  
import pandas as pd
train=pd.read_csv("df2.csv")
train=train.iloc[:10000,2:] 
# 划分特征变量与目标变量
X=train.drop(columns='isDefault')
Y=train['isDefault']
# 划分训练及测试集
X_train,X_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=0)

3.权重统计

首先我们可以尝试使用用CatBoost内置函数计算权重:

from catboost.utils import get_roc_curve
# 创建并训练一个CatBoost分类器
model = CatBoostClassifier(iterations=100, depth=6, learning_rate=0.1, loss_function='Logloss')
model.fit(X_train, y_train)
# 假设 df 是你的 Pandas DataFrame
train_data = catboost.Pool(data=X_train, label=y_train)
# 获取特征重要性评估
feature_importance = model.get_feature_importance(data=train_data, type='LossFunctionChange')# 打印特征重要性得分
for i, score in enumerate(feature_importance):print(f'Feature {i}: {score}')

4.构建分类器

from catboost.utils import get_roc_curve
# 创建并训练一个CatBoost分类器
model = CatBoostClassifier(iterations=100, depth=6, learning_rate=0.1, loss_function='Logloss')
model.fit(X_train, y_train,plot=True)

 可以通过详细输出或使用漂亮的绘图来观察我们的模型学习,我们使用CatBoost自带的可交互模型过程可视化,查看模型的学习过程。只需要在fit函数加入参数plot就可展示:

 5.模型验证

Catboost 做模型评估时,同一般模型少有区别,该模型在 model.fit() 时,传递给参数 eval_set 相应的验证子集,设置参数 plotTrue,即可在训练模型的同时,用验证集评估模型,并且输出过程可视化结果,可谓是非常方便与惊艳。


model = CatBoostClassifier(iterations=50,random_seed=63,learning_rate=0.5,custom_loss=['AUC', 'Accuracy']
)
model.fit(X_train, y_train,eval_set=(X_test, y_test),verbose=False,plot=True
)

6.模型参数比较

与模型评估一样,使用相同 CatBoostClassifier 分类器,仅仅设置不同的 learning_rate,并设置train_dir分别为 'learing_rate_0.7''learing_rate_0.01'

model1 = CatBoostClassifier(learning_rate=0.7,iterations=100,random_seed=0,train_dir='learing_rate_0.7'
)model2 = CatBoostClassifier(learning_rate=0.01,iterations=100,random_seed=0,train_dir='learing_rate_0.01'
)
model1.fit(X_train, y_train,eval_set=(X_test, y_test),verbose=False,plot=True
)
model2.fit(X_train, y_train,eval_set=(X_test, y_test),verbose=False,plot=True
)

然后使用catboost的MetricVisualizer方法比较两个模型。该方法在单个图表上绘制有关训练、指标评估或交叉验证运行的信息。根据输入信息,一个图表可以包含有关一次或多次运行的信息。图表既可以在训练进行时实时绘制,也可以在训练结束后绘制。

 7.模型交叉验证

相比sklearn的交叉验证方法,Catboost 模型自带的交叉验证方法简单、灵活,还可以直接显示可视化交叉验证过程及结果:

from catboost import cv
# 设置参数空间
params = {}
params['loss_function'] = 'Logloss'
params['iterations'] = 80
params['custom_loss'] = 'AUC'
params['random_seed'] = 63
params['learning_rate'] = 0.01
# 直接使用catboost中自带的cv参数。
cv_data = cv(params = params,pool = Pool(X_train, label=y_train), # 设置Pool类。fold_count=5,shuffle=True,partition_random_seed=0,plot=True,   # 设置可视化过程stratified=False, verbose=False
)

 

Training on fold [0/5]bestTest = 0.4962901383
bestIteration = 79Training on fold [1/5]bestTest = 0.5072516938
bestIteration = 79Training on fold [2/5]bestTest = 0.4983888444
bestIteration = 79Training on fold [3/5]bestTest = 0.4938201036
bestIteration = 79Training on fold [4/5]bestTest = 0.4921619437
bestIteration = 79

可获取最佳得分:

import numpy as np
best_value = np.min(cv_data['test-Logloss-mean'])
best_iter = np.argmin(cv_data['test-Logloss-mean'])print('Best validation Logloss score, not stratified: {:.4f}±{:.4f} on step {}'.format(best_value,cv_data['test-Logloss-std'][best_iter],best_iter)
)

Best validation Logloss score, not stratified: 0.4976±0.0059 on step 79

 8.过拟合检验

在创建CatBoostClassifier实例时,设置参数early_stopping_rounds=20(根据实际情况设置),模型可以在 early_stopping_rounds 所设置的迭代轮数内寻找模型效果最好的,这个模型效果评价指标可以通过eval_metric设置,默认 Logloss,也可以设置为"AUC"。还可以通过设置custom_metric参数,使用自定义评价指标函数。

model_with_early_stop = CatBoostClassifier(eval_metric='AUC',iterations=200,random_seed=63,learning_rate=0.5,early_stopping_rounds=20
)
model_with_early_stop.fit(X_train, y_train,eval_set=(X_test, y_test),verbose=False,plot=True
)

9.模型预测及指标检验

通过sklearn可以快速可视化模型预测结果:

from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split  
import xgboost as xgb
from sklearn.model_selection import KFold
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as pltresult = []
mean_score = 0
labels=[0,1]
y_pred=model.predict_proba(X_test)[:,1]
def classify_convert(x):if x >0.5:return 1else:return 0
list_predict=[]
for i in y_pred:list_predict.append(classify_convert(i))
cm= confusion_matrix(y_test.values, list_predict)
sns.heatmap(cm,annot=True ,fmt="d",xticklabels=labels,yticklabels=labels)
print('验证集auc:{}'.format(roc_auc_score(y_test, y_pred)))
mean_score += roc_auc_score(y_test, y_pred)
plt.title('confusion matrix')  # 标题
plt.xlabel('Predict lable')  # x轴
plt.ylabel('True lable')  # y轴
plt.show()
# 模型评估
print('mean 验证集Auc:{}'.format(mean_score))
cat_pre=sum(result)  
from sklearn.metrics import f1_score
print('F1_socre:{}'.format(f1_score(y_test.values, list_predict, average='weighted')))
from sklearn.metrics import recall_score
print('Recall_score:{}'.format(recall_score(y_test.values, list_predict, average='weighted')))
from sklearn.metrics import precision_score
print('Percosopn:{}'.format(precision_score(y_test.values, list_predict, average='weighted')))

模型效果比上期我们用XGBoost模型预测的效果还要优秀。

10.权重展示

对于数据集的每个特征权重,我们可以适当的丢掉一些影响准确的的特征,增加我们模型的计算速率和数据使用空间,通过get_feature_names可以或得权重数值,通过数据可视化可以轻松获取需要的特征:

# 获取特征名称
feature_names = train_data.get_feature_names()
# 将特征重要性和特征名称结合起来,创建一个字典
feature_importance_dict = dict(zip(feature_names, feature_importance))# 将特征重要性排序
sorted_feature_importance = sorted(feature_importance_dict.items(), key=lambda x: x[1], reverse=True)# 提取排序后的特征名称和重要性
sorted_feature_names, sorted_feature_importance = zip(*sorted_feature_importance)plt.figure(figsize=(10, 6))
plt.barh(sorted_feature_names[:10], sorted_feature_importance[:10])
plt.xlabel('Feature Importance')
plt.title('Top 10 Important Features')
plt.gca().invert_yaxis()  # 反转y轴以显示重要性高的特征在顶部
plt.show()

11.获取最优参数

要在指定的数据集上获取CatBoost算法模型的最优训练参数,可以使用交叉验证(Cross Validation)和网格搜索(Grid Search)的方法。CatBoost支持使用GPU进行加速,可以加快我们训练速度:

from catboost import CatBoostClassifier, Pool, cv
from sklearn.model_selection import GridSearchCV
train=pd.read_csv("df2.csv")
train=train.iloc[:40000,2:] 
# 划分特征变量与目标变量
X=train.drop(columns='isDefault')
Y=train['isDefault']
# 划分训练及测试集
X_train,X_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=0)
train_data = Pool(X_train, label=y_train)param_grid = {'depth': [4, 6, 8],'learning_rate': [0.1, 0.05, 0.01,0.001]
}
model = CatBoostClassifier(task_type="GPU")grid_search = GridSearchCV(estimator=model, param_grid=param_grid, scoring='accuracy', cv=3, verbose=2, n_jobs=-1)grid_search.fit(X_train,y_train)
best_params = grid_search.best_params_
best_model = CatBoostClassifier(depth=best_params['depth'], learning_rate=best_params['learning_rate'])
best_model.fit(train_data)


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【API篇】三、转换算子API(上)

文章目录 0、demo数据1、基本转换算子:映射map2、基本转换算子:过滤filter3、基本转换算子:扁平映射flatMap4、聚合算子:按键分区keyBy5、聚合算子:简单聚合sum/min/max/minBy/maxBy6、聚合算子:归约聚合re…

maven 新建模块 导入后 按Ctrl 点不进新建模块pom定义

新建的ruoyi-common-mybatisplus 模块,导入一直不正常 画出的模块一直导入不进来 这是提示信息 这是正常的提示信息 加上 <version>3.6.3</version> 后,才一切正常

C++入门之引用与内联函数

一、引用 1、初步理解 引用在语法上的理解就是起别名&#xff0c;用法就是在类型后面加&&#xff0c;例子&#xff1a;int a 1; int& b a; 上例所示&#xff0c;执行后&#xff0c;b就是a的别名&#xff0c;它们代表同一块空间&#xff0c;a的改变会影响b&#xff0…

进阶JAVA篇-如何理解作为参数使用的匿名内部类与 Arrays 类的常用API(九)

目录 目录 API 1.0 Arrays 类的说明 1.1 Arrays 类中的 toString() 静态方法 1.2 Arrays 类中的 copyOfRange(int[] original, int from, int to) 静态方法 1.3 Arrays 类中的 copyOf(int[] original, int newLength) 静态方法 1.4 Arrays 类中的 setAll(do…

深入了解桶排序:原理、性能分析与 Java 实现

桶排序&#xff08;Bucket Sort&#xff09;是一种排序算法&#xff0c;通常用于将一组数据分割成有限数量的桶&#xff08;或容器&#xff09;&#xff0c;然后对每个桶中的数据进行排序&#xff0c;最后将这些桶按顺序合并以得到排好序的数据集。 桶排序原理 确定桶的数量&am…

Unity中用序列化和反序列化来保存游戏进度

[System.Serializable]标记类 序列化 [System.Serializable]是一个C#语言中的属性&#xff0c;用于标记类&#xff0c;表示该类的实例可以被序列化和反序列化。序列化是指将对象转换为字节流的过程&#xff0c;以便可以将其保存到文件、数据库或通过网络传输。反序列化则是将字…

C++桶排序算法的应用:存在重复元素 III

题目 给你一个整数数组 nums 和两个整数 indexDiff 和 valueDiff 。 找出满足下述条件的下标对 (i, j)&#xff1a; i ! j, abs(i - j) < indexDiff abs(nums[i] - nums[j]) < valueDiff 如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例…

日志技术快速入门

1、创建Maven项目 这里不再说如何创建Maven项目 2、导入相关依赖 <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.12</version></dependency>3、创建配置文件 在re…

嵌入式系统学习路径:

嵌入式系统学习路径&#xff1a; 00001. 确保扎实的C语言基础&#xff0c;包括高级编程知识和数据结构算法。 00002. 00003. 学习Linux应用层开发&#xff0c;包括并发程序设计、网络编程和数据库开发。 00004. 00005. 探索无线通信领域&#xff0c;如Zigbee、低功…

【java学习—八】对象类型转换Casting(1)

文章目录 1. 数据类型转换1.1 基本数据类型的 Casting1.2. 对 Java 对象的强制类型转换(造型)2. 对象类型转换举例 1. 数据类型转换 数据类型转换分为基本数据类型转换和对象类型转换。 1.1 基本数据类型的 Casting (1) 自动类型转换&#xff1a;小的数据类型可以自动转换成…

使用eBPF加速阿里云服务网格ASM

背景 随着云原生应用架构的快速发展&#xff0c;微服务架构已经成为了构建现代应用的主要方式之一。而在微服务架构中&#xff0c;服务间的通信变得至关重要。为了实现弹性和可伸缩性&#xff0c;许多组织开始采用服务网格技术来管理服务之间的通信。 Istio作为目前最受欢迎的…

mac虚拟机安装homebrew时的问题

安装了mac虚拟机&#xff0c;结果在需要通过“brew install svn”安装svn时&#xff0c;才注意到没有下载安装homebrew。 于是便想着先安装homebrew&#xff0c;网上查的教程大多是通过类似以下命令 “ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go)” 但是都会出现…

Mac OS m1 下安装Gradle5.1

1. 下载、解压 1.1 下载地址 https://gradle.org 往下翻 选择 5.1 或者选择 任何 你想要的版本 ,点击 binary-only 即可下载 . 1.2 解压到指定目录 2. 配置环境变量 2.1 编辑环境文件 vi ~/.bash_profile #GRADLE相关配置 GRADLE_HOME/Users/zxj/Documents/devSoft/grad…

c语言小白如何入门?

c语言小白如何入门&#xff1f; 作为过来人&#xff0c;我觉得刚开始&#xff0c;先按照课本把每个知识点都弄懂&#xff0c;有不懂的地方&#xff0c;先尝试自己理解或借助互联网先搜一下&#xff0c;还是理解不了&#xff0c;就可以去找学得比较好的同学&#xff0c; 最近很…

HarmonyOS 远端状态订阅开发实例

IPC/RPC 提供对远端 Stub 对象状态的订阅机制&#xff0c; 在远端 Stub 对象消亡时&#xff0c;可触发消亡通知告诉本地 Proxy 对象。这种状态通知订阅需要调用特定接口完成&#xff0c;当不再需要订阅时也需要调用特定接口取消。使用这种订阅机制的用户&#xff0c;需要实现消…

【Leetcode刷题(数据结构)】:三路划分与三数随机取中的思想实现快速排序的再优化

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右 子序列中所有元素均…

Asp.net core Web Api 配置swagger中文

启动项目&#xff0c;如图&#xff1a; 原来是英文的&#xff0c;我们要中文的&#xff0c;WeatherForecastController.cs是一个示例&#xff0c;删除即可&#xff0c;WeatherForecast.cs同时删除&#xff0c;当然不删除也行&#xff0c;这里是删除&#xff0c;创建自己的控制器…

在不安全的集群上启用 Elasticsearch Xpack 安全性

本博文详细描述如何把一个没有启动安全的 Elasticsearch 集群升级为一个带有 HTTPS 访问的启用 Elasticsearch xpack 安全的集群。 为了增强 Elasticsearch 集群的安全性&#xff0c;你需要执行完全集群重启&#xff0c;并在客户端进行一些更改。 启用身份验证后&#xff0c;所…

linux环境下使用lighthouse与selenium

一、安装谷歌浏览器、谷歌浏览器驱动、lighthouse shell脚本 apt update && apt -y upgrade apt install -y curl curl -fsSL https://deb.nodesource.com/setup_18.x | bash apt install -y nodejs apt install -y npm npm install -g lighthouse apt-get install -y …

vue 01

安装vscode 按照如下方式汉化 给vscode 安装插件 Vetur 安装node.js 下载地址https://nodejs.org/en/download/&#xff0c;选择windows msi 在cmd下检查如下&#xff1a; 检查nodejs版本:node --version 检查npm的安装版本&#xff1a;npm -v 执行命令&#xff1a; npm i…