跳到正文
SpruceNovel
封面加载中…
小说

静流之上

共 68 章

《静流之上》小说。查看作品信息、章节目录和阅读内容。

正在阅读 · 第十七章 时序探,默契深

第十七章 时序探,默契深

2020年11月下旬,清溪镇的寒风愈发刺骨,清晨的校园被一层薄霜覆盖,香樟树的枝干上凝结着细密的冰粒,在微弱的晨光中泛着冷冽的光泽。气温降至零下两摄氏度,学生们裹着厚重的衣物,像一个个圆滚滚的棉球,步履匆匆地穿梭在教学楼与食堂之间,嘴里呼出的白气在冷空气中凝结成短暂的白雾。李长生换上了最厚的一套衣服,福利院阿姨织的灰色毛衣外面套着旧外套,下身是一条洗得发白的牛仔裤,晨跑时依旧跑得大汗淋漓,只是这次他没有立刻脱掉外套,而是等汗水稍干后,才在教学楼的走廊里透气——连续高强度开发后,他学会了照顾自己的身体,毕竟健康的体魄,是支撑他走得更远的基础。

高一(3)班的课堂上,李长生的「中等生」伪装依旧稳如磐石。

第七次周测成绩公布,他的名字停留在班级第二十四名,比上次前进一名,依旧卡在「不被关注」的安全区。这次控分,他几乎不用刻意计算,凭着直觉就能精准拿捏分数:数学卷的导数题,他故意在最后一步计算时出现一个微小的失误,扣掉一分;物理卷的多选题,刻意少选一个正确选项,确保分数在95分左右;英语作文依旧按模板写作,只是在结尾处稍微改动了两个句子,让分数比上次略高一分,符合「稳步前进」的中等生轨迹;语文阅读题则故意在主观题上写得不够全面,扣掉两分,让总分稳稳落在班级中游。

班主任刘老师在班会上依旧重点表扬成绩靠前的同学,对中间排名的学生只是一笔带过,甚至没有念到李长生的名字。同学们更是对他毫无印象,讨论排名时,目光大多集中在成绩波动大的同学身上,没有人会留意到这个始终在中游徘徊的沉默少年。只有王帆,在看到排名表时,目光会短暂地停留在他的名字上,然后轻轻点头,仿佛早已习惯了他的「稳定」。

课堂上,李长生依旧是那个「标准听众」,坐得笔直,低头看着课本,手里的笔看似在记录知识点,实则在草稿纸上快速勾勒着时间序列预测的模型框架——ARIMA模型的参数选择、LSTM神经网络的层结构设计,这些问题在他的脑海里反复盘旋。

数学课上,老师讲着「数列的递推公式」,他立刻联想到了时间序列中的「自相关性」——数列的第n项与前几项相关,而时间序列的当前值也与历史值存在关联,两者的逻辑有着异曲同工之妙。他在草稿纸上写下递推公式,再对照ARIMA模型的自回归项,思路瞬间清晰了不少。

物理课上,老师讲着「振动与波」,周期性的波动让他想到了时间序列中的「周期性特征」——门店的客流通常会呈现出日周期、周周期,就像波的振动一样,有固定的频率和振幅。他开始思考如何用傅里叶变换提取客流数据的周期性特征,为模型训练提供更有效的输入。

这种跨学科的知识联动,已经成为他的本能。高中的文化课不再是他需要刻意应付的任务,而是他理解复杂AI算法的「辅助工具」,让他能更快地掌握新的技术知识。

课间,他依旧独来独往,只是不再像以往那样只是趴在桌上或站在走廊尽头,偶尔会拿出手机,快速浏览时间序列预测的相关论文,或是在脑海里模拟LSTM模型的训练过程。王浩依旧会拉着他去打游戏,他还是摇头拒绝,只是偶尔会补充一句「还有事要做」,而不是简单的「不用」。王浩也不气馁,只是拍拍他的肩膀说「下次再约」,便转身离开。

对李长生而言,现在的「要事」,就是那个报酬1500元的「门店客流预测」项目。这是他第一次接触时间序列预测领域,也是他接到的报酬最高的项目,对他而言,既是巨大的挑战,也是一次难得的成长机会。

而他与王帆的相处,在这凛冽的寒冬里,愈发默契,那份淡淡的暖意,也变得更加真切,更加自然。

天气越来越冷,教室的暖气开得很足,空气里弥漫着一股温暖的气息。王帆依旧每天带着那个粉色的保温杯,课间会主动把杯子递给他,说:「刚倒的热水,你喝点暖暖身子。」他会接过杯子,喝上几口,然后轻声说一句「谢谢」,再把杯子还给她。

两人之间的交流也越来越多,不再局限于学习上的问题。王帆会问他:「你每天早上都跑那么久,不累吗?」他会回答:「习惯了,能让头脑清醒。」她会好奇地问:「你总是一个人待着,不觉得无聊吗?」他会淡淡一笑,说:「不会,我有自己要做的事。」

