期刊复现:随机噪声注入进行数据增强提升模型的鲁棒性和泛化能力

picture.image

✨ 欢迎关注Python机器学习AI ✨

本节介绍: 随机噪声注入进行数据增强提升模型的鲁棒性和泛化能力提高模型性能 ,数据采用模拟数据无任何现实意义 ,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的AI工具~!

✨ 论文信息 ✨

picture.image

文献中描述的是一种常见的数据预处理方法,数据增强(Data Augmentation)中的随机噪声注入(Random Noise Injection),通过在原始数据D中加入随机噪声N(乘以一个噪声强度系数 noise_level)来生成新的数据样本,从而扩充训练数据集。公式见文献,N是随机噪声矩阵(通常是符合某种概率分布的随机数,如高斯噪声),noise_level是噪声的强度,这里设置为 0.01,保证噪声不会过大以免破坏数据的原始特征

picture.image

文献中增加数据量:原始数据只有135条,扩充到271条,缓解数据量不足的问题,增强模型泛化能力:通过模拟数据的自然变异,防止模型过拟合训练集,提升对未见数据的适应能力模拟真实世界的噪声:使模型更健壮,能够容忍实际数据中的微小波动和测量误差

✨ 基础代码 ✨

  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
plt.rcParams['font.family'] = 'Times New Roman'  
plt.rcParams['axes.unicode_minus'] = False  
import warnings  
# 忽略所有警告  
warnings.filterwarnings("ignore")  
  
path = r"2025-12-22公众号Python机器学习AI.xlsx"  
df = pd.read_excel(path)  
from sklearn.model_selection import train_test_split  
# 划分特征和目标变量  
X = df.drop(['SR'], axis=1)    
y = df[['SR']]    
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(  
    X,    
    y,   
    test_size=0.3,   
    random_state=42  
)  
import xgboost as xgb  
from sklearn.model_selection import GridSearchCV, KFold  
  
# 定义回归模型  
model = xgb.XGBRegressor(  
    objective='reg:squarederror',    
    random_state=42  
)  
  
# 定义超参数网格  
param_grid = {  
    'max_depth': [3, 5, 7],  
    'learning_rate': [0.01, 0.1, 0.2],  
    'n_estimators': [50, 100, 200],  
    'subsample': [0.8, 1.0],  
    'colsample_bytree': [0.8, 1.0]  
}  
  
# 定义k折交叉验证  
kfold = KFold(n_splits=5, shuffle=True, random_state=42)  
  
# 定义网格搜索,使用负均方误差作为评分(sklearn里越大越好,负MSE)  
grid_search = GridSearchCV(  
    estimator=model,  
    param_grid=param_grid,  
    scoring='neg_mean_squared_error',  
    cv=kfold,  
    verbose=1,  
    n_jobs=-1  
)  
  
# 运行网格搜索  
grid_search.fit(X_train, y_train)  
  
# 使用最优模型预测测试集  
best_model = grid_search.best_estimator_

在原始数据(未经过数据增强处理)上进行的模型训练和调参。数据直接被划分为训练集和测试集,并未进行任何形式的数据增强(如随机噪声注入)或标准化处理。之所以没有进行标准化,主要是因为所使用的模型是XGBoost,作为一种基于树的集成学习方法,对于特征的量纲和分布不敏感,因此标准化对模型性能影响较小。整体来看,模型构建过程完全基于原始数据,未借助数据增强或特征预处理来提升模型的泛化能力或鲁棒性

  
def add_random_noise(data, noise_level=0.01):  
    """  
    对输入数据加随机高斯噪声,返回加噪声后的数据  
    data: DataFrame 或 ndarray  
    noise_level: 噪声强度,标准差乘数  
    """  
    noise = np.random.normal(loc=0.0, scale=1.0, size=data.shape)  
    return data + noise_level * noise  
  
# 对训练集特征加噪声,生成增强特征  
X_train_aug = add_random_noise(X_train.values, noise_level=0.01)  
  
#  构造增强标签(这里保持不变,如果想加噪声,也可以类似处理)  
y_train_aug = y_train.values  
  
#  拼接原始训练数据和增强数据  
X_train_expanded = pd.DataFrame(  
    np.vstack([X_train.values, X_train_aug]),   
    columns=X_train.columns  
)  
  
y_train_expanded = pd.DataFrame(  
    np.vstack([y_train.values, y_train_aug]),   
    columns=y_train.columns  
)  
  
# 检查扩充后训练集大小  
print(f"原始训练集大小: {X_train.shape[0]} 条")  
print(f"增强后训练集大小: {X_train_expanded.shape[0]} 条")

通过在训练集特征上添加随机高斯噪声进行数据增强,将原始训练数据与加噪声后的数据合并,扩充训练集规模。注意这里仅对训练集进行特征增强,避免了在测试集上引入信息,从而有效防止数据泄露,保证模型评估的公平性和可靠性

  
原始训练集大小: 388 条  
增强后训练集大小: 776 条

通过随机噪声数据增强,训练集规模从388条翻倍扩充到776条

  
# 定义回归模型  
xgb_model_aug = xgb.XGBRegressor(  
    objective='reg:squarederror',  
    random_state=42  
)  
  
# 定义超参数网格  
param_grid = {  
    'max_depth': [3, 5, 7],  
    'learning_rate': [0.01, 0.1, 0.2],  
    'n_estimators': [50, 100, 200],  
    'subsample': [0.8, 1.0],  
    'colsample_bytree': [0.8, 1.0]  
}  
  
# 定义k折交叉验证  
kfold = KFold(n_splits=5, shuffle=True, random_state=42)  
  
# 定义网格搜索,使用负均方误差作为评分  
grid_search_aug = GridSearchCV(  
    estimator=xgb_model_aug,  
    param_grid=param_grid,  
    scoring='neg_mean_squared_error',  
    cv=kfold,  
    verbose=1,  
    n_jobs=-1  
)  
  
# 使用增强数据训练调参  
grid_search_aug.fit(X_train_expanded, y_train_expanded.values.ravel())  
  
# 用增强数据训练的最优模型  
best_model_aug = grid_search_aug.best_estimator_

使用经过随机噪声增强扩充后的训练集,对XGBoost回归模型进行五折交叉验证的网格搜索调参,获得性能最优的模型

  
# 原始数据  
训练集Mean Squared Error (MSE): 21.126559429554085  
训练集Root Mean Squared Error (RMSE): 4.596363718153088  
训练集R-squared (R2): 0.9730404615402222  
-------------------------  
测试集Mean Squared Error (MSE): 93.30558235859995  
测试集Root Mean Squared Error (RMSE): 9.659481474623778  
测试集R-squared (R2): 0.8954805135726929  

  
# 增强数据  
训练集Mean Squared Error (MSE): 0.3334  
训练集Root Mean Squared Error (RMSE): 0.5774  
训练集R-squared (R2): 0.9996  
-------------------------  
测试集Mean Squared Error (MSE): 84.7351  
测试集Root Mean Squared Error (RMSE): 9.2052  
测试集R-squared (R2): 0.9051

picture.image

从结果可以看出,原始数据训练的XGBoost模型在训练集上表现良好,但测试集误差较大,存在一定程度的过拟合;而经过随机噪声数据增强后,训练集误差显著降低,模型拟合更精准,同时测试集的均方误差(MSE)和均方根误差(RMSE)也有所下降,R²值略有提升,说明增强数据有效提升了模型的泛化能力和预测性能。图中实测值与预测值的散点分布更加接近对角线,进一步验证了数据增强对模型预测准确性的改善

当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息

picture.image

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。

更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 合集获取 ✨

picture.image

欢迎到公众号后台,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!

✨ 书籍推荐 ✨

无论你是零编程基础的科研新手,还是想提升机器学习技能的医学科研工作者,这本书都能带你从入门到进阶,掌握Python数据分析+医学AI应用的全流程技能

✨ AI工具推荐 ✨

  
https://chatgpt-cn.pro/

picture.image

往期推荐

期刊配图:模型SHAP解释特征类别柱状图、饼图与蜂巢图的组合展示

期刊复现:基于自动机器学习的预测模型构建及其残差和部分依赖分析

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况最优模型的SHAP解释

期刊复现:单变量特征降维与共线性分析结合RFE集成排名进行特征筛选下的组合拳流程

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况优化与最优模型选择可视化

期刊复现:基于相关系数与AUC值优化特征选择剔除冗余特征精简模型(附代码)

期刊复现:如何正确使用LASSO进行二分类特征选择?避开常见误区,掌握实用技巧

期刊复现:融合聚类与多分类转二分类的亚型可解释SHAP机器学习模型构建

期刊复现:基于LightGBM、XGBoost与RF的Lasso回归堆叠模型在连续和分类特征上的模型解释

期刊复现:基于LightGBM、XGBoost与RF的堆叠模型贝叶斯优化调参与Lasso回归元模型,结合10倍交叉验证

picture.image

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
评论
未登录
暂无评论