尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

李宏毅2021机器学习HW1调优:从1.597到1.010的3个关键参数调整
📅 发布时间:2026/7/6 8:07:01

李宏毅机器学习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
32快1.0581.042
64中等1.0351.022
128慢1.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。记住,模型调优是一个需要耐心和实验的过程,每个数据集都有其独特性,最佳参数组合需要根据实际情况不断探索。

相关新闻

  • BetterGI深度剖析:从重复劳动到智能解放,原神PC端自动化革命
  • ICM-42688-P与TM4C1294NCPDT在工业自动化中的高精度运动检测方案
  • 6DoF运动追踪技术与IIM-42652 IMU应用解析

最新新闻

  • 基于STM32F407与CS43L22的模块化音频合成器固件,含FreeRTOS多任务调度和I2S实时DAC输出
  • 网络安全基础与防护策略
  • Kali Linux蓝牙安全测试实战:从环境搭建到Crackle破解传统配对
  • Metasploit与ngrok内网穿透实战:原理、配置与安全实践
  • 使用OpenSSL为华为OceanStor签发10年长期证书的完整指南
  • 开源LLM API聚合平台安全审计:密钥管理、数据传输与合规性加固指南

日新闻

  • AI智能体安全防护框架AgentGuard:从原理到实战部署指南
  • KMX63与PIC18F26K40硬件组合及低功耗设计实践
  • 基于YOLO13改进的门体检测模型:C3k2模块与PoolingFormer技术解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号