- Notifications
You must be signed in to change notification settings - Fork 251
/
Copy pathSVM_Regression_Data.py
88 lines (55 loc) · 2.52 KB
/
SVM_Regression_Data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# -*- coding:utf-8 -*-
# &Author AnFany
importpandasaspd
importnumpyasnp
data=pd.read_csv(r'C:\Users\GWT9\Desktop\PRSA_data_2010.1.1-2014.12.31.csv')
# 数据处理
# 目标字段是pm2.5,因此删去此列为NaN的行
data_nan=data[np.isfinite(data['pm2.5'])]
# 第一个字段是序号字段,不需要
data_one=data_nan[data_nan.columns[1:]]
# 字段'cbwd',独热编码
one_data=pd.get_dummies(data_one['cbwd'], prefix='cbwd')
# 删除原来的字段'cbwd'
data_cw=data_one.drop(['cbwd'], axis=1)
# 添加上独热产生的数据
data_hh=pd.concat([data_cw, one_data], axis=1)
# 因为数据量的问题, 只是随机选取部分数据进行训练
defserand(dafra, precent=0.01):
df2=dafra.sample(frac=precent)
returndf2
data_hh=serand(data_hh)
# 获得目标数据的最大与最小值,
ymax=np.max(data_hh['pm2.5'].values, keepdims=True)
ymin=np.min(data_hh['pm2.5'].values, keepdims=True)
# 所有特征数据标准化, 目标数据0-1化
defnorm(dat):
da=pd.DataFrame()
forhhindat.columns:
ifhh!='pm2.5':
da[hh] = (dat[hh] -np.mean(dat[hh])) /np.std(dat[hh]) # 标准化
# da[hh] = (dat[hh] - np.min(dat[hh])) / (np.max(dat[hh]) - np.min(dat[hh])) # 0-1化
else:
da[hh] = (dat[hh] -np.min(dat[hh])) / (np.max(dat[hh]) -np.min(dat[hh])) # 0-1化
returnda
datee=norm(data_hh)
# 目标数据和特征数据分离
Ydata=np.array(datee['pm2.5'].values).reshape(-1, 1) # 目标数据
Xdata=datee.drop(['pm2.5'], axis=1).values# 特征数据
# 训练数据分为测试数据和预测数据
defdivided(xdata, ydata, percent=0.3):
sign_list=list(range(len(xdata)))
# 用于测试的序号
select_sign=np.random.choice(sign_list, int(len(xdata) *percent), replace=False)
# 用于训练的序号
no_select_sign= [isignforisigninsign_listifisignnotinselect_sign]
# 测试数据
x_predict_data=xdata[select_sign]
y_predict_data=np.array(ydata[select_sign]).reshape(-1, len(ydata[0])) # 转化数据结构
# 训练数据
x_train_data=xdata[no_select_sign]
y_train_data=np.array(ydata[no_select_sign]).reshape(-1, len(ydata[0])) # 转化数据结构
returnx_train_data, y_train_data, x_predict_data, y_predict_data# 训练的x,y; 测试的x,y;
# 可用于算法的数据
model_data=list(divided(Xdata, Ydata))
model_data.append([ymax, ymin])