Pytorch气温预测实战

数据集

数据有8个特征,一个标签值

自变量因变量
yearactual:当天的真实最高温度
month
day
week:星期几
temp_1:昨天的最高温度
temp_2:前天的最高温度值
average:在历史中,每年这一天的平均最高温度
friend:朋友猜测的温度
year,month,day,week,temp_2,temp_1,average,actual,friend
2016,1,1,Fri,45,45,45.6,45,29
2016,1,2,Sat,44,45,45.7,44,61
2016,1,3,Sun,45,44,45.8,41,56
2016,1,4,Mon,44,41,45.9,40,53
2016,1,5,Tues,41,40,46,44,41
2016,1,6,Wed,40,44,46.1,51,40
2016,1,7,Thurs,44,51,46.2,45,38
2016,1,8,Fri,51,45,46.3,48,34
2016,1,9,Sat,45,48,46.4,50,47
2016,1,10,Sun,48,50,46.5,52,49
2016,1,11,Mon,50,52,46.7,45,39
2016,1,12,Tues,52,45,46.8,49,61
2016,1,13,Wed,45,49,46.9,55,33
2016,1,14,Thurs,49,55,47,49,58
2016,1,15,Fri,55,49,47.1,48,65
2016,1,16,Sat,49,48,47.3,54,28
2016,1,17,Sun,48,54,47.4,50,47
2016,1,18,Mon,54,50,47.5,54,58
2016,1,19,Tues,50,54,47.6,48,53
2016,1,20,Wed,54,48,47.7,52,61
2016,1,21,Thurs,48,52,47.8,52,57
2016,1,22,Fri,52,52,47.9,57,60
2016,1,23,Sat,52,57,48,48,37
2016,1,24,Sun,57,48,48.1,51,54
2016,1,25,Mon,48,51,48.2,54,63
2016,1,26,Tues,51,54,48.3,56,61
2016,1,27,Wed,54,56,48.4,57,54
2016,1,28,Thurs,56,57,48.4,56,34
2016,1,29,Fri,57,56,48.5,52,49
2016,1,30,Sat,56,52,48.6,48,47
2016,1,31,Sun,52,48,48.7,47,61
2016,2,1,Mon,48,47,48.8,46,51
2016,2,2,Tues,47,46,48.8,51,56
2016,2,3,Wed,46,51,48.9,49,40
2016,2,4,Thurs,51,49,49,49,44
2016,2,5,Fri,49,49,49.1,53,45
2016,2,6,Sat,49,53,49.1,49,56
2016,2,7,Sun,53,49,49.2,51,63
2016,2,8,Mon,49,51,49.3,57,34
2016,2,9,Tues,51,57,49.4,62,57
2016,2,10,Wed,57,62,49.4,56,30
2016,2,11,Thurs,62,56,49.5,55,37
2016,2,12,Fri,56,55,49.6,58,33
2016,2,15,Mon,55,58,49.9,55,53
2016,2,16,Tues,58,55,49.9,56,55
2016,2,17,Wed,55,56,50,57,46
2016,2,18,Thurs,56,57,50.1,53,34
2016,2,19,Fri,57,53,50.2,51,42
2016,2,20,Sat,53,51,50.4,53,43
2016,2,21,Sun,51,53,50.5,51,46
2016,2,22,Mon,53,51,50.6,51,59
2016,2,23,Tues,51,51,50.7,60,43
2016,2,24,Wed,51,60,50.8,59,46
2016,2,25,Thurs,60,59,50.9,61,35
2016,2,26,Fri,59,61,51.1,60,65
2016,2,27,Sat,61,60,51.2,57,61
2016,2,28,Sun,60,57,51.3,53,66
2016,3,1,Tues,53,54,51.5,58,53
2016,3,2,Wed,54,58,51.6,55,37
2016,3,3,Thurs,58,55,51.8,59,71
2016,3,4,Fri,55,59,51.9,57,45
2016,3,5,Sat,59,57,52.1,64,46
2016,3,6,Sun,57,64,52.2,60,49
2016,3,7,Mon,64,60,52.4,53,71
2016,3,8,Tues,60,53,52.5,54,70
2016,3,9,Wed,53,54,52.7,55,57
2016,3,10,Thurs,54,55,52.8,56,50
2016,3,11,Fri,55,56,53,55,36
2016,3,12,Sat,56,55,53.1,52,65
2016,3,13,Sun,55,52,53.3,54,54
2016,3,14,Mon,52,54,53.4,49,44
2016,3,15,Tues,54,49,53.6,51,70
2016,3,16,Wed,49,51,53.7,53,65
2016,3,17,Thurs,51,53,53.9,58,62
2016,3,18,Fri,53,58,54,63,56
2016,3,19,Sat,58,63,54.2,61,62
2016,3,20,Sun,63,61,54.3,55,50
2016,3,21,Mon,61,55,54.5,56,52
2016,3,22,Tues,55,56,54.6,57,64
2016,3,23,Wed,56,57,54.7,53,70
2016,3,24,Thurs,57,53,54.9,54,72
2016,3,25,Fri,53,54,55,57,42
2016,3,26,Sat,54,57,55.2,59,54
2016,3,27,Sun,57,59,55.3,51,39
2016,3,28,Mon,59,51,55.5,56,47
2016,3,29,Tues,51,56,55.6,64,45
2016,3,30,Wed,56,64,55.7,68,57
2016,3,31,Thurs,64,68,55.9,73,56
2016,4,1,Fri,68,73,56,71,41
2016,4,2,Sat,73,71,56.2,63,45
2016,4,3,Sun,71,63,56.3,69,64
2016,4,4,Mon,63,69,56.5,60,45
2016,4,5,Tues,69,60,56.6,57,72
2016,4,6,Wed,60,57,56.8,68,64
2016,4,7,Thurs,57,68,56.9,77,38
2016,4,8,Fri,68,77,57.1,76,41
2016,4,9,Sat,77,76,57.2,66,74
2016,4,10,Sun,76,66,57.4,59,60
2016,4,11,Mon,66,59,57.6,58,40
2016,4,12,Tues,59,58,57.7,60,61
2016,4,13,Wed,58,60,57.9,59,77
2016,4,14,Thurs,60,59,58.1,59,66
2016,4,15,Fri,59,59,58.3,60,40
2016,4,16,Sat,59,60,58.5,68,59
2016,4,17,Sun,60,68,58.6,77,54
2016,4,18,Mon,68,77,58.8,89,39
2016,4,19,Tues,77,89,59,81,61
2016,4,20,Wed,89,81,59.2,81,66
2016,4,21,Thurs,81,81,59.4,73,55
2016,4,22,Fri,81,73,59.7,64,59
2016,4,23,Sat,73,64,59.9,65,57
2016,4,24,Sun,64,65,60.1,55,41
2016,4,25,Mon,65,55,60.3,59,77
2016,4,26,Tues,55,59,60.5,60,75
2016,4,27,Wed,59,60,60.7,61,50
2016,4,28,Thurs,60,61,61,64,73
2016,4,29,Fri,61,64,61.2,61,49
2016,4,30,Sat,64,61,61.4,68,78
2016,5,1,Sun,61,68,61.6,77,75
2016,5,2,Mon,68,77,61.9,87,59
2016,5,3,Tues,77,87,62.1,74,69
2016,5,4,Wed,87,74,62.3,60,61
2016,5,5,Thurs,74,60,62.5,68,56
2016,5,6,Fri,60,68,62.8,77,64
2016,5,7,Sat,68,77,63,82,83
2016,5,8,Sun,77,82,63.2,63,83
2016,5,9,Mon,82,63,63.4,67,64
2016,5,10,Tues,63,67,63.6,75,68
2016,5,11,Wed,67,75,63.8,81,60
2016,5,12,Thurs,75,81,64.1,77,81
2016,5,13,Fri,81,77,64.3,82,67
2016,5,14,Sat,77,82,64.5,65,65
2016,5,15,Sun,82,65,64.7,57,58
2016,5,16,Mon,65,57,64.8,60,53
2016,5,17,Tues,57,60,65,71,55
2016,5,18,Wed,60,71,65.2,64,56
2016,5,19,Thurs,71,64,65.4,63,56
2016,5,20,Fri,64,63,65.6,66,73
2016,5,21,Sat,63,66,65.7,59,49
2016,5,22,Sun,66,59,65.9,66,80
2016,5,23,Mon,59,66,66.1,65,66
2016,5,24,Tues,66,65,66.2,66,67
2016,5,25,Wed,65,66,66.4,66,60
2016,5,26,Thurs,66,66,66.5,65,85
2016,5,27,Fri,66,65,66.7,64,73
2016,5,28,Sat,65,64,66.8,64,64
2016,5,29,Sun,64,64,67,64,76
2016,5,30,Mon,64,64,67.1,71,69
2016,5,31,Tues,64,71,67.3,79,85
2016,6,1,Wed,71,79,67.4,75,58
2016,6,2,Thurs,79,75,67.6,71,77
2016,6,3,Fri,75,71,67.7,80,55
2016,6,4,Sat,71,80,67.9,81,76
2016,6,5,Sun,80,81,68,92,54
2016,6,6,Mon,81,92,68.2,86,71
2016,6,7,Tues,92,86,68.3,85,58
2016,6,8,Wed,86,85,68.5,67,81
2016,6,9,Thurs,85,67,68.6,65,80
2016,6,10,Fri,67,65,68.8,67,73
2016,6,11,Sat,65,67,69,65,87
2016,6,12,Sun,67,65,69.1,70,83
2016,6,13,Mon,65,70,69.3,66,79
2016,6,14,Tues,70,66,69.5,60,85
2016,6,15,Wed,66,60,69.7,67,69
2016,6,16,Thurs,60,67,69.8,71,87
2016,6,17,Fri,67,71,70,67,54
2016,6,18,Sat,71,67,70.2,65,77
2016,6,19,Sun,67,65,70.4,70,58
2016,6,20,Mon,65,70,70.6,76,79
2016,6,21,Tues,70,76,70.8,73,57
2016,6,22,Wed,76,73,71,75,78
2016,6,23,Thurs,73,75,71.3,68,56
2016,6,24,Fri,75,68,71.5,69,65
2016,6,25,Sat,68,69,71.7,71,89
2016,6,26,Sun,69,71,71.9,78,70
2016,6,27,Mon,71,78,72.2,85,84
2016,6,28,Tues,78,85,72.4,79,67
2016,6,29,Wed,85,79,72.6,74,81
2016,6,30,Thurs,79,74,72.8,73,87
2016,7,1,Fri,74,73,73.1,76,93
2016,7,2,Sat,73,76,73.3,76,84
2016,7,3,Sun,76,76,73.5,71,85
2016,7,4,Mon,76,71,73.8,68,86
2016,7,5,Tues,71,68,74,69,62
2016,7,6,Wed,68,69,74.2,76,86
2016,7,7,Thurs,69,76,74.4,68,72
2016,7,8,Fri,76,68,74.6,74,77
2016,7,9,Sat,68,74,74.9,71,60
2016,7,10,Sun,74,71,75.1,74,95
2016,7,11,Mon,71,74,75.3,74,71
2016,7,12,Tues,74,74,75.4,77,71
2016,7,13,Wed,74,77,75.6,75,56
2016,7,14,Thurs,77,75,75.8,77,77
2016,7,15,Fri,75,77,76,76,75
2016,7,16,Sat,77,76,76.1,72,61
2016,7,17,Sun,76,72,76.3,80,88
2016,7,18,Mon,72,80,76.4,73,66
2016,7,19,Tues,80,73,76.6,78,90
2016,7,20,Wed,73,78,76.7,82,66
2016,7,21,Thurs,78,82,76.8,81,84
2016,7,22,Fri,82,81,76.9,71,70
2016,7,23,Sat,81,71,77,75,86
2016,7,24,Sun,71,75,77.1,80,75
2016,7,25,Mon,75,80,77.1,85,81
2016,7,26,Tues,80,85,77.2,79,74
2016,7,27,Wed,85,79,77.3,83,79
2016,7,28,Thurs,79,83,77.3,85,76
2016,7,29,Fri,83,85,77.3,88,77
2016,7,30,Sat,85,88,77.3,76,70
2016,7,31,Sun,88,76,77.4,73,95
2016,8,1,Mon,76,73,77.4,77,65
2016,8,2,Tues,73,77,77.4,73,62
2016,8,3,Wed,77,73,77.3,75,93
2016,8,4,Thurs,73,75,77.3,80,66
2016,8,5,Fri,75,80,77.3,79,71
2016,8,6,Sat,80,79,77.2,72,60
2016,8,7,Sun,79,72,77.2,72,95
2016,8,8,Mon,72,72,77.1,73,65
2016,8,9,Tues,72,73,77.1,72,94
2016,8,10,Wed,73,72,77,76,68
2016,8,11,Thurs,72,76,76.9,80,80
2016,8,12,Fri,76,80,76.9,87,81
2016,8,13,Sat,80,87,76.8,90,73
2016,8,14,Sun,87,90,76.7,83,65
2016,8,15,Mon,90,83,76.6,84,70
2016,8,16,Tues,83,84,76.5,81,90
2016,8,23,Tues,84,81,75.7,79,89
2016,8,28,Sun,81,79,75,75,85
2016,8,30,Tues,79,75,74.6,70,63
2016,9,3,Sat,75,70,73.9,67,68
2016,9,4,Sun,70,67,73.7,68,64
2016,9,5,Mon,67,68,73.5,68,54
2016,9,6,Tues,68,68,73.3,68,79
2016,9,7,Wed,68,68,73,67,70
2016,9,8,Thurs,68,67,72.8,72,56
2016,9,9,Fri,67,72,72.6,74,78
2016,9,10,Sat,72,74,72.3,77,91
2016,9,11,Sun,74,77,72.1,70,70
2016,9,12,Mon,77,70,71.8,74,90
2016,9,13,Tues,70,74,71.5,75,82
2016,9,14,Wed,74,75,71.2,79,77
2016,9,15,Thurs,75,79,71,71,64
2016,9,16,Fri,79,71,70.7,75,52
2016,9,17,Sat,71,75,70.3,68,84
2016,9,18,Sun,75,68,70,69,90
2016,9,19,Mon,68,69,69.7,71,88
2016,9,20,Tues,69,71,69.4,67,81
2016,9,21,Wed,71,67,69,68,76
2016,9,22,Thurs,67,68,68.7,67,56
2016,9,23,Fri,68,67,68.3,64,61
2016,9,24,Sat,67,64,68,67,64
2016,9,25,Sun,64,67,67.6,76,62
2016,9,26,Mon,67,76,67.2,77,74
2016,9,27,Tues,76,77,66.8,69,64
2016,9,28,Wed,77,69,66.5,68,62
2016,9,29,Thurs,69,68,66.1,66,57
2016,9,30,Fri,68,66,65.7,67,74
2016,10,1,Sat,66,67,65.3,63,54
2016,10,2,Sun,67,63,64.9,65,82
2016,10,3,Mon,63,65,64.5,61,49
2016,10,4,Tues,65,61,64.1,63,60
2016,10,5,Wed,61,63,63.7,66,48
2016,10,6,Thurs,63,66,63.3,63,55
2016,10,7,Fri,66,63,62.9,64,78
2016,10,8,Sat,63,64,62.5,68,73
2016,10,9,Sun,64,68,62.1,57,55
2016,10,10,Mon,68,57,61.8,60,62
2016,10,11,Tues,57,60,61.4,62,58
2016,10,12,Wed,60,62,61,66,52
2016,10,13,Thurs,62,66,60.6,60,57
2016,10,14,Fri,66,60,60.2,60,78
2016,10,15,Sat,60,60,59.9,62,46
2016,10,16,Sun,60,62,59.5,60,40
2016,10,17,Mon,62,60,59.1,60,62
2016,10,18,Tues,60,60,58.8,61,53
2016,10,19,Wed,60,61,58.4,58,41
2016,10,20,Thurs,61,58,58.1,62,43
2016,10,21,Fri,58,62,57.8,59,44
2016,10,22,Sat,62,59,57.4,62,44
2016,10,23,Sun,59,62,57.1,62,67
2016,10,24,Mon,62,62,56.8,61,70
2016,10,25,Tues,62,61,56.5,65,70
2016,10,26,Wed,61,65,56.2,58,41
2016,10,27,Thurs,65,58,55.9,60,39
2016,10,28,Fri,58,60,55.6,65,52
2016,10,29,Sat,60,65,55.3,68,65
2016,10,31,Mon,65,68,54.8,59,62
2016,11,1,Tues,68,59,54.5,57,61
2016,11,2,Wed,59,57,54.2,57,70
2016,11,3,Thurs,57,57,53.9,65,35
2016,11,4,Fri,57,65,53.7,65,38
2016,11,5,Sat,65,65,53.4,58,41
2016,11,6,Sun,65,58,53.2,61,71
2016,11,7,Mon,58,61,52.9,63,35
2016,11,8,Tues,61,63,52.7,71,49
2016,11,9,Wed,63,71,52.4,65,42
2016,11,10,Thurs,71,65,52.2,64,38
2016,11,11,Fri,65,64,51.9,63,55
2016,11,12,Sat,64,63,51.7,59,63
2016,11,13,Sun,63,59,51.4,55,64
2016,11,14,Mon,59,55,51.2,57,42
2016,11,15,Tues,55,57,51,55,46
2016,11,16,Wed,57,55,50.7,50,34
2016,11,17,Thurs,55,50,50.5,52,57
2016,11,18,Fri,50,52,50.3,55,35
2016,11,19,Sat,52,55,50,57,56
2016,11,20,Sun,55,57,49.8,55,30
2016,11,21,Mon,57,55,49.5,54,67
2016,11,22,Tues,55,54,49.3,54,58
2016,11,23,Wed,54,54,49.1,49,38
2016,11,24,Thurs,54,49,48.9,52,29
2016,11,25,Fri,49,52,48.6,52,41
2016,11,26,Sat,52,52,48.4,53,58
2016,11,27,Sun,52,53,48.2,48,53
2016,11,28,Mon,53,48,48,52,44
2016,11,29,Tues,48,52,47.8,52,50
2016,11,30,Wed,52,52,47.6,52,44
2016,12,1,Thurs,52,52,47.4,46,39
2016,12,2,Fri,52,46,47.2,50,41
2016,12,3,Sat,46,50,47,49,58
2016,12,4,Sun,50,49,46.8,46,53
2016,12,5,Mon,49,46,46.6,40,65
2016,12,6,Tues,46,40,46.4,42,56
2016,12,7,Wed,40,42,46.3,40,62
2016,12,8,Thurs,42,40,46.1,41,36
2016,12,9,Fri,40,41,46,36,54
2016,12,10,Sat,41,36,45.9,44,65
2016,12,11,Sun,36,44,45.7,44,35
2016,12,12,Mon,44,44,45.6,43,42
2016,12,13,Tues,44,43,45.5,40,46
2016,12,14,Wed,43,40,45.4,39,49
2016,12,15,Thurs,40,39,45.3,39,46
2016,12,16,Fri,39,39,45.3,35,39
2016,12,17,Sat,39,35,45.2,35,38
2016,12,18,Sun,35,35,45.2,39,36
2016,12,19,Mon,35,39,45.1,46,51
2016,12,20,Tues,39,46,45.1,51,62
2016,12,21,Wed,46,51,45.1,49,39
2016,12,22,Thurs,51,49,45.1,45,38
2016,12,23,Fri,49,45,45.1,40,35
2016,12,24,Sat,45,40,45.1,41,39
2016,12,25,Sun,40,41,45.1,42,31
2016,12,26,Mon,41,42,45.2,42,58
2016,12,27,Tues,42,42,45.2,47,47
2016,12,28,Wed,42,47,45.3,48,58
2016,12,29,Thurs,47,48,45.3,48,65
2016,12,30,Fri,48,48,45.4,57,42
2016,12,31,Sat,48,57,45.5,40,57

数据集处理

读取数据

# -*-coding:utf-8-*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import torch
import torch.optim as optim
import warnings
warnings.filterwarnings("ignore")
#   year  month  day  week  temp_2  temp_1  average  actual(y)  friend
features=pd.read_csv("temps.csv")# print(features.head())
#数据维度 (348, 9)
print("数据维度",features.shape)
print(features.head(5))

数据维度 (348, 9)
   year  month  day  week  temp_2  temp_1  average  actual  friend
0  2016      1    1   Fri      45      45     45.6      45      29
1  2016      1    2   Sat      44      45     45.7      44      61
2  2016      1    3   Sun      45      44     45.8      41      56
3  2016      1    4   Mon      44      41     45.9      40      53
4  2016      1    5  Tues      41      40     46.0      44      41

 把年月日转换为datetime格式

#处理事件数据
import datetime
#分别得到年、月、日
years=features["year"]
months=features["month"]
days=features["day"]#datetime格式
"""
['2016-1-1', '2016-1-2', '2016-1-3', '2016-1-4', '2016-1-5']
"""
dates=[str(int(year))+"-"+str(int(month))+"-"+str(int(day)) for year,month,day in zip(years,months,days)]
print(dates[:5])"""
[datetime.datetime(2016, 1, 1, 0, 0), 
datetime.datetime(2016, 1, 2, 0, 0), 
datetime.datetime(2016, 1, 3, 0, 0), 
datetime.datetime(2016, 1, 4, 0, 0), 
datetime.datetime(2016, 1, 5, 0, 0)]
"""
dates=[datetime.datetime.strptime(date, "%Y-%m-%d") for date in dates]
print(dates[:5])

['2016-1-1', '2016-1-2', '2016-1-3', '2016-1-4', '2016-1-5']
[datetime.datetime(2016, 1, 1, 0, 0),

datetime.datetime(2016, 1, 2, 0, 0),

datetime.datetime(2016, 1, 3, 0, 0),

datetime.datetime(2016, 1, 4, 0, 0),

datetime.datetime(2016, 1, 5, 0, 0)]

画图显示数据

plt.subplots(nrows=2, ncols=2, figsize = (20,20)) 2行,2列,图像大小20*20
fig.autofmt_xdate(rotation = 45) X轴的字体旋转角度,也就是dates所对应的年月日信息显示旋转角度,这里是45°,如:2016-01等,倾斜显示

ax1.plot(dates, dataset['actual']) X轴为dates(年月日),Y轴为actual(实际的真实温度值)
ax1.set_xlabel(''); ax1.set_ylabel('Temperature'); ax1.set_title('Actual Max Temp') X轴标签为空,Y轴标签为Temperature,整体标题为Actual Max Temp
其他的同理

plt.tight_layout(pad=1, h_pad=1, w_pad=1) #子图间隔有多大
pad:图形边和子图的边之间进行填充
h_pad,w_pad:相邻子图的边之间的填充(高度/宽度)

def drawData(dates,features):#准备画图#指定默认风格plt.style.use("fivethirtyeight")#设置布局fig, ((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2,ncols=2,figsize=(10,10))#X轴标签倾斜显示fig.autofmt_xdate(rotation=45)#标签值ax1.plot(dates,features["actual"])ax1.set_xlabel(" "); ax1.set_ylabel("Actual Temperature"); ax1.set_title("Max Temp")#昨天ax2.plot(dates,features["temp_1"])ax2.set_xlabel(" "); ax2.set_ylabel("temp_1 Temperature"); ax2.set_title("Previous Max Temp")#前天ax3.plot(dates,features["temp_2"])ax3.set_xlabel("Date"); ax3.set_ylabel("temp_2 Temperatiure"); ax3.set_title("Two Days Prior Previous Max Temp")ax4.plot(dates,features["friend"])ax4.set_xlabel("Date"); ax4.set_ylabel("friend Temperatiure"); ax4.set_title("Friend Estimate")#子图间隔多大plt.tight_layout(pad=2)plt.show()drawData(dates,features)


 把星期几转为独热编码

#读热编码
#year  month  day  temp_2  ... week_Fri week_Mon week_Sat week_Sun  week_Thurs  week_Tues  week_Wed
features=pd.get_dummies(features)
print( features.head(8) )

   year  month  day  temp_2  ...  week_Sun  week_Thurs  week_Tues  week_Wed
0  2016      1    1      45  ...         0           0          0         0
1  2016      1    2      44  ...         0           0          0         0
2  2016      1    3      45  ...         1           0          0         0
3  2016      1    4      44  ...         0           0          0         0
4  2016      1    5      41  ...         0           0          1         0
5  2016      1    6      40  ...         0           0          0         1
6  2016      1    7      44  ...         0           1          0         0
7  2016      1    8      51  ...         0           0          0         0

 提取actual的实际值

#标签,把标签值actual提取出来
#labels=[45 44 41 40 44 51 45 48 50 ....]
labels=np.array(features["actual"])#在特征中去掉标签, 去掉actual,因为actual是y
features=features.drop("actual",axis=1)#名字单独保存一下,以备后患
feature_list=list(features.columns)
print(feature_list)

['year', 'month', 'day', 'temp_2', 'temp_1', 'average', 'friend', 'week_Fri', 'week_Mon', 'week_Sat', 'week_Sun', 'week_Thurs', 'week_Tues', 'week_Wed']

标准化数据

(1)把features变成了数值,用科学计数法,(348,14)

features=np.array(features)
print(features)

[[2.016e+03 1.000e+00 1.000e+00 ... 0.000e+00 0.000e+00 0.000e+00]
 [2.016e+03 1.000e+00 2.000e+00 ... 0.000e+00 0.000e+00 0.000e+00]
 [2.016e+03 1.000e+00 3.000e+00 ... 0.000e+00 0.000e+00 0.000e+00]
 ...
 [2.016e+03 1.200e+01 2.900e+01 ... 1.000e+00 0.000e+00 0.000e+00]
 [2.016e+03 1.200e+01 3.000e+01 ... 0.000e+00 0.000e+00 0.000e+00]
 [2.016e+03 1.200e+01 3.100e+01 ... 0.000e+00 0.000e+00 0.000e+00]]

(2)标准化 (x-平均值)/标准差

#标准化 (x-平均值)/标准差
from sklearn import  preprocessing
input_features=preprocessing.StandardScaler().fit_transform(features)print( input_features )

[[ 0.         -1.5678393  -1.65682171 ... -0.40482045 -0.41913682
  -0.40482045]
 [ 0.         -1.5678393  -1.54267126 ... -0.40482045 -0.41913682
  -0.40482045]
 [ 0.         -1.5678393  -1.4285208  ... -0.40482045 -0.41913682
  -0.40482045]
 ...
 [ 0.          1.5810006   1.53939107 ...  2.47023092 -0.41913682
  -0.40482045]
 [ 0.          1.5810006   1.65354153 ... -0.40482045 -0.41913682
  -0.40482045]
 [ 0.          1.5810006   1.76769198 ... -0.40482045 -0.41913682
  -0.40482045]]

第一种方式构建网络模型

(1)构建x和y矩阵。

构建tensor类型的x和y变量

#x:torch.Size([348, 14])
x=torch.tensor(input_features,dtype=float)
y=torch.tensor(labels,dtype=float)

(2)权重参数初始化

#权重参数初始化
weights=torch.randn((14,128),dtype=float,requires_grad=True)
biases=torch.randn(128,dtype=float ,requires_grad=True)
weights2=torch.randn((128,1),dtype=float,requires_grad=True)
biases2=torch.randn(1,dtype=float ,requires_grad=True)
#用于梯度下降的学习率
learning_rate=0.001
#记录损失值
losses=[]

 (3)搭建网络模型

#搭建网络模型
for i in range(1000):#计算隐层hidden=x.mm(weights)+biases#激活函数hidden=torch.relu(hidden)#预测结果predictions=hidden.mm(weights2)+biases2#计算损失#cost/w 1/2nloss=torch.mean((predictions - y)**2)losses.append(loss.data.numpy())#打印损失值if i%100==0:print("loss:",loss)#反向传播计算loss.backward()#更新参数weights.data.add_(- learning_rate*weights.grad.data)biases.data.add_(- learning_rate*biases.grad.data)weights2.data.add_(- learning_rate*weights2.grad.data)biases2.data.add_(- learning_rate*biases2.grad.data)#每次迭代都得清空,梯度不清零会累加的weights.grad.data.zero_()biases.grad.data.zero_()weights2.grad.data.zero_()biases2.grad.data.zero_()print(predictions.shape)

