思路主要参考:https://www.cnblogs.com/HL-space/p/10676637.html
一、作业描述
数据集描述:
- 取12个月每个月前20天共240天的气象数据
- 每天的数据有18个指标
二、思路分析
2.1 数据预处理
利用pd.read_csv 读取标题行之外的数据
数据中共有很多NR数据,该指标RAINFALL 为是否降雨,将NR替换为0
如图所示,取每天从0时开始到8时的所有数据为训练数据,第9个小时的PM2.5值为label,以此类推,则每天共有15个label,240天共有240X15 = 3600个label
#数据预处理,取出每天24h的数据
def dataProcessing(df):
df = df.iloc[:,3:].replace(['NR'],[0.0]) #将空数据替换为0
array = np.array(df).astype(float) # astype转换array中的元素类型
x_list = []
y_list = []
for i in range(0,4320,18):
for j in range(0,15):
mat = array[i:i+18,j:j+9] #每一天中每10个小时的前9个小时当作参数
label = array[i+9,j+9] #第10列是pm2.5的值,第10个小时的pm2.5作为label
x_list.append(mat) #插入参数和label列表
y_list.append(label)
x = np.array(x_list)
y = np.array(y_list)
return x, y
2.2 模型建立
2.2.1 回归模型
简单起见,仅利用线性函数考虑前9个小时的PM2.5的对第10小时PM2.5的影响
其中
为第i小时的PM2.5数据,
为其对应的权重值,
为偏移量,
为第10小时的预测值
2.2.2 损失函数
利用预测值和每个label的平均欧氏距离来衡量损失
其中,为label的值,
为函数的预测值,
为label的数量,
为label的损失
未加入正则项
2.2.3 梯度下降
要想使loss最小,则需要求loss在b和w上的偏微分
更新参数
为w更新时的学习率,
为b更新时的学习率
2.2.4 更新学习率