济宁网站排名,seo网站制作,海报生成器,塘沽生活网今日to do list#xff1a; 做kaggle上面的流量预测项目☠️ 学习时不刷手机#x1f921; okkkkkkkkkkkkkk 开始#x1f44d;#x1f34e;
0、我在干什么#xff1f;
我在预测一个名字叫做elborn基站的下行链路流量#xff0c;用过去29天的数据预测未来10天的数据
1、…今日to do list 做kaggle上面的流量预测项目☠️ 学习时不刷手机 okkkkkkkkkkkkkk 开始
0、我在干什么
我在预测一个名字叫做elborn基站的下行链路流量用过去29天的数据预测未来10天的数据
1、import libararies
一般必须都要导入的库有
import pandas as pd : data processing, like pd.read.csv…import numpy as np 线性代数import matplotlib.pyplot as plt 画图
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import numpy as np # linear algebra
import warnings
warnings.filterwarnings(ignore) # 忽略警告信息
import matplotlib.pyplot as plt2、加载数据load data
对csv数据使用pandas.read_csv函数读取 一些参数
filepath_or_buffer: 文件路径或缓冲区。可以是本地文件路径也可以是文件对象、URL等header: 列名索引。指定数据文件中列名的索引。默认为None表示没有列名。取值可以是整数表示第几行为列名也可以是None表示自动检测列名还可以是列表表示指定列名的位置。na_values: 缺失值。指定用于替换缺失值的字符或列表。默认为[‘NA’, ‘null’, ‘NaN’]。index_col: 索引列。指定数据文件中用于索引的列。默认为None表示没有索引列。取值可以是整数表示第几列用于索引也可以是列名表示指定列用于索引。sep: 分隔符。用于分隔数据行的字段。默认为逗号,。delimiter: 分隔符。与sep类似但它是更通用的参数可以用于其他类型的分隔符如制表符\t等。
elborn_df pd.read_csv(dataset/ElBorn.csv)
elborn_test_df pd.read_csv(dataset/ElBorn_test.csv)3、独家观察数据函数
basic_eda
前五行显示DataFrame的详细信息包括列名、数据类型、缺失值显示DataFrame的统计摘要信息包括每列的平均值、标准差、最小值、最大值等显示列名各列的数据类型是否有缺失值是否有NULL值数据的形状
def basic_eda(df):print(-------------------------------TOP 5 RECORDS-----------------------------)print(df.head(5))print(-------------------------------INFO--------------------------------------)print(df.info())print(-------------------------------Describe----------------------------------)print(df.describe())print(-------------------------------Columns-----------------------------------)print(df.columns)print(-------------------------------Data Types--------------------------------)print(df.dtypes)print(----------------------------Missing Values-------------------------------)print(df.isnull().sum())print(----------------------------NULL values----------------------------------)print(df.isna().sum())print(--------------------------Shape Of Data---------------------------------)print(df.shape)print( \n)
basic_eda(elborn_df)
basic_eda(elborn_test_df)然后画图看一下
# 我现在想把elborn_df画出来横坐标是时间纵坐标是down并且横坐标的标签要旋转45度书写
plt.plot(elborn_df.index, elborn_df.down)
plt.xlabel(Time)
plt.ylabel(Down)
plt.title(Down)
# 我想把横坐标的日期标签旋转45
plt.xticks(rotation45)在这里面的Python小知识总结纯小白哈
DataFrame.index将得到DataFrame的索引日期作为Series对象 如果DataFrame的index是整数则返回一个从0开始的整数序列0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 Name: index, dtype: int64 plt.plot()绘制折线的基本函数 以下是一些参数 x x轴数据可以是列表、元组、NumPy数组等。y y轴数据可以是列表、元组、NumPy数组等。fmt 折线图的样式和颜色。 例如ro-表示红色圆圈加短横线b–表示蓝色虚线。 label为折线图添加一个标签可以在plt.legend()函数中使用该标签用于显示图例。linewidth: 折线图的宽度。color: 折线图的颜色。marker: 折线图的标记形状例如圆圈、叉号等。markeredgecolor: 标记的边缘颜色。markerfacecolor: 标记的填充颜色。markevery: 标记的间隔例如每隔10个数据点标记一次。 plt.xticks(rotation45)设置x轴刻度标签的位置和显示方式
4、数据预处理pre-processing
1将时间戳转换为一个日期时间索引
elborn_df.set_index(pd.DatetimeIndex(elborn_df[time]), inplaceTrue)
elborn_df.drop([time], axis1, inplaceTrue)2填充所有缺失的值
不填充的话后续fit模型的时候会出现loss全部为NAN的情况
elborn_df.down.fillna(elborn_df.down.mean(), inplaceTrue)
print(elborn_df.isna().sum())3将时间序列数据转换成监督学习数据
在训练监督学习深度学习模型前要把time series数据转化成samples的形式 那什么是sample有一个输入组件 X X X和一个输出组件 y y y 深度学习模型就是一个映射函数 y f ( X ) yf(X) yf(X) 对于一个单变量的one-step预测输入组件就是前一个时间步的滞后数据输出组件就是当前时间步的数据如下 X, y [1, 2, 3], [4] [2, 3, 4], [5] [3, 4, 5], [6] … 这里就是手动转换啦之前写过使用TimeseriesGenerator自动转换的方法看看对比
手动转换
def series_to_supervised(data, window3, lag1, dropnanTrue):cols, names list(), list()# Input sequence (t-n, ... t-1)for i in range(window, 0, -1):cols.append(data.shift(i))names [(%s(t-%d) % (col, i)) for col in data.columns]# Current timestep (t0)cols.append(data)names [(%s(t) % (col)) for col in data.columns]# Target timestep (tlag)cols.append(data.shift(-lag))names [(%s(t%d) % (col, lag)) for col in data.columns]# Put it all togetheragg pd.concat(cols, axis1)agg.columns namesreturn agg
window 29
lag 10
elborn_df_supervised series_to_supervised(elborn_df, window, lag)4数据集划分split为训练集和验证集 训练集和测试集的区别 使用验证集是为了快速调参也就是用验证集选择超参数网络层数网络节点数迭代次数学习率这些。另外用验证集还可以监控模型是否异常过拟合啦什么的然后决定是不是要提前停止训练。验证集的关键在于选择超参数我们手动调参是为了让模型在验证集上的表现越来越好如果把测试集作为验证集调参去拟合测试集就有点像作弊了。而测试集既不参与参数的学习过程也不参与参数的选择过程仅仅用于模型评价。 训练集在建模过程中会被大量经常使用验证集用于对模型少量偶尔的调整而测试集只作为最终模型的评价出现因此训练集验证集和测试集所需的数据量也是不一致的在数据量不是特别大的情况下一般遵循6:2:2的划分比例 为了使模型“训练”效果能合理泛化至“测试”效果从而推广应用至现实世界中因此一般要求训练集验证集和测试集数据分布近似。但需要注意三个数据集所用数据是不同的。
from sklearn.model_selection import train_test_split
label_name down(t%d) % (lag)
label elborn_df_supervised[label_name]
elborn_df_supervised elborn_df_supervised.drop(label_name, axis1)
X_train, X_valid, Y_train, Y_valid train_test_split(elborn_df_supervised, label, test_size0.4, random_state0)
print(Train set shape, X_train.shape)
print(Validation set shape, X_valid.shape)4、创建MLP模型
1设置超参数
epochs 40
batch 256
lr 0.0003
adam optimizers.Adam(lr)2创建模型keras
model_mlp Sequential()
model_mlp.add(Dense(100, activationrelu, input_dimX_train.shape[1]))
model_mlp.add(Dense(1))
model_mlp.compile(lossmse, optimizeradam)
model_mlp.summary()3训练模型
mlp_hitstory model_mlp.fit(X_train.values, Y_train, epochsepochs, batch_sizebatch, validation_data(X_valid.values, Y_valid), verbose2)4画随epoch变化的loss图
# 画图横坐标是epochs纵坐标是loss分别画出train loss和validation loss
import matplotlib.pyplot as pltplt.plot(mlp_hitstory.history[loss])
plt.plot(mlp_hitstory.history[val_loss])
plt.title(model loss)
plt.ylabel(loss)
plt.xlabel(epoch)
plt.legend([train, validation], locupper left)
plt.show()5计算预测值和实际值之间的均方误差
from sklearn.metrics import mean_squared_error
mlp_train_pred model_mlp.predict(X_train.values)
mlp_valid_pred model_mlp.predict(X_valid.values)
print(Train rmse:, np.sqrt(mean_squared_error(Y_train, mlp_train_pred)))
print(Validation rmse:, np.sqrt(mean_squared_error(Y_valid, mlp_valid_pred)))接写到这里吧今天效率太低了明天继续