她知道他性格沉默,话不多,所以从不追问他「要做的事」是什么,只是默默尊重他的隐私。而他,也会在她分享日常时,认真倾听,偶尔点头回应。比如,她会说:「周末我妈妈给我做了红烧肉,特别好吃。」他会说:「挺好的。」她会说:「昨天看了一部电影,结局有点感人。」他会说:「是吗?」

这些对话很平淡,却充满了生活气息,让两人之间的距离越来越近。

他们依旧是教室里最安静的同桌,却在细微处有着旁人无法察觉的默契。她会在他熬夜开发后,悄悄在他的桌角放一包饼干,附上一张便签:「记得吃点东西。」他会在她感冒时,默默把自己的感冒药放在她的桌上,写一张纸条:「按时吃,多喝热水。」

有一次,王帆的钢笔坏了,写不出字,急得满头大汗。李长生看到后,默默从书包里拿出一支崭新的钢笔,递给她。这支钢笔是他用第一次接项目赚的钱买的,平时很少用,一直珍藏着。她惊讶地看着他,说:「这是你的新笔吧?我用了,你怎么办?」他说:「我还有一支,你先用着。」

她接过钢笔,笔身冰凉,却仿佛带着他手心的温度。她低头看着钢笔,轻声说:「谢谢你,我用完就还给你。」他摇摇头,说:「不用了,送给你。」

她愣了一下,随即眼睛亮了起来,嘴角扬起一抹灿烂的笑容,说:「真的吗?那太谢谢你了!」这是她第一次在他面前笑得如此灿烂,像冬日里的阳光,温暖而耀眼。他看着她的笑容,心里也泛起一丝淡淡的暖意,轻轻点了点头。

从那以后,王帆每天都用这支钢笔写字,每当看到钢笔,就会想起他沉默而温柔的样子。

没有人注意到他们之间的这些变化,在其他人眼里,他们只是关系还不错的同桌。但只有他们自己知道,在这份沉默的相处中,一种特殊的情感,正在慢慢滋生,不是爱情,而是超越普通同学的默契与信任。

郊外的小木屋里,依旧是他的主战场,也是他探索时间序列预测领域的地方。

新电脑的屏幕每天都会亮到深夜,冷白色的光芒照亮了整个木屋,也照亮了他专注的脸庞。「门店客流预测」项目的难度,远超他之前做过的任何一个项目。时间序列预测与分类任务不同,它需要处理的是具有时间依赖性的数据,需要考虑数据的趋势性、周期性、季节性等特征,模型的搭建和优化也更加复杂。

客户提供的数据集是某门店过去一年的客流数据,包含日期、星期、节假日、天气、温度、客流量等字段,要求根据这些数据,预测未来一个月的门店客流量,预测准确率不低于90%。客户还特别强调,预测结果要尽可能精准,因为这将直接影响门店的库存管理和人员调度。

拿到数据集后,李长生没有立刻搭建模型,而是先对数据进行了全面的探索性分析。他用Pandas对数据进行清洗和预处理,处理缺失值和异常值;用Matplotlib绘制时间序列图,分析客流量的趋势性、周期性和季节性特征。

通过分析,他发现门店的客流量呈现出明显的周周期性——周一到周五的客流量相对稳定,周末的客流量明显增加;同时还存在季节性特征——夏季和冬季的客流量高于春季和秋季;此外,节假日、天气和温度也会对客流量产生一定的影响,比如节假日客流量会大幅增加,雨天客流量会减少。

这些发现,为他后续的模型选择和特征工程提供了重要的依据。

接下来,他开始进行特征工程。他根据探索性分析的结果,构建了一系列新的特征:

1. 时间特征:提取年、月、日、星期、小时等时间特征,并用独热编码转换;

2. 周期性特征:构建周周期特征(是否为周末)、月周期特征(是否为月末)、季节特征(春夏秋冬);

3. 特殊日期特征:构建是否为节假日、是否为节假日前后等特征;

4. 天气特征:将天气类型(晴天、阴天、雨天、雪天)进行编码,保留温度特征;

5. 滞后特征:构建客流量的滞后1天、滞后7天、滞后30天等特征,捕捉数据的时间依赖性;

6. 滚动统计特征:计算客流量的7天滚动均值、7天滚动方差、30天滚动均值等特征,反映数据的趋势变化。

特征工程完成后,他将数据集分为训练集和测试集,训练集占80%,测试集占20%,并对特征进行了标准化处理,确保模型的收敛速度。

接下来是模型选择。时间序列预测的模型有很多,比如传统的ARIMA模型、指数平滑模型,以及深度学习中的LSTM、GRU等模型。经过反复权衡,他决定同时搭建ARIMA模型和LSTM模型,对比两者的预测效果,选择最优模型。

他先搭建了ARIMA模型。ARIMA模型的核心是确定p(自回归项)、d(差分次数)、q(移动平均项)三个参数。他通过自相关函数(ACF)和偏自相关函数(PACF)图,初步确定了p=3、d=1、q=2的参数组合,然后用网格搜索对参数进行优化,最终确定了最优参数p=4、d=1、q=3。

训练完成后,ARIMA模型在测试集上的预测准确率为86.5%,虽然表现不错,但没有达到客户要求的90%。而且,ARIMA模型对非线性特征的捕捉能力有限,无法很好地处理天气、节假日等外部因素的影响。

于是,他决定搭建LSTM模型。LSTM(长短期记忆网络)是一种特殊的循环神经网络(RNN),能够有效捕捉时间序列数据的长期依赖关系,非常适合处理复杂的时间序列预测任务。

他设计的LSTM模型结构如下:

-输入层:接收处理后的特征向量;

-嵌入层:将时间特征进行嵌入,降低维度;

- LSTM层1:64个神经元,返回序列;

- LSTM层2:32个神经元,不返回序列;

- Dropout层: dropout率为0.2,防止过拟合;

-全连接层1:16个神经元,激活函数为ReLU;

-输出层:1个神经元,输出预测的客流量。

模型搭建完成后,他设置了优化器为Adam,学习率为0.001,损失函数为均方误差(MSE),训练轮数为100,批次大小为32。

第一次训练,模型在测试集上的预测准确率为88.3%,比ARIMA模型有了明显提升,但依旧没有达到90%的目标。而且,从训练曲线可以看出,模型在训练集上的损失不断下降,但在测试集上的损失下降到一定程度后就开始波动,存在轻微的过拟合现象。

接下来,他开始对LSTM模型进行优化。他从多个方面入手:

首先,解决过拟合问题。他增加了Dropout层的dropout率,从0.2调整为0.3;在全连接层后也加入了Dropout层;同时,加入了L2正则化,惩罚过大的权重,减少模型的复杂度。

其次,调整模型结构。他增加了LSTM层的神经元数量,将第一层的64个增加到128个,第二层的32个增加到64个;在LSTM层后加入了批归一化(BatchNormalization)层,加快模型的收敛速度,提高模型的稳定性。

再次,优化超参数。他通过网格搜索,调整了学习率、批次大小、训练轮数等超参数。将学习率从0.001调整为0.0005;批次大小从32调整为64;训练轮数从100增加到150。

最后,优化特征工程。他删除了一些相关性较低的特征,增加了一些新的滞后特征和滚动统计特征,进一步提升特征的表达能力。

每一次优化,他都要重新训练模型,观察预测准确率和损失曲线的变化。这个过程依旧繁琐而枯燥,往往一次训练就要花费半个多小时,而一次优化效果不佳,就需要重新调整参数,再次训练。

但他没有丝毫急躁,反而更加专注。时间序列预测的难度远超他的预期,客户提供的数据中存在很多噪声,而且外部因素的影响复杂,想要达到90%的准确率,需要付出更多的努力。

新电脑的算力在这个过程中依旧发挥着关键作用。LSTM模型的训练需要大量的计算资源,尤其是在增加了神经元数量和训练轮数后,训练时间大幅增加。如果是在旧电脑上,一次训练可能需要几个小时,而在新电脑上,仅仅需要半个多小时,这让他能更快地看到优化效果,调整参数。

深夜的小木屋里,只有键盘的清脆敲击声,和屏幕上不断跳动的训练进度条。李长生坐在电脑前,手指在键盘上快速敲击,眼睛紧紧盯着屏幕上的准确率数据,眼神里充满了专注与执着。窗外的寒风呼啸着,卷起地上的落叶,发出呜呜的声响,却丝毫没有影响到他。

他忘记了时间,忘记了疲惫,饿了就吃几口面包,渴了就喝一口水,累了就靠在椅背上休息几分钟,然后立刻继续工作。

就这样,经过四天四夜的高强度优化,他的努力终于有了回报。

当他最后一次按下运行键,模型开始训练。屏幕上的进度条一点点前进,训练集和测试集的准确率不断上升,损失不断下降。当训练完成时,屏幕上显示的结果,让他激动不已。

测试集准确率:91.7%

不仅达到了客户要求的90%,还超出了1.7个百分点!

而且,模型的过拟合问题得到了很好的解决,训练集和测试集的损失曲线都平稳下降,最终趋于一致。

那一刻,李长生靠在椅背上,长长地舒了一口气,嘴角扬起了一抹欣慰的笑容。连续四天四夜的努力,无数次的调试和优化,终于换来了成功。

