基于随机森林算法的信用风险评估项目

引言

这是一个基于随机森林算法的德国信用风险评估项目,主要目的是构建一个机器学习模型来评估德国客户的信用风险,判断客户是否为高风险客户。 

# -*- coding: utf-8 -*-
"""
德国信用风险评估随机森林模型
"""
# 基础库导入
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import (accuracy_score, confusion_matrix,classification_report, roc_curve, auc)
from sklearn.preprocessing import LabelEncoder, MinMaxScalerimport os
os.environ["QT_QPA_PLATFORM_PLUGIN_PATH"] = ".venv\Lib\site-packages\PyQt5\Qt5\plugins"plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
plt.style.use('ggplot')  # 设置绘图风格# 数据加载与探索
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/german.data"
columns = ['status', 'duration', 'credit_history', 'purpose', 'amount','savings', 'employment', 'installment_rate', 'personal_status','other_debtors', 'residence', 'property', 'age','other_installments', 'housing', 'existing_credits','job', 'dependents', 'telephone', 'foreign_worker', 'risk']#df = pd.read_csv(url, delim_whitespace=True, names=columns)
df = pd.read_csv(url, sep='\s+', names=columns)
# 数据预处理
# 将目标变量转换为0/1(1表示高风险)
df['risk'] = df['risk'].map({1:0, 2:1})# 类别型特征编码
categorical_features = ['status', 'credit_history', 'purpose', 'savings','employment', 'personal_status', 'other_debtors','property', 'other_installments', 'housing','job', 'telephone', 'foreign_worker']label_encoders = {}
for col in categorical_features:le = LabelEncoder()df[col] = le.fit_transform(df[col])label_encoders[col] = le# 数值型特征归一化
numerical_features = ['duration', 'amount', 'installment_rate', 'age','residence', 'existing_credits', 'dependents']
scaler = MinMaxScaler()
df[numerical_features] = scaler.fit_transform(df[numerical_features])# 划分数据集
X = df.drop('risk', axis=1)
y = df['risk']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,random_state=42,stratify=y)# 随机森林模型训练
# 初始化基础模型
rf_base = RandomForestClassifier(random_state=42, class_weight='balanced')
rf_base.fit(X_train, y_train)# 参数网格
param_grid = {'n_estimators': [100, 200],'max_depth': [5, 10, None],'min_samples_split': [2, 5],'max_features': ['sqrt', 0.8]
}# 网格搜索优化
grid_search = GridSearchCV(rf_base, param_grid, cv=5, scoring='f1', n_jobs=-1)
grid_search.fit(X_train, y_train)# 获取最优模型
best_rf = grid_search.best_estimator_# 模型评估
# 测试集预测
y_pred = best_rf.predict(X_test)
y_proba = best_rf.predict_proba(X_test)[:, 1]# 评估指标
print("="*40)
print("最佳参数组合:", grid_search.best_params_)
print("测试集准确率: {:.2f}%".format(accuracy_score(y_test, y_pred)*100))
print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=['低风险', '高风险']))# 可视化部分
plt.style.use('ggplot')# 特征重要性
feature_importance = pd.Series(best_rf.feature_importances_, index=X.columns)
top_features = feature_importance.sort_values(ascending=False).head(10)plt.figure(figsize=(10,6))
top_features.sort_values().plot(kind='barh')
plt.title('Top 10 特征重要性')
plt.xlabel('重要性得分')
plt.ylabel('特征名称')
plt.tight_layout()
plt.show()# 混淆矩阵
plt.figure(figsize=(6,6))
sns.heatmap(confusion_matrix(y_test, y_pred), annot=True, fmt='d', cmap='Blues',xticklabels=['低风险', '高风险'],yticklabels=['低风险', '高风险'])
plt.title('混淆矩阵')
plt.ylabel('真实标签')
plt.xlabel('预测标签')
plt.show()# ROC曲线
fpr, tpr, thresholds = roc_curve(y_test, y_proba)
roc_auc = auc(fpr, tpr)plt.figure(figsize=(8,6))
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC曲线 (AUC = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('假正率')
plt.ylabel('真正率')
plt.title('受试者工作特征曲线')
plt.legend(loc="lower right")
plt.show()# 风险客户特征分析(示例)
risk_df = df[df['risk'] == 1]# 贷款目的分析
purpose_mapping = label_encoders['purpose'].classes_
plt.figure(figsize=(10,6))
sns.countplot(x='purpose', data=risk_df, order=risk_df['purpose'].value_counts().index)
plt.xticks(ticks=range(len(purpose_mapping)), labels=purpose_mapping, rotation=45)
plt.title('高风险客户贷款目的分布')
plt.xlabel('贷款目的')
plt.ylabel('数量')
plt.tight_layout()
plt.show()# 存款情况分析
savings_mapping = label_encoders['savings'].classes_  # 获取存款情况的原始类别# 定义颜色列表,可根据需要调整
colors = sns.color_palette('pastel')[:len(savings_mapping)]# 定义爆炸效果,这里突出显示第一个部分,可根据需要调整
explode = [0.1] + [0] * (len(savings_mapping) - 1)plt.figure(figsize=(8, 5))  # 设置图形大小
risk_df['savings'].value_counts().sort_index().plot(kind='pie',autopct='%1.1f%%',labels=savings_mapping,colors=colors,explode=explode,shadow=True,  # 添加阴影startangle=90  # 设置起始角度
)
plt.title('高风险客户储蓄账户分布', fontsize=14)  # 设置标题并调整字体大小
plt.axis('equal')  # 保证饼图是圆形
plt.tight_layout()  # 自动调整布局
plt.show()  # 显示图

总体介绍

1. 数据获取与处理

  • 数据加载:从 https://archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/german.data 下载德国信用风险数据集。
  • 数据预处理
    • 将目标变量 risk 转换为 0/1 编码,其中 1 表示高风险。
    • 对类别型特征使用 LabelEncoder 进行编码。
    • 对数值型特征使用 MinMaxScaler 进行归一化处理。

2. 模型构建与训练

  • 模型选择:使用随机森林分类器 RandomForestClassifier 作为预测模型。
  • 模型优化:通过 GridSearchCV 进行网格搜索,寻找最优的模型参数组合,以提高模型性能。

3. 模型评估

  • 预测结果:使用最优模型对测试集进行预测,得到预测标签 y_pred 和预测概率 y_proba
  • 评估指标:计算并输出最佳参数组合、测试集准确率、分类报告等评估指标。

4. 可视化分析

  • 特征重要性:绘制前 10 个最重要特征的柱状图,帮助理解哪些特征对模型预测影响最大。
  • 混淆矩阵:使用热力图展示模型在测试集上的分类结果,直观呈现模型的误判情况。
  • ROC 曲线:绘制受试者工作特征曲线,计算并展示曲线下面积(AUC),评估模型的分类性能。

5. 风险客户特征分析

  • 贷款目的分析:统计高风险客户的贷款目的分布,绘制柱状图展示不同贷款目的的客户数量。
  • 存款情况分析:统计高风险客户的存款账户分布,绘制饼图展示不同存款情况的客户占比。

模块分解

1. 导入库和设置环境变量

# -*- coding: utf-8 -*-
"""
德国信用风险评估随机森林模型
"""
# 基础库导入
import pandas as pd  # 用于数据处理和分析
import numpy as np  # 用于科学计算
import matplotlib.pyplot as plt  # 用于数据可视化
import seaborn as sns  # 基于matplotlib的高级可视化库
from sklearn.model_selection import train_test_split, GridSearchCV  # 用于划分数据集和网格搜索
from sklearn.ensemble import RandomForestClassifier  # 随机森林分类器
from sklearn.metrics import (accuracy_score, confusion_matrix,classification_report, roc_curve, auc)  # 模型评估指标
from sklearn.preprocessing import LabelEncoder, MinMaxScaler  # 用于特征编码和归一化import os
# 设置Qt平台插件路径,解决可视化窗口显示问题
os.environ["QT_QPA_PLATFORM_PLUGIN_PATH"] = "F:\cv\.venv\Lib\site-packages\PyQt5\Qt5\plugins"plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
plt.style.use('ggplot')  # 设置绘图风格
  • pandas:用于数据处理和分析,提供了 DataFrame 和 Series 等数据结构,方便对表格数据进行操作。
  • numpy:用于科学计算,提供了高效的多维数组对象和各种数学函数。
  • matplotlib 和 seaborn:用于数据可视化,matplotlib 是基础的绘图库,seaborn 基于 matplotlib 提供了更高级、更美观的绘图接口。
  • sklearn 相关模块
    • train_test_split:用于将数据集划分为训练集和测试集。
    • GridSearchCV:用于进行网格搜索,自动寻找模型的最优参数组合。
    • RandomForestClassifier:随机森林分类器,是一种集成学习算法。
    • accuracy_scoreconfusion_matrixclassification_reportroc_curveauc:用于评估模型的性能。
    • LabelEncoder:用于对类别型特征进行编码,将字符串类型的类别转换为数值类型。
    • MinMaxScaler:用于对数值型特征进行归一化处理,将特征值缩放到 [0, 1] 区间。
  • os.environ["QT_QPA_PLATFORM_PLUGIN_PATH"]:设置 Qt 平台插件的路径,解决使用 matplotlib 显示图形时可能出现的 Qt 插件找不到的问题。

2. 数据加载与探索

# 数据加载与探索
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/german.data"
columns = ['status', 'duration', 'credit_history', 'purpose', 'amount','savings', 'employment', 'installment_rate', 'personal_status','other_debtors', 'residence', 'property', 'age','other_installments', 'housing', 'existing_credits','job', 'dependents', 'telephone', 'foreign_worker', 'risk']# 从指定URL读取数据,使用正则表达式 \s+ 作为分隔符
df = pd.read_csv(url, sep='\s+', names=columns)
  • url:指定数据集的网络地址,该数据集是德国信用风险评估的公开数据集。
  • columns:定义数据集中各列的名称。
  • pd.read_csv:从指定的 URL 读取数据,sep='\s+' 表示使用一个或多个空白字符作为分隔符,names=columns 表示使用 columns 列表中的名称作为列名。

3. 数据预处理

# 将目标变量转换为0/1(1表示高风险)
df['risk'] = df['risk'].map({1:0, 2:1})# 类别型特征编码
categorical_features = ['status', 'credit_history', 'purpose', 'savings','employment', 'personal_status', 'other_debtors','property', 'other_installments', 'housing','job', 'telephone', 'foreign_worker']label_encoders = {}
for col in categorical_features:le = LabelEncoder()  # 创建LabelEncoder对象df[col] = le.fit_transform(df[col])  # 对类别型特征进行编码label_encoders[col] = le  # 保存每个特征的编码器# 数值型特征归一化
numerical_features = ['duration', 'amount', 'installment_rate', 'age','residence', 'existing_credits', 'dependents']
scaler = MinMaxScaler()  # 创建MinMaxScaler对象
df[numerical_features] = scaler.fit_transform(df[numerical_features])  # 对数值型特征进行归一化
  • map 方法:将 risk 列中的值 1 映射为 02 映射为 1,使得 1 表示高风险,0 表示低风险。
  • categorical_features:定义所有类别型特征的列名。
  • LabelEncoder:对每个类别型特征进行编码,将字符串类型的类别转换为连续的整数。
  • label_encoders:保存每个类别型特征对应的编码器,方便后续对新数据进行编码或者逆编码。
  • numerical_features:定义所有数值型特征的列名。
  • MinMaxScaler:对数值型特征进行归一化处理,将每个特征的取值范围缩放到 [0, 1] 之间。

4. 划分数据集

# 划分数据集
X = df.drop('risk', axis=1)  # 特征矩阵
y = df['risk']  # 目标变量
# 划分训练集和测试集,测试集占比30%,保持类别分布一致
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,random_state=42,stratify=y)

  • X = df.drop('risk', axis=1):将除 risk 列之外的所有列作为特征矩阵 X
  • y = df['risk']:将 risk 列作为目标变量 y
  • train_test_split:将数据集划分为训练集和测试集,test_size=0.3 表示测试集占总数据集的 30%,random_state=42 用于设置随机种子,保证每次划分的结果相同,stratify=y 表示按照目标变量的类别分布进行分层抽样,确保训练集和测试集中各类别的比例与原始数据集相同。

5. 随机森林模型训练

# 初始化基础模型
rf_base = RandomForestClassifier(random_state=42, class_weight='balanced')  # 创建随机森林分类器,处理类别不平衡问题
rf_base.fit(X_train, y_train)  # 训练模型# 参数网格
param_grid = {'n_estimators': [100, 200],  # 决策树的数量'max_depth': [5, 10, None],  # 决策树的最大深度'min_samples_split': [2, 5],  # 拆分内部节点所需的最小样本数'max_features': ['sqrt', 0.8]  # 寻找最佳分割时要考虑的特征数量
}# 网格搜索优化
grid_search = GridSearchCV(rf_base, param_grid, cv=5, scoring='f1', n_jobs=-1)  # 创建网格搜索对象
grid_search.fit(X_train, y_train)  # 进行网格搜索# 获取最优模型
best_rf = grid_search.best_estimator_  # 获取最优模型
  • RandomForestClassifier:初始化一个随机森林分类器,random_state=42 保证每次模型训练的结果可复现,class_weight='balanced' 用于处理类别不平衡问题,自动调整各类别的权重。
  • fit 方法:使用训练集数据对模型进行训练。
  • param_grid:定义需要搜索的参数组合,包括决策树的数量 n_estimators、决策树的最大深度 max_depth、拆分内部节点所需的最小样本数 min_samples_split 和寻找最佳分割时要考虑的特征数量 max_features
  • GridSearchCV:创建一个网格搜索对象,cv=5 表示进行 5 折交叉验证,scoring='f1' 表示使用 F1 分数作为评估指标,n_jobs=-1 表示使用所有可用的 CPU 核心进行并行计算。
  • fit 方法:对训练集进行网格搜索,寻找最优的参数组合。
  • best_estimator_:获取网格搜索得到的最优模型。

6. 模型评估

# 测试集预测
y_pred = best_rf.predict(X_test)  # 预测标签
y_proba = best_rf.predict_proba(X_test)[:, 1]  # 预测概率# 评估指标
print("="*40)
print("最佳参数组合:", grid_search.best_params_)  # 输出最优参数组合
print("测试集准确率: {:.2f}%".format(accuracy_score(y_test, y_pred)*100))  # 输出测试集准确率
print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=['低风险', '高风险']))  # 输出分类报告

  • predict 方法:使用最优模型对测试集进行预测,得到预测标签 y_pred
  • predict_proba 方法:使用最优模型对测试集进行预测,得到每个样本属于各个类别的概率,[:, 1] 表示取属于高风险类别的概率。
  • accuracy_score:计算测试集的准确率。
  • classification_report:生成分类报告,包括精确率、召回率、F1 分数等评估指标。

7. 可视化部分

特征重要性
plt.style.use('ggplot')  # 设置绘图风格# 特征重要性
feature_importance = pd.Series(best_rf.feature_importances_, index=X.columns)  # 计算特征重要性
top_features = feature_importance.sort_values(ascending=False).head(10)  # 选取前10个重要特征plt.figure(figsize=(10,6))  # 设置图形大小
top_features.sort_values().plot(kind='barh')  # 绘制水平柱状图
plt.title('Top 10 特征重要性')  # 设置标题
plt.xlabel('重要性得分')  # 设置x轴标签
plt.ylabel('特征名称')  # 设置y轴标签
plt.tight_layout()  # 自动调整布局
plt.show()  # 显示图形
  • best_rf.feature_importances_:获取最优模型中每个特征的重要性得分。
  • pd.Series:将特征重要性得分转换为 Series 对象,方便后续处理。
  • sort_values:对特征重要性得分进行排序,选取前 10 个最重要的特征。
  • plot(kind='barh'):绘制水平柱状图,展示前 10 个特征的重要性得分。

混淆矩阵
plt.figure(figsize=(6,6))  # 设置图形大小
sns.heatmap(confusion_matrix(y_test, y_pred), annot=True, fmt='d', cmap='Blues',  # 绘制热力图,显示数值xticklabels=['低风险', '高风险'],yticklabels=['低风险', '高风险'])
plt.title('混淆矩阵')  # 设置标题
plt.ylabel('真实标签')  # 设置y轴标签
plt.xlabel('预测标签')  # 设置x轴标签
plt.show()  # 显示图形
  • confusion_matrix:计算测试集的混淆矩阵。
  • sns.heatmap:使用 seaborn 库绘制热力图,直观展示模型的分类结果。

ROC曲线
fpr, tpr, thresholds = roc_curve(y_test, y_proba)  # 计算ROC曲线的假正率、真正率和阈值
roc_auc = auc(fpr, tpr)  # 计算ROC曲线下的面积plt.figure(figsize=(8,6))  # 设置图形大小
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC曲线 (AUC = %0.2f)' % roc_auc)  # 绘制ROC曲线
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')  # 绘制随机分类器的对角线
plt.xlim([0.0, 1.0])  # 设置x轴范围
plt.ylim([0.0, 1.05])  # 设置y轴范围
plt.xlabel('假正率')  # 设置x轴标签
plt.ylabel('真正率')  # 设置y轴标签
plt.title('受试者工作特征曲线')  # 设置标题
plt.legend(loc="lower right")  # 设置图例位置
plt.show()  # 显示图形
  • roc_curve:计算 ROC 曲线的假正率 fpr、真正率 tpr 和阈值 thresholds
  • auc:计算 ROC 曲线下的面积 roc_auc
  • plt.plot:绘制 ROC 曲线和随机分类器的对角线。

8. 风险客户特征分析

贷款目的分析
# 风险客户特征分析(示例)
risk_df = df[df['risk'] == 1]  # 筛选出高风险客户# 贷款目的分析
purpose_mapping = label_encoders['purpose'].classes_  # 获取贷款目的的原始类别
plt.figure(figsize=(10,6))  # 设置图形大小
sns.countplot(x='purpose', data=risk_df, order=risk_df['purpose'].value_counts().index)  # 绘制柱状图
plt.xticks(ticks=range(len(purpose_mapping)), labels=purpose_mapping, rotation=45)  # 设置x轴刻度和标签
plt.title('高风险客户贷款目的分布')  # 设置标题
plt.xlabel('贷款目的')  # 设置x轴标签
plt.ylabel('数量')  # 设置y轴标签
plt.tight_layout()  # 自动调整布局
plt.show()  # 显示图形

  • risk_df = df[df['risk'] == 1]:筛选出高风险客户的数据。
  • label_encoders['purpose'].classes_:获取 purpose 特征的原始类别。
  • sns.countplot:绘制柱状图,展示高风险客户的贷款目的分布。

存款情况分析
# 存款情况分析
savings_mapping = label_encoders['savings'].classes_  # 获取存款情况的原始类别# 定义颜色列表,可根据需要调整
colors = sns.color_palette('pastel')[:len(savings_mapping)]# 定义爆炸效果,这里突出显示第一个部分,可根据需要调整
explode = [0.1] + [0] * (len(savings_mapping) - 1)plt.figure(figsize=(8, 5))  # 设置图形大小
risk_df['savings'].value_counts().sort_index().plot(kind='pie',autopct='%1.1f%%',labels=savings_mapping,colors=colors,explode=explode,shadow=True,  # 添加阴影startangle=90  # 设置起始角度
)
plt.title('高风险客户储蓄账户分布', fontsize=14)  # 设置标题并调整字体大小
plt.axis('equal')  # 保证饼图是圆形
plt.tight_layout()  # 自动调整布局
plt.show()  # 显示图
  • label_encoders['savings'].classes_:获取 savings 特征的原始类别。
  • plot(kind='pie'):绘制饼图,展示高风险客户的存款账户分布。

通过以上步骤,我们完成了从数据加载、预处理、模型训练、评估到可视化分析的整个流程,对德国信用风险进行评估和分析。

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

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

相关文章

亚马逊云科技携手 DeepSeek:开启企业级生成式 AI 新征程

文章目录 一、DeepSeek-R1模型的技术突破(一)卓越的性能表现(二)独特的训练方法(三)丰富的模型生态 二、亚马逊云科技平台上的部署与优化(一)灵活的部署方式(二&#xff…

Windows 实战-evtx 文件分析--笔记

Windows 取证之EVTX日志 - 蚁景网安实验室 - 博客园 一.evtx日志文件是什么 从 Windows NT 6.0(也就是 Windows Vista 和 Windows Server 2008)开始,微软引入了一种全新的日志文件格式,称为 evtx。这种格式取代了之前 Windows 系…

LangChain/Eliza框架在使用场景上的异同,Eliza通过配置实现功能扩展的例子

LangChain与Eliza框架的异同分析 ‌一、相同点‌ ‌模块化架构设计‌ 两者均采用模块化设计,支持灵活扩展和功能组合。LangChain通过Chains、Agents等组件实现多步骤任务编排‌,Eliza通过插件系统和信任引擎实现智能体功能的动态扩展‌。模块化特性降低…

英语口语 -- 常用 1368 词汇

英语口语 -- 常用 1368 词汇 介绍常用单词List1 (96 个)时间类气候类自然类植物类动物类昆虫类其他生物地点类 List2 (95 个)机构类声音类食品类餐饮类蔬菜类水果类食材类饮料类营养类疾病类房屋类家具类服装类首饰类化妆品类 Lis…

深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本

前引:屏幕前的你还在AI智能搜索框这样搜索吗?“这道题怎么写”“苹果为什么红”“怎么不被发现翘课” ,。看到此篇文章的小伙伴们!请准备好你的思维魔杖,开启【霍格沃茨模式】,看我如何更新秘密的【知识炼金…

2025 年浙江危化品经营单位考试攻略分享​

浙江的考试由省应急管理部门主导。理论考试突出危化品在电商、物流等新兴业态下的安全管理知识,这与浙江发达的电商产业紧密相关。对危险化学品的环境危害及防治知识考查细致。实际操作考核模拟杭州、宁波等地危化品仓储物流中心的作业情况。​ 报名材料准备齐全后…

【区块链+ 房产建筑】山东省建筑产业互联网平台 | FISCO BCOS 应用案例

山东省建筑产业互联网平台(山东省弘商易盟平台)是基于区块链技术构建的分布式产业互联网平台, 旨在把各企业内部的供应链协同管理系统(包括采购或者SRM 系统, 以及销售或CRM 系统)利用区块链技术链接起来&a…

Bash 花括号扩展 {start..end} 进阶使用指南——字典生成

Bash 的花括号扩展(brace expansion){start..end} 是一个强大而灵活的语法特性,用于生成特定序列或组合。它在脚本编写、爆破字典生成、文件批量操作以及模式匹配中有着广泛的应用。本文将从基础用法到高级技巧,带你全面掌握这一功…

23种设计模式-结构型模式-享元

文章目录 简介问题解决方案享元与不可变性享元工厂 代码总结 简介 亦称:缓存、Cache、Flyweight。享元是一种结构型设计模式,它摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中…

MFC BCGControlBar

BCGControlBar(也称为 BCGSoft 或 BCGControlBar Library)是一个用于 MFC(Microsoft Foundation Classes) 的扩展库,主要提供现代化的 UI 控件、Ribbon 界面、工具栏、属性网格等组件,帮助开发者快速构建专…

【算法手记9】OR26 最长回文子串 NC369 [NOIP2002 普及组] 过河卒

🦄个人主页:修修修也 🎏所属专栏:刷题 ⚙️操作环境:牛客网 一.OR26 最长回文子串 牛客网题目链接(点击即可跳转):OR26 最长回文子串 题目详情: 本题详情如下图: 题目思路: 本题解题思路如下: 本题思路用中心扩展算法,遍历所有字符,将每个字符作为回文串…

批量删除或替换文本文件中指定的行,如删除第一行、删除最后一行

每一个文本文件中我们都可以插入非常多的行,我们可以对行的内容进行删除、修改等各种操作。如果文本文件中的某些行的内容需要更新,那我们就需要对其进行修改操作。想要修改文本文件的内容其实是非常方便的,但是如果想要批量的对多个文本文件…

LLM架构解析:词嵌入模型 Word Embeddings(第二部分)—— 从基础原理到实践应用的深度探索

本专栏深入探究从循环神经网络(RNN)到Transformer等自然语言处理(NLP)模型的架构,以及基于这些模型构建的应用程序。 本系列文章内容: NLP自然语言处理基础词嵌入(Word Embeddings&#xff09…

机构数据服务

一、背景说明 券商/基金/银行等金融机构的数据中心,基本都外购有数十家各类数据,自有业务每天也在产生海量信息。如何有效管理和使用这些数据,通过数据服务,沉淀数据资产,机构研发和运维部门也在不断尝试和改进。 传…

中和农信:让金融“活水”精准浇灌乡村沃土

2025年政府工作报告首提“投资于人”概念,并22次提及“金融”,强调要着力抓好“三农”工作,深入推进乡村全面振兴;一体推进地方中小金融机构风险处置和转型发展;扎扎实实落实促进民营经济发展的政策措施,切…

JavaScript重难点突破:期约与异步函数

同步和异步 ​同步(Synchronous)​ ​定义:任务按顺序依次执行,前一个任务完成前,后续任务必须等待。 ​特点:阻塞性执行,程序逻辑直观,但效率较低 ​异步(Asynchron…

学习总结 网格划分+瞬态求解设置

网格划分部分 1.导入几何文件 导入我们的几何模型,他的格式为.scdocx 2.添加局部尺寸BOI 因为要对对前缘和尾缘进行局部加密,所以进行一个BOI的局部加密,目标尺寸取的几何尺寸的最小尺寸的0.1,就是0.4mm。 3.生成表面网格 表面…

.NET 使用 WMQ 连接Queue 发送 message 实例

1. 首先得下载客户端,没有客户端无法发送message. 安装好之后长这样 我装的是7.5 安装目录如下 tools/dotnet 目录中有演示的demo 2. .Net 连接MQ必须引用bin目录中的 amqmdnet.dll 因为他是创建Queuemanager 的核心库, 项目中引用using IBM.WMQ; 才…

风电行业预测性维护解决方案:给风机装上 “智能医生”,实现故障 “秒级预警”

引言:风电设备故障为何成为 “运维黑洞”? 某海上风电场因齿轮箱轴承故障停机 3 天,直接损失 50 万元发电量。传统维护模式下,人工巡检覆盖率不足 40%,故障修复平均耗时 72 小时。而预测性维护通过物联网 AI 技术&am…

5、无线通信基站的FPGA实现架构

基站(Base Station,BS),也称为公用移动通信基站,是无线电台站的一种形式,具体则指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间的信息传递的无线电收发信电台。…