窗外的鹏城湾在晨雾中若隐若现,但林晨的视线完全聚焦在屏幕上。
阿里云 P100 实例的远程桌面流畅得让人感动。昨晚,他首次用云端算力完成了行业轮动模型的初步训练,回测曲线那道微微上扬的斜率,像一剂强心针注入了他连月来自学 AI 的疲惫身躯。
然而,兴奋过后是更深的清醒——这只是一个模型,一个未经真正实战检验的“玩具”。
“得找块磨刀石”。林晨喃喃自语,手指在键盘上敲入关键字Kaggle进行搜索。
这个全球最大的数据科学竞赛平台,他早有耳闻,却从未真正踏足。
过去十年做跨境电商后台开发,和数据挖掘、机器学习隔着行业壁垒。如今转型 AI,这里成了检验学习成果、接触真实数据与前沿方法的绝佳战场。
注册过程很简单。
用户名他想了想,敲下“DawnCoder”——晨曦编码者,寓意着在 AI 黎明时分起步的编程者。
个人简介栏,他犹豫了一下,没有写“前跨境电商工程师”,而是简洁地填上:“AI 自学实践者,专注于金融时间序列分析”。
主页刷新出来,琳琅满目的竞赛项目让他一时眼花缭乱。
有预测房价的,有识别猫狗图片的,有分析信用卡欺诈的,有预测股票走势的……
目光在“股票价格预测”竞赛上停留了几秒,他最终还是挪开了。
自己的投资系统是更复杂的多市场、多策略体系,直接套用单一股价预测竞赛的框架,可能反而会限制思路。他需要的是更通用的数据预处理、特征工程和模型优化经验。
最后,他选择了一个正在进行中的、相对经典的竞赛:“泰坦尼克号幸存者预测”。
数据量适中,问题清晰(根据乘客信息预测是否幸存),社区讨论和公开代码(Kernel)极其丰富,非常适合新手练手。
点击“Join Competition”,下载数据集。
压缩包解压后,几个 CSV 文件躺在文件夹里:
train.csv(训练集,包含特征和是否幸存的标签),
test.csv(测试集,只有特征,需要预测结果),
gender_submission.csv(提交格式示例)。
林晨搓了搓手,打开 Jupyter Notebook,新建了一个名为“Titanic_FirstTry”的文件。
他先快速浏览数据:乘客 ID、舱位等级、姓名、性别、年龄、同船兄弟姐妹 / 配偶数量、同船父母 / 子女数量、船票号、票价、客舱号、登船港口。幸存情况是二分类(0 / 1)。
“先从最简单的逻辑回归开始”。他自语道,手指开始在单元格里敲入代码。
导入 pandas、numpy、sklearn,读取数据,查看基本信息、缺失值。
“年龄有缺失,客舱号缺失更多,登船港口也有少量缺失……”他一边记录,一边思考处理方法。
对于年龄,他采用了中位数填充;客舱号缺失太多,暂时放弃这个特征,只提取是否有客舱号作为一个二值特征;登船港口用众数填充。
特征工程方面,他根据常识和快速浏览的讨论区提示,做了几项简单处理:
从姓名中提取称呼(Mr、Mrs、Miss 等)作为新特征,将性别映射为数值,将舱位等级(Pclass)视为有序分类特征,计算家庭规模(SibSp + Parch + 1),并创建是否独自乘船的特征。
“好了,先跑一个基线模型”。
他将处理后的训练集分割出 20% 作为验证集,用标准化后的特征训练了一个逻辑回归模型。
验证集准确率:78.5%。
林晨挑了挑眉。
这个成绩……在他快速查看的公开排行榜上,目前顶尖队伍的准确率已经超过 82%,甚至 83%。
他这个 78.5%,估计排在很后面。
但他没气馁,这本来就是“第一次”。
他开始尝试其他模型:随机森林、支持向量机、梯度提升树(用 sklearn 的 GradientBoostingClassifier)。
调参是门学问,他暂时采用网格搜索(GridSearchCV)进行简单优化,同时注意使用交叉验证避免过拟合。
一番折腾后,随机森林模型在验证集上达到了 80.1% 的准确率。
提升有限,但聊胜于无。
“特征工程可能还是太粗糙了”。他意识到问题。
于是,他点击竞赛页面的“Kernels”标签,按“投票数”排序,找到几个高赞的公开代码。
点开一个标题为“Comprehensive data exp
>>>点击查看《AI时代:码农的涅盘重生》最新章节