loss: tensor(1214.2573, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(155.9543, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(147.3351, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(144.7511, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(143.4206, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(142.5542, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(141.9567, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(141.5120, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(141.1755, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(140.9053, dtype=torch.float64, grad_fn=<MeanBackward0>)
torch.Size([348, 1])

(4) 把actual的实际值和prediction画在一张图

loss是140.9,所以拟合效果非常差

 第二种方式构建神经网络

 (1)数据预处理

# -*-coding:utf-8-*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import torch
import torch.optim as optim
import warnings
warnings.filterwarnings("ignore")
#   year  month  day  week  temp_2  temp_1  average  actual(y)  friend
features=pd.read_csv("temps.csv")# print(features.head())
#数据维度 (348, 9)
print("数据维度",features.shape)#处理事件数据
import datetime
#分别得到年、月、日
years=features["year"]
months=features["month"]
days=features["day"]#datetime格式
dates=[str(int(year))+"-"+str(int(month))+"-"+str(int(day)) for year,month,day in zip(years,months,days)]
dates=[datetime.datetime.strptime(date, "%Y-%m-%d") for date in dates]print(dates[:5])#hotcode
#year  month  day  temp_2  ... week_Fri week_Mon week_Sat week_Sun  week_Thurs  week_Tues  week_Wed
features=pd.get_dummies(features)
# print( features.head(5) )#标签
labels=np.array(features["actual"])#在特征中去掉标签, 去掉actual,因为actual是y
features=features.drop("actual",axis=1)#名字单独保存一下,以备后患
feature_list=list(features.columns)#变成了数值,用科学计数法,(348,14)
features=np.array(features)
# print(features)#标准化 (x-平均值)/标准差
from sklearn import  preprocessing
input_features=preprocessing.StandardScaler().fit_transform(features)# print( input_features )
# print( input_features[0] )#构建网络模型
#x:torch.Size([348, 14])
x=torch.tensor(input_features,dtype=float)
y=torch.tensor(labels,dtype=float)

(2)构建模型,计算预测值

#更简单的构建网络模型
#input_size:特征数:14
input_size=input_features.shape[1]#隐藏层有128个神经元
hidden_size=128
#神经网络的最终输出1个数,即predictions_actual
output_size=1
#每次读取16行数据
batch_size=16#Sequential:按顺序执行
my_nn=torch.nn.Sequential(#第一层神经元(14,128)torch.nn.Linear(input_size,hidden_size),torch.nn.Sigmoid(),#第二层神经元(128,1)torch.nn.Linear(hidden_size,output_size)
)
#损失函数
cost=torch.nn.MSELoss(reduction="mean")#梯度下降,更新权重参数
#Adam:很强的工具,
optimizer=torch.optim.Adam(my_nn.parameters(),lr=0.001)#训练网络
losses=[]
for i in range (2000):batch_loss=[]#MINI-Batch方法进行训练,0~348,每次训练选batch_size(16)个样本for start in range (0,len(input_features),batch_size):end=start+batch_size if start+batch_size <len(input_features) else len(input_features)xx=torch.tensor(input_features[start:end],dtype=torch.float,requires_grad=True)yy=torch.tensor(labels[start:end],dtype=torch.float,requires_grad=True)prediction=my_nn(xx)loss=cost(prediction,yy)#梯度清零optimizer.zero_grad()#反向传播loss.backward(retain_graph=True)#梯度下降:stepoptimizer.step()batch_loss.append(loss.data.numpy())#计算损失if i%100==0:losses.append(np.mean(batch_loss))print(i,np.mean(batch_loss))#预测训练结果
x=torch.tensor(input_features,dtype=torch.float)
predict=my_nn(x).data.numpy()

0 3938.2195
100 37.869488
200 35.65198
300 35.276585
400 35.106327
500 34.972412
600 34.85649
700 34.742622
800 34.62497
900 34.503555

(3) 画图

#转换日期格式
#datetime格式
dates=[str(int(year))+"-"+str(int(month))+"-"+str(int(day)) for year,month,day in zip(years,months,days)]
dates=[datetime.datetime.strptime(date, "%Y-%m-%d") for date in dates]#true创建
true_data=pd.DataFrame(data={"date":dates,"actual":labels})#同理,再创建一个来存日期和其对应的模型预测值
months=features[:,feature_list.index("month")]
days=features[:,feature_list.index("day")]
years=features[:,feature_list.index("year")]test_dates=[str(int(year))+"-"+str(int(month))+"-"+str(int(day)) for year,month,day in zip(years,months,days)]
#          [datetime.datetime.strptime(date, "%Y-%m-%d") for date in dates]
test_dates=[datetime.datetime.strptime(date, "%Y-%m-%d") for date in test_dates]predictions_data=pd.DataFrame(data={"date":test_dates,"prediction":predict.reshape(-1)})#真实值
plt.plot(true_data["date"],true_data["actual"],"b-",label="actual")#预测值
plt.plot(predictions_data["date"],predictions_data["prediction"],"ro",label="prediction")
plt.xticks(rotation = 60);
# plt.xticks(rotation="60")
plt.legend()
#图名
plt.xlabel("Date");plt.ylabel("Maximum Temperature(F)");plt.title("Actual and Predicted Values");
plt.show()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF基础知识

WPF布局基础原则 1.一个窗口中只能包含一个元素 2. 不应该显示设置元素尺寸 3. 不应使用坐标设置元素的位置 4.可以嵌套布局容器WPF布局容器 StackPanel:水平或垂直排列元素&#xff0c;Orientation属性分别为&#xff1a;Horizontal/VerticalWrapPanel:水平或垂直排列元素、…

安科瑞能源物联网以能源供应、能源管理、设备管理、能耗分析的能源流向为主线-安科瑞黄安南

摘要&#xff1a;随着科学技术的发展&#xff0c;我国的物联网技术有了很大进展。为了提升电力抄表服务的稳定性&#xff0c;保障电力抄表数据的可靠性&#xff0c;本文提出并实现了基于物联网的智能电力抄表服务平台&#xff0c;结合云计算、大数据等技术&#xff0c;提供电力…

Codeforces Round 888 (Div. 3)(视频讲解全部题目)

[TOC](Codeforces Round 888 (Div. 3)&#xff08;视频讲解全部题目&#xff09;) Codeforces Round 888 (Div. 3)&#xff08;A–G&#xff09;全部题目详解 A Escalator Conversations #include<bits/stdc.h> #define endl \n #define INF 0x3f3f3f3f using namesp…

mars3d绘制区域范围(面+边框)

1、图例&#xff08;绿色面区域白色边框&#xff09; 2、代码 1&#xff09;、绘制区域ts文件 import { mapLayerCollection } from /hooks/cesium-map-init /*** 安全防護目標* param map*/ export const addSafetyProtection async (map) > {const coverDatas await m…

20230729 git github gitee

1.gitee与gitHub概念&#xff1f; Gitee&#xff08;码云&#xff09;是开源中国社区推出的代码托管协作开发平台&#xff0c;支持Git和SVN&#xff0c;提供免费的私有仓库托管。Gitee专为开发者提供稳定、高效、安全的云端软件开发协作平台&#xff0c;无论是个人、团队、或是…

6个ChatGPT4的最佳用途

文章目录 ChatGPT 4’s Current Limitations ChatGPT 4 的当前限制1. Crafting Complex Prompts 制作复杂的提示2. Logic Problems 逻辑问题3. Verifying GPT 3.5 Text 验证 GPT 3.5 文本4. Complex Coding 复杂编码5.Nuanced Text Transformation 细微的文本转换6. Complex Kn…

web前端如何判断自己当前的职业等级

初级前端开发工程师 熟练使用HTML标签&#xff0c;对HTML标签特性有一定理解。对HTML语义话有一定了解&#xff1b;熟练使用CSS属性及选择器&#xff0c;能使用一些CSShack。对模块化和栅格化布局有一定的了解。能独立使用JS完成一些简单的需求&#xff0c;至少能使用一种前端框…

P5727 【深基5.例3】冰雹猜想

【深基5.例3】冰雹猜想 题目描述 给出一个正整数 n n n&#xff0c;然后对这个数字一直进行下面的操作&#xff1a;如果这个数字是奇数&#xff0c;那么将其乘 3 3 3 再加 1 1 1&#xff0c;否则除以 2 2 2。经过若干次循环后&#xff0c;最终都会回到 1 1 1。经过验证很…

Windows下安装HBase

Windows下安装HBase 一、HBase简介二、HBase下载安装包三、环境准备3.1、 JDK的安装3.2、 Hadoop的安装 四、HBase安装4.1、压缩包解压为文件夹4.2、配置环境变量4.3、%HBASE_HOME%目录下新建临时文件夹4.4、修改配置文件 hbase-env.cmd4.4.1、配置JAVA环境4.4.2、set HBASE_MA…

使用Hutool工具类中的BeanUtil.fillBeanWithMap方法报错`DateException`

使用Hutool工具类中的BeanUtil.fillBeanWithMap方法报错DateException 问题背景 在实现登录功能时&#xff0c;我先将用户信息存入Redis中&#xff0c;然后再获取用户信息的时候&#xff0c;又取出来。我存入Redis的用户信息是Hash格式的&#xff0c;所以取出来的时候&#xff…

Ansible的脚本 --- playbook 剧本

文章目录 一、playbook剧本的组成创建剧本运行playbook二、定义、引用变量三、指定远程主机sudo切换用户四、when条件判断五、迭代Templates 模块tags 模块 一、playbook剧本的组成 playbooks 本身由以下各部分组成 &#xff08;1&#xff09;Tasks&#xff1a;任务&#xff0…

kubernetes 证书更新

参考&#xff1a; https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/https://kubernetes.io/zh-cn/docs/tasks/tls/certificate-rotation/ 查看证书 查看 kubelet是否支持证书自动轮换&#xff0c;默认轮换的证书位于目录 /var/lib/kubele…

vscode 打开文件时如何在资源管理器中展开文件所在的整个目录树(包含node_modules)

如题。去 首选项 --> 设置 中 搜索 “Auto Reveal”&#xff0c;然后选true&#xff0c;注意把下面的Auto Reveal Exclude排除项中的node_modules去掉&#xff0c;这样才能定位到node_modules中的文件。 **/node_modules

正则,JS:this,同步异步,原型链笔记整理

一 正则表达式 正则表达式&#xff08;regular expression&#xff09;是一种表达文本模式&#xff08;即字符串结构&#xff09;的方法&#xff0c;有点像字符串的模板&#xff0c;常常用来按照“给定模式”匹配文本 正则表达式可以用于以下常见操作&#xff1a; 匹配&…

Leetcode刷题---C语言实现初阶数据结构---单链表

1 删除链表中等于给定值 val 的所有节点 删除链表中等于给定值 val 的所有节点 给你一个链表的头节点head和一个整数val&#xff0c;请你删除链表中所有满足Node.valval的节点&#xff0c;并返回新的头节点 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[…

基于 ThinkPHP 5.1(稳定版本) 开发wms 进销存系统源码

基于ThinkPHP 5.1&#xff08;LTS版本&#xff09;开发的WMS进销存系统源码 管理员账号密码&#xff1a;admin 一、项目简介 这个系统是一个基于ThinkPHP框架的WMS进销存系统。 二、实现功能 控制台 – 权限管理&#xff08;用户管理、角色管理、节点管理&#xff09; – 订…

Docker 入门终极指南[详细]

前言 富 Web 时代&#xff0c;应用变得越来越强大&#xff0c;与此同时也越来越复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可&#xff0c;而容器化则成为中间的必要桥梁。 本节我们就来探索一下 Docker 的神秘世界&#xff0c;从零到一掌握 Docker 的基本原理与实…

【Golang】Golang进阶系列教程--Go 语言 new 和 make 关键字的区别

文章目录 前言new源码使用 make源码使用 总结 前言 本篇文章来介绍一道非常常见的面试题&#xff0c;到底有多常见呢&#xff1f;可能很多面试的开场白就是由此开始的。那就是 new 和 make 这两个内置函数的区别。 在 Go 语言中&#xff0c;有两个比较雷同的内置函数&#xf…

忽略nan值,沿指定轴计算标准(偏)差numpy.nanstd()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 沿指定轴方向 计算标准(偏)差 numpy.nanstd() [太阳]选择题 import numpy as np a np.array([[1,2],[np.nan,3]]) print("【显示】a ") print(a) print("【执行】np.std(a)&qu…

微信小程序:生成二维码带参数并获取值

通过后台接口可以获取小程序任意页面的小程序码&#xff0c;需要注意的是接口只能生成已发布的小程序的二维码 小程序接口文档 获取 scene 值 1&#xff09;scene 字段的值会作为 query 参数传递给小程序/小游戏。用户扫描该码进入小程序/小游戏后&#xff0c;开发者可以获取…