他没有立刻休息,而是对模型进行了全面的测试。他用模型预测了未来一个月的门店客流量,并与实际的历史数据进行对比,发现预测结果与实际数据的趋势高度一致,误差很小。他还绘制了预测值与实际值的对比图、误差分布图等可视化图表,直观地展示模型的预测效果。

随后,他开始撰写项目报告。他将数据探索性分析、特征工程、模型搭建与优化、预测结果等内容,详细地写进报告里,还附上了各种可视化图表和模型的性能指标,让客户能清晰地看到模型的优势和预测效果。

做完这一切,已经是清晨六点多。天已经亮了,窗外的阳光透过薄雾洒进来,照亮了整个木屋。他看了一眼时间,知道自己该去学校了。

他快速收拾好东西,将训练好的模型文件、预测结果、项目报告一起打包,发送给了买家。然后,他锁上小木屋的门,朝着学校的方向走去。

连续四天四夜没有好好休息,他的身体已经极度疲惫,眼睛里布满了血丝,脚步也有些虚浮。但他的眼神,却依旧坚定,充满了成就感和喜悦。

走到半路,手机震动了一下,是外包平台的消息提醒。他点开一看,是买家的回复,还有一条报酬到账的通知。

买家的消息充满了赞赏:「太惊艳了!预测准确率竟然达到了91.7%,远超我的预期!报告写得非常详细,可视化图表很直观,我能清楚地看到未来一个月的客流趋势,这对我的门店管理太有帮助了!你真的是我遇到过的最专业的开发者!五星好评!以后有任何AI项目,我都找你!」

紧接着,报酬到账的提醒弹了出来:1500元。

他点开余额界面,屏幕上的数字清晰地显示着:13110元。

突破一万三千元了!

这个数字,对他而言,不仅仅是金钱的积累,更是能力的证明。他用自己的努力,证明了自己不仅能做数据分析、图像分类项目,还能做更复杂的时间序列预测项目,证明了自己在AI领域的学习是卓有成效的。

走到学校门口,早自习的铃声刚好响起。他深吸一口气,压下心中的激动,整理了一下衣服,迈步走进了校园。

教室里,王帆已经坐在了座位上,正在认真地早读。看到他走进来,她抬起头,目光落在他布满血丝的眼睛上,眼神里闪过一丝担忧,轻声说:「你又熬夜了?脸色好差。」

他愣了一下,随即点了点头,轻声说:「嗯,刚忙完一件事。」

她没有追问是什么事,只是默默从书包里拿出一包牛奶和一个面包,放在他的桌上,说:「还没吃早饭吧?快吃点。」

他看着桌上的牛奶和面包,心里涌起一股暖流。他知道,她是在关心他。他拿起面包,撕开包装,咬了一口,柔软的面包在嘴里化开,带着淡淡的甜味。他又拿起牛奶,喝了一口,温热的牛奶顺着喉咙流下,温暖了他疲惫的身体。

「谢谢你。」他抬起头,看着她的眼睛,认真地说。

她笑了笑,摇了摇头,说:「不用客气,快吃吧,吃完还要早读呢。」

说完,她便低下头,继续早读,耳根却悄悄泛红了。

李长生坐在座位上,一边吃着面包,一边喝着牛奶,心里充满了温暖。他知道,在这个陌生的小镇,在这个没有亲人的地方,有这样一个默默关心他的同桌,是一件多么幸运的事。

早自习结束后,他的手机又震动了一下,是外包平台的消息。他点开一看,是一个新的买家发来的私信,想要委托他做一个「股票价格预测」的项目,报酬2000元。

看到这个消息,他的眼睛瞬间亮了起来。股票价格预测是时间序列预测领域的经典问题,难度更大,挑战性也更强,但同时,也能让他学到更多的知识。

他没有丝毫犹豫,立刻回复了买家,说:「您好,我有兴趣接这个项目,麻烦发一下详细的需求文档。」

买家很快就发送了需求文档,他快速浏览了一遍,心里已经有了初步的思路。

这个项目,将是他接下来的新挑战。

也是他在AI领域,迈出的又一步。

窗外的阳光越来越明亮,透过窗户洒进来,落在教室里,带来温暖的气息。李长生看着窗外,眼神里充满了坚定和期待。

高一的时光,还在继续。

他的双轨生活,依旧稳定而坚定。

学校里,他是沉默的中等生,在寒冷的冬日里,感受着同桌带来的温暖与默契。

小木屋里,他是专注的AI学习者,在时间序列预测的领域里,不断探索,不断突破。

他的AI之路,还很长,还有很多的知识需要学习,还有很多的挑战需要面对。但他不再孤单,因为有一个人,在默默关心他,支持他。

他的未来,充满了无限可能。

而他知道,只要自己坚持不懈,一步一个脚印地走下去,就一定能实现自己的梦想,走出这个小镇,在AI领域闯出一片属于自己的天地。

新的一天,新的挑战,他已经准备好了。