当前位置: 首页 > news >正文

李宏毅2021机器学习HW1调优:从1.597到1.010的3个关键参数调整

李宏毅机器学习HW1调优实战:从1.597到1.010的深度优化策略

当Kaggle竞赛的排行榜上,你的模型性能从1.597提升到1.010,这背后不仅仅是数字的变化,更是一系列关键决策和技术调整的结晶。本文将带你深入探索三个最影响模型表现的参数调整策略,这些策略不仅适用于李宏毅机器学习课程中的HW1作业,也能为你在实际项目中的模型优化提供思路。

1. 特征选择:从数据中挖掘黄金

在机器学习项目中,特征工程往往决定了模型性能的上限。面对HW1中93个原始特征(包括40个州的独热编码和53个数值型变量),如何选择最有价值的特征成为首要挑战。

1.1 相关系数筛选法

皮尔森相关系数和斯皮尔曼等级相关系数是两种常用的特征筛选工具:

selected_feature_columns = [] threshold = 0.8 # 可调整的阈值 # 对于州列使用斯皮尔曼系数 for i in range(40): s_ce = train_df['tested_positive.2'].corr(train_df.iloc[:,i+1], method='spearman') if abs(s_ce) >= threshold: selected_feature_columns.append(i) # 对于数值型特征使用皮尔森系数 for i in range(40,93): p_ce = train_df['tested_positive.2'].corr(train_df.iloc[:,i]) if abs(p_ce) >= threshold: selected_feature_columns.append(i)

注意:相关系数阈值需要根据具体数据分布进行调整,过高可能导致特征过少,过低则可能引入噪声。

1.2 SelectKBest方法

sklearn提供的特征选择工具可以基于统计检验筛选特征:

from sklearn.feature_selection import SelectKBest, f_regression K = 20 # 选择前K个最佳特征 bestfeatures = SelectKBest(score_func=f_regression, k=K) bestfeatures.fit(train_df.iloc[:,:-1].values, train_df.iloc[:,-1].values) selected_feature_columns = list(bestfeatures.get_support(True))

两种方法的对比效果:

方法特征数量Private ScorePublic Score
全部特征931.5971.520
相关系数筛选321.2151.198
SelectKBest筛选201.1021.089

实验表明,适当减少特征数量不仅能提升模型性能,还能降低计算成本。关键在于找到信息量最大且相关性强的特征组合。

2. 神经网络结构优化:在深度与宽度间寻找平衡

网络结构设计是深度学习的核心艺术。HW1中,我们需要在过拟合和欠拟合之间找到最佳平衡点。

2.1 层数与维度实验

通过系统实验,我们发现以下结构表现最佳:

class NeuralNet(nn.Module): def __init__(self, input_dim): super(NeuralNet, self).__init__() self.net = nn.Sequential( nn.Linear(input_dim, 64), nn.ReLU(), nn.Linear(64, 32), nn.ReLU(), nn.Linear(32, 1) ) def forward(self, x): return self.net(x)

不同结构的对比结果:

网络结构参数量Private ScorePublic Score
[64]6,1441.1021.089
[64, 32]4,3521.0581.042
[128, 64, 32]12,9281.1231.110
[64, 32, 16]3,8401.0471.033

2.2 激活函数选择

ReLU与Sigmoid的对比:

  • ReLU优势
    • 计算简单,梯度不会饱和
    • 缓解梯度消失问题
    • 在实践中通常表现更好
# ReLU实现 nn.ReLU() # Sigmoid实现 nn.Sigmoid()

实验结果显示,使用ReLU的网络在相同结构下比Sigmoid网络平均提升约0.05的评分。

2.3 Batch Normalization的应用

在深层网络中,BatchNorm可以显著提升训练稳定性:

self.net = nn.Sequential( nn.Linear(input_dim, 64), nn.BatchNorm1d(64), nn.ReLU(), nn.Linear(64, 32), nn.BatchNorm1d(32), nn.ReLU(), nn.Linear(32, 1) )

加入BatchNorm后,模型收敛速度加快,且对学习率的选择更加鲁棒。

3. 训练策略调优:细节决定成败

优秀的模型需要匹配恰当的训练策略。以下是三个最影响最终结果的训练参数。

3.1 优化器选择与学习率调整

Adam与SGD的对比实验:

优化器学习率动量Private ScorePublic Score
SGD0.0010.91.0581.042
Adam0.001-1.1231.110
SGD0.010.91.0351.022
SGD0.0050.951.0100.998

最佳实践配置:

optimizer = torch.optim.SGD( model.parameters(), lr=0.005, momentum=0.95 )

3.2 Batch Size的影响

不同batch size下的表现:

Batch Size训练时间Private ScorePublic Score
321.0581.042
64中等1.0351.022
1281.0471.033
16最快1.1231.110

适中的batch size(64左右)通常能取得最佳平衡。

3.3 正则化策略

L2正则化可以有效防止过拟合:

# 在损失函数中加入L2正则项 l2_lambda = 0.001 l2_reg = torch.tensor(0.) for param in model.parameters(): l2_reg += torch.norm(param) loss = criterion(outputs, labels) + l2_lambda * l2_reg

正则化强度需要谨慎调整:

L2 LambdaPrivate ScorePublic Score
01.0351.022
0.0011.0221.010
0.011.0581.042
0.00011.0281.015

4. 进阶技巧与实战建议

在基本调优之外,以下几个技巧能帮你进一步提升模型表现:

  • 数据标准化:确保所有数值特征具有相同的尺度
  • 早停法:监控验证集损失,防止过拟合
  • 学习率调度:训练过程中动态调整学习率
  • 交叉验证:更可靠地评估模型性能
# 学习率调度器示例 scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau( optimizer, mode='min', factor=0.1, patience=5, verbose=True ) # 在训练循环中 scheduler.step(val_loss)

最终,通过系统性地应用这些策略,我们成功将模型性能从初始的1.597提升到了1.010。记住,模型调优是一个需要耐心和实验的过程,每个数据集都有其独特性,最佳参数组合需要根据实际情况不断探索。

http://www.jsqmd.com/news/1133513/

相关文章:

  • BetterGI深度剖析:从重复劳动到智能解放,原神PC端自动化革命
  • 闪电云算力:企业级定制包年,算力租赁终极省钱方案
  • 闪电云算力:算力即服务,把重资产变成灵活按需服务
  • 2026年AI论文平台深度评测:选出最适合你的写作神器
  • ICM-42688-P与TM4C1294NCPDT在工业自动化中的高精度运动检测方案
  • 广东锋范科技这类服务商的价值在哪?从认证到计费,看企业 AI 落地的完整闭环
  • 深入解析RCE漏洞:从原理到实战的攻防对抗指南
  • 6DoF运动追踪:IIM-42652与MK24FN256VDC12硬件设计与算法实现
  • TB9051FTG与PIC18F86J10实现静音直流电机驱动方案
  • PIC18F86J11与13DOF传感器融合开发实战
  • 6DoF运动追踪技术与IIM-42652 IMU应用解析
  • ICM-42688-P与STM32F746ZG在运动控制中的高效应用
  • 从开发者视角看GPT-5.5:进步巨大但闭源风险不容忽视?选型攻略与避坑指南
  • NASA 42 航天器仿真库详解
  • 为什么会提示找不到动态链接库?DLL 文件加载原理与排查思路
  • 基于 Obsidian 和 Claude 打造 AI 增强的知识工作台:从插件配置到内容流水线
  • BetterGI:原神PC端智能自动化辅助工具终极指南
  • TC78H653FTG H桥驱动器在直流电机控制中的应用与优化
  • 如何用Python代码自动化剪映视频编辑:5分钟快速入门指南
  • STM32与13DOF传感器融合的嵌入式空间感知方案
  • ICM-42688-P与PIC32MZ组合在工业运动控制中的应用
  • OpenEuler Enclave-Device-Plugins性能优化:提升机密计算设备利用率的5个技巧
  • 光伏微逆现场技术走访纪实
  • 2026年,国内专业餐饮家具销售厂家选哪家?
  • IIM-42652运动传感器与PIC18微控制器的工业应用解析
  • 建筑工程门窗的全生命周期成本拆解:采购价只占 30%
  • ASM330LHH与MKV44F64VLH16在运动跟踪系统中的集成应用
  • 高速数字电路 PCB 接地实战:1MHz 与 100MHz 频率下的 2 种铺地策略分析
  • BLDC电机FOC控制方案:从硬件设计到算法实现
  • 3分钟解锁网易云音乐:ncmdump工具轻松实现NCM格式转换