96SEO 2026-02-23 11:57 3
本次使用seaborn库中的flights数据集来做试验我们通过获取其中年份月份与坐飞机的人数关系来预测未来月份的坐飞机人数。

注意很多信息都在注释里有所以就不会详细解释多看注释
我们只需要导入MinMaxScaler类而不需要访问该模块中的其他函数或变量
有两种方式获取一种是从网上拉取一种是下载到本地因为网络问题所以我就下载到了本地联网获取的方式也有只不过被注释了。
使用其中的飞行数据集获取到的数据类型是Pandas中的DataFrame
data_homeC:/Users/51699/Desktop/seaborn-data,
打印数据形状结果是144,3144/1212表示是有12年的数据
print(flight_data.shape)可以看到打印出来的数据结构包含年份月份乘客信息。
flight_data
的数据类型是DataFrame。
数据形状是一个144行3列的矩阵144/1212表示这里总共有12年的数据144个月。
print(列名信息---------------------------------------------------------------------------)
flight_data[passengers].values.astype(float)
print(乘客数量数据---------------------------------------------------------------------------)
print(all_data)下面需要把144条数据的后12条作为测试数据144-12132条数据作为训练数据。
然后把切分好的数据做归一化处理消除特征关系。
可以看出下面的打印内容所有数据都被限制到了-1和1之间。
数据总量为144我们使用前132条作为训练后12条用来做测试所以需要把数据分为训练集和测试集
将all_data中除了最后test_data_size个元素之外的所有元素作为训练集赋值给变量train_data
将all_data中最后test_data_size个元素作为测试集赋值给变量test_data
目的是将不同特征的数据量纲统一消除特征之间的量纲影响使得不同特征之间具有可比性
scaler.fit_transform(train_data.reshape(-1,
print(归一化后的前5条和后5条数据---------------------------------------------------------------------------)
print(train_data_normalized[:5])
print(train_data_normalized[-5:])把归一化后的乘客数据转化为tensor张量只有张量才能让GPU运算
把归一化后的乘客数据转化为tensor张量因为PyTorch模型都是要使用tensor张量训练其中参数-1表示根据数据自动推断维度的大小。
这意味着PyTorch将根据数据的长度和形状来动态确定张量的维度。
torch.FloatTensor(train_data_normalized).view(-1)
print(乘客np转化为PyTorch张量---------------------------------------------------------------------------)
print(train_data_normalized)到目前为止我们已经有了一个一维的张量接下来就需要制作训练集训练集一般包含训练的数据和这组训练数据对应的标签。
因为一年有12个月所以我们就取数据中的第1个到第12个作为训练的数据第13个作为标签这就是第一组数据。
第二组我们取第2个到第13个数据作为训练数据第14个作为标签这就是第二组数据依次类推我们就有132组训练数据。
将我们的训练数据转换为序列和相应的标签可以使用任何序列长度这取决于领域知识。
然而在我们的数据集中由于我们有每月的数据且一年有12个月因此使用序列长度为12是方便的
从下面的打印可以看出第一个tensor中的第一个是训练数组内容是1-12月的值第二个是标签数组内容是13月的值。
第二个tensor中的第一个训练数组是2-13月的值第二个标签数组是14月的值
训练集总数是132每12个为一组第13个是标签,每次往后移动一个数字所以有132组
method.create_inout_sequences(train_data_normalized,
print(训练的序列和相应的标签-------------------------------------------------------------------)
print(train_inout_seq)其中method.create_inout_sequences是另外一个自定义模块里的方法
create_inout_sequences(input_data,
下面继续在method模块中定义我们的类LSTM。
其中lstm_out,
self.lstm(input_seq.view(len(input_seq),
self.hidden_cell)相其实就是pytorch的impose函数他要接收一个三维的向量因为LSTM的隐含层是需要接收三个参数的。
input_size对应于输入中特征的数量。
虽然我们的序列长度为12但每个月只有1个值即乘客总数因此输入大小将为1#
hidden_layer_size指定每层神经元的数量。
我们将有一个100个神经元的隐藏层#
output_size输出中项目的数量由于我们想要预测未来1个月内乘客人数因此输出大小将为1def
output_size1):super().__init__()self.hidden_layer_size
self.lstm是已经被实例化过的lstm第一个参数是输入的序列第二个参数是隐藏层的状态隐式调用了向前传播函数,本质就是input方法#
返回值lstm_out是最终的输出hidden_cell是隐藏层的状态#
print(input_seq.view(len(input_seq),
-1)需要转化为3维张量因为LSTM的隐含层是接收三个参数的lstm_out,
self.lstm(input_seq.view(len(input_seq),
self.linear是一个全连接线性神经网络层predictions
self.linear(lstm_out.view(len(input_seq),
返回线性层输出张量中的最后一个元素作为最终地预测值return
接下来就要声明LSTM类以及一些初始化关于损失函数和步长的更新方法都在注释里有解释。
torch.optim.Adam(model.parameters(),
在PyTorch中定义一个全连接线性神经网络层并将其添加到模型中
训练模型每一组模型训练的时候都要清除前面一组训练留下的隐含层信息梯度清零的主要原因是为了梯度消失和梯度爆炸问题。
y_pred
model(seq)就是调用了上面LSTM类中的forward
model.hidden_layer_size),torch.zeros(1,
打印最终损失LSTM类中的forward方法里的input_seq.view(len(input_seq),
-1)变形后如下这些就是第一轮要进入到LSTM中训练的数据每次进入一个总共进入12次正向传播然后返回一个均方误差用来和标签值计算损失计算梯度反向传播更新隐含层中的参数权重。
train_data_normalized[-train_window:].tolist()
torch.FloatTensor(test_inputs[-train_window:])#
model.hidden_layer_size),torch.zeros(1,
model.hidden_layer_size))print(seq)#
0.2997])test_inputs.append(model(seq).item())
scaler.inverse_transform(np.array(test_inputs[train_window:]
print(actual_predictions)下面是往后预测是12个月的数据
上面的试验用的是单参数但是为了让模型的拟合性更好肯定是要使用多参数那么上面的LSTM类中的__init__方法input_size就需要改变比如我们现在要预测每天坐飞机的人数有机票价格天气湿度三个条件数据量为一年。
因为是三个特征值那么input_size就是3那么我们用3天来做序列长度那么训练集应该是
神经网络的结构大概如上红色箭头表示上一次训练隐含层的输入红框表示输入层参数可以看出来还是要输入一个三维的张量其中一维是输入层输入的另外两个是上个时刻隐含层输入的。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback