第一部分解读链接:解读李宏毅机器学习数据处理部分(1)_Hey Kids!!!的博客-CSDN博客
x = np.empty([12 * 471, 18 * 9], dtype=float)
y = np.empty([12 * 471, 1], dtype=float)
for month in range(12):
for day in range(20):
for hour in range(24):
if day == 19 and hour > 14:
continue
x[month * 471 + day * 24 + hour, :] = month_data[month][:,day * 24 + hour: day * 24 + hour + 9].reshape(1,-1) # vector dim:18*9 (9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9)
y[month * 471 + day * 24 + hour, 0] = month_data[month][9, day * 24 + hour + 9] # value
这个部分的数据处理依然把我难的大汗淋漓 = =
我们前面有提到month_data 是一个字典,月份是key,(18,480)的数组是value
x和y为什么这样设置:
x- 行:12是12个月份,471的含义是480个小时每9小时算一笔,举个例子:0-8,1-9,.....,472-480,这里总共471笔,
列:我画个图就明白了。拿第一第二列为例子:
y- 就是标签x取的是前九小时作为训练,然后第十小时数据作为label,这里很好理解不做赘述。
我们来承接上面的代码看看老师是怎么操作的
month = 0
day = 0
hour = 0:24
x[0, :] = month_data[0][:,0:9].reshape(1,-1)
month_data[0]对应的是第一个月的数据,我们知道格式是(18,480)取所有18行,然后列取前九小时。
我们知道在上一段代码中我已经把每个月20天的数据按照18个feature全给他分好了。
这样切下来的就是完整的18个feature对应的小时数据。
reshape(1,-1)的作用就是把它全部拉成一行,作为x的第一行
总结一下:
上一篇文章提到的代码段的目的是将分散在每天的各个feature的数据重新整合归类,这一篇的代码段的目的是把每一个时间段的数据进行汇总,第一行只要0-8小时的所有数据,第二行只要1-9小时的所有数据以此类推,这样处理就能把数据完美划分了,不得不说李宏毅老师还是厉害的。
现在这个代码干了啥应该就迎刃而解了:)