|
@@ -11,7 +11,7 @@ Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=
|
11
|
11
|
# 设置数据初始权重
|
12
|
12
|
w = np.array([1/len(Ytrain) for i in range(len(Ytrain))])
|
13
|
13
|
# 决策树权重
|
14
|
|
-alpha = []
|
|
14
|
+alphas = []
|
15
|
15
|
# 决策树数组
|
16
|
16
|
trees = []
|
17
|
17
|
pn = 1/len(Ytrain)
|
|
@@ -24,15 +24,18 @@ for i in range(len(Ytest)):
|
24
|
24
|
Ytest[i] = -1
|
25
|
25
|
print(Ytest)
|
26
|
26
|
|
27
|
|
-for i in range(15):
|
|
27
|
+for i in range(20):
|
28
|
28
|
# 训练决策树
|
29
|
|
- # clf = DecisionTreeClassifier(criterion="entropy", max_features=1, max_depth=1,
|
30
|
|
- # class_weight={0:w0, 1:1-w0}) # 实例化,criterion不写的话默认是基尼系数
|
31
|
|
- nodes = my_tree.fit(Xtrain, Ytrain, None, 0, w)
|
|
29
|
+ clf = DecisionTreeClassifier(criterion="entropy", max_features=1, max_depth=1,
|
|
30
|
+ ) # 实例化,criterion不写的话默认是基尼系数
|
32
|
31
|
|
33
|
|
- my_tree.print_width([nodes], 1)
|
|
32
|
+ clf.fit(Xtrain, Ytrain, w)
|
|
33
|
+ # nodes = my_tree.fit(Xtrain, Ytrain, None, 0, w)
|
|
34
|
+
|
|
35
|
+ # my_tree.print_width([nodes], 1)
|
34
|
36
|
# print("熵值", my_tree.calc_ent(Ytrain, w))
|
35
|
|
- Xpredit = my_tree.predict(Xtrain, Ytrain, nodes)
|
|
37
|
+ # Xpredit = my_tree.predict(Xtrain, Ytrain, nodes)
|
|
38
|
+ Xpredit = clf.predict(Xtrain)
|
36
|
39
|
error = 0
|
37
|
40
|
p_error = 0
|
38
|
41
|
for j in range(len(Ytrain)):
|
|
@@ -46,27 +49,27 @@ for i in range(15):
|
46
|
49
|
error = 0.001
|
47
|
50
|
|
48
|
51
|
print("第", i, "轮错误率", p_error, error)
|
49
|
|
- ab = 0.5*np.log2(1/error - 1)
|
|
52
|
+ alpha = 0.5*np.log2(1/error - 1)
|
50
|
53
|
|
51
|
54
|
# 更新权重
|
52
|
|
- for j in range(len(Ytrain)):
|
53
|
|
- w[j] = w[j]*np.exp(-ab*Ytrain[j]*Xpredit[j])
|
|
55
|
+ for j in range(Ytrain.shape[0]):
|
|
56
|
+ w[j] = w[j]*np.exp(-alpha*Ytrain[j]*Xpredit[j])
|
54
|
57
|
sum_w = sum(w)
|
55
|
58
|
w = w/sum_w
|
56
|
59
|
|
57
|
|
- alpha.append(ab)
|
58
|
|
- trees.append(nodes)
|
|
60
|
+ alphas.append(alpha)
|
|
61
|
+ trees.append(clf)
|
59
|
62
|
|
60
|
63
|
predicts = []
|
61
|
64
|
for tree in trees:
|
62
|
|
- predicts.append(my_tree.predict(Xtrain, None, tree))
|
|
65
|
+ predicts.append(tree.predict(Xtrain))
|
63
|
66
|
|
64
|
|
-print(alpha)
|
|
67
|
+print(alphas)
|
65
|
68
|
# 结果加权
|
66
|
69
|
result = np.zeros(len(Xtrain), float)
|
67
|
70
|
for p in predicts:
|
68
|
71
|
r = 0
|
69
|
|
- for w_alpha in alpha:
|
|
72
|
+ for w_alpha in alphas:
|
70
|
73
|
r += w_alpha * p
|
71
|
74
|
result = result + r
|
72
|
75
|
|
|
@@ -88,9 +91,9 @@ print(x)
|
88
|
91
|
# clf = clf.fit(Xtrain, Ytrain)
|
89
|
92
|
# print(clf.score(Xtest, Ytest))
|
90
|
93
|
|
91
|
|
-w = np.array([1/len(Xtrain) for i in range(len(Xtrain))])
|
92
|
|
-my_tree_0 = trees[0]
|
93
|
|
-Ypredit = my_tree.predict(Xtrain, None, my_tree_0)
|
|
94
|
+# w = np.array([1/len(Xtrain) for i in range(len(Xtrain))])
|
|
95
|
+# my_tree_0 = trees[0]
|
|
96
|
+Ypredit = trees[0].predict(Xtrain)
|
94
|
97
|
error = 0
|
95
|
98
|
for j in range(len(Xtrain)):
|
96
|
99
|
if Ypredit[j] != Ytrain[j]:
|