- Notifications
You must be signed in to change notification settings - Fork 251
/
Copy pathpm25_AdaBoost_Data.py
96 lines (74 loc) · 2.87 KB
/
pm25_AdaBoost_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
89
90
91
92
93
94
95
96
# -*- 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是目标数据,如有缺失值直接删除这一条记录
# 删除目标值为空值的行的函数, 其他列为缺失值则自动填充的函数,并将目标变量放置在数据集最后一列
defDeleteTargetNan(exdata, targetstr):
# 首先判断目标字段是否有缺失值
ifexdata[targetstr].isnull().any():
# 首先确定缺失值的行数
loc=exdata[targetstr][data[targetstr].isnull().values==True].index.tolist()
# 然后删除这些行
exdata=exdata.drop(loc)
# 凡是有缺失值的再一起利用此行的均值填充
exdata=exdata.fillna(exdata.mean())
# 将目标字段至放在最后的一列
targetnum=exdata[targetstr].copy()
delexdata[targetstr]
exdata[targetstr] =targetnum
returnexdata
# 删除原始数据中不需要的字段名
defShanchu(exdata, aiduan=['No']):
foraiinaiduan:
ifaiinexdata.keys():
delexdata[ai]
returnexdata
# 将数据中的属性值为字符串的进行数字编码,因为独热编码对决策树而言不那么重要
defDigit(eadata):
# 判断是字符串
forjjineadata:
try:
eadata[jj].values[0] +1
exceptTypeError:
# 需要转为数字编码
numlist=list(set(list(eadata[jj].values)))
zhuan= [numlist.index(jj) forjjineadata[jj].values]
eadata[jj] =zhuan
returneadata
# 数据处理后最终的数据集
first=DeleteTargetNan(data, 'pm2.5')
two=Shanchu(first)
third=Digit(two)
# 将数据集按照8:2的比例分为训练、预测数据集。其中训练数据集再分为K份,进行K折交叉验证
deffenge(exdata, k=10, per=[0.8, 0.2]):
# 总长度
lent=len(exdata)
alist=np.arange(lent)
np.random.shuffle(alist)
# 训练
xunlian_sign=int(lent*per[0])
xunlian=np.random.choice(alist, xunlian_sign, replace=False)
# 预测
yuce=np.array([iforiinalistifinotinxunlian])
# 再将训练数据集分为K折
# 存储字典
save_dict= {}
forjjinrange(k):
save_dict[jj] = {}
length=len(xunlian)
# 随机选
yuzhi=int(length/k)
yan=np.random.choice(xunlian, yuzhi, replace=False)
tt=np.array([iforiinxunlianifinotinyan])
save_dict[jj]['train'] =exdata[tt]
save_dict[jj]['test'] =exdata[yan]
returnsave_dict, exdata[yuce]
deeer=fenge(third.values)
# K折交叉的训练数据
dt_data=deeer[0]
# 预测数据
predict_data=deeer[1]