传送门:蓝桥云课实验
目录
1. 实验环境
Jupyter Notebook
Python 3.7
PyTorch 1.4.0
2. 实验目的
构建人工神经网络,并用它来预测未来某地区租赁单车的使用情况。
3. 相关原理
数据归一化、类型变量的转换。
搭建基本神经网络的方法。
数据分批次训练原则。
测试及简单分析神经网络的方法
4. 实验步骤
#数据的下载与解压:
!wget http://labfile.oss.aliyuncs.com/courses/1073/bike-sharing-dataset.zip
!unzip bike-sharing-dataset.zip
数据都在文件“hour.csv”中,该文件大小为 1.2M,完全可以直接读取到内存中

数据文件记录了每小时(hr)共享单车的使用数量(cnt),除了这两个数据项外,还包括当天的日期(dteday),季节(season),星期几(weekday),是否是假期(holiday),当天的温度、湿度、风速、用户是否注册等等,我们就是要使用这些数据训练神经网络模型。
4.1 数据预处理
import numpy as np
import pandas as pd #读取csv文件的库
import matplotlib.pyplot as plt
import torch
from torch.autograd import Variable
import torch.optim as optim
# 让输出的图形直接在Notebook中显示
%matplotlib inline
#首先,让我们再来看看数据长什么样子
#读取数据到内存中,rides为一个dataframe对象
data_path = 'bike-sharing-dataset/hour.csv'
rides = pd.read_csv(data_path)
rides.head() #运用 pandas 模块的 head 方法,将数据的数据表头和部分数据项打印出来。
4.1.1 对于类型变量的处理
类型变量是指这个变量的不同值仅仅表达不同的类型,值的大小不同但没有高低之分。
有很多变量都属于类型变量,例如 season=1,2,3,4 代表四季。
我们不能将 season 变量直接输入到神经网络,这是因为 season 数值越高并不表示相应的信号强度越大。
解决方案是将类型变量用一个“一位热码“(one-hot)来编码,也就是:
𝑠𝑒𝑎𝑠𝑜𝑛=1→(1,0,0,0)
𝑠𝑒𝑎𝑠𝑜𝑛=2→(0,1,0,0)
𝑠𝑒𝑎𝑠𝑜𝑛=3→(0,0,1,0)
𝑠𝑒𝑎𝑠𝑜𝑛=4→(0,0,0,1)
因此,如果一个类型变量有 n 个不同取值,那么我 one-hot 所对应的向量长度就为 n。
例如:

#对于类型变量的特殊处理
# season=1,2,3,4, weathersi=1,2,3, mnth= 1,2,...,12, hr=0,1, ...,23, weekday=0,1,...,6
# 经过下面的处理后,将会多出若干特征,例如,对于season变量就会有 season_1, season_2, season_3, season_4
# 这四种不同的特征。
dummy_fields = ['season', 'weathersit', 'mnth', 'hr', 'weekday']
for each in dummy_fields:
#利用pandas对象,我们可以很方便地将一个类型变量属性进行one-hot编码,变成多个属性
dummies = pd.get_dummies(rides[each], prefix=each, drop_first=False)
rides = pd.concat([rides, dummies], axis=1)
# 把原有的类型变量对应的特征去掉,将一些不相关的特征去掉
fields_to_drop = ['instant', 'dteday', 'season', 'weathersit',
'weekday', 'atemp', 'mnth', 'workingday', 'hr']
data = rides.drop(fields_to_drop, axis=1)
data.head()
从显示出的数据中可以看到一年四季、12 个月份、24 个小时数、一周 7 天、天气情况都已经被转化成了 one-hot 变量。

4.1.2 对于数值类型变量进行标准化
由于每个数值型变量都是相互独立的,所以它们的数值绝对大小与问题本身没有关系。(更看重变化趋势而非数值大小)
为了消除数值大小的差异,我们对每一个数值型变量进行标准化处理,也就是让其数值都围绕着0左右波动。
比如,对于温度 temp 这个变量来说,它在整个数据库取值的平均值为 mean(temp),方差为 std(temp),所以,归一化的温度计算为:

这样做的好处就是可以将不同的取值范围的变量设置为让它们处于一个平等的地位。
# 调整所有的特征,标准化处理
quant_features = ['cnt', 'temp', 'hum', 'windspeed']
#quant_features = ['temp', 'hum', 'windspeed']
# 我们将每一个变量的均值和方差都存储到scaled_features变量中。
scaled_features = {
}
for each in quant_

该实验通过PyTorch构建人工神经网络,预测共享单车的使用情况。首先进行数据预处理,包括one-hot编码类型变量和数值变量的标准化。然后,利用预处理的数据训练神经网络模型,通过分批次处理数据进行训练,并监控损失函数的变化。最后,在测试集上评估模型的预测性能。
最低0.47元/天 解锁文章
1379

被折叠的 条评论
为什么被折叠?



