Browse Source

clf.fit(Xtrain, Ytrain, w)

yufeng0528 4 years ago
parent
commit
673bb7e5be
1 changed files with 21 additions and 18 deletions
  1. 21 18
      integr/my_ada_boost.py

+ 21 - 18
integr/my_ada_boost.py

@@ -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]: