MCPcopy Index your code
hub / github.com/Dod-o/Statistical-Learning-Method_Code / createSigleBoostingTree

Function createSigleBoostingTree

AdaBoost/AdaBoost.py:95–135  ·  view source on GitHub ↗

创建单层提升树 :param trainDataArr:训练数据集数组 :param trainLabelArr: 训练标签集数组 :param D: 算法8.1中的D :return: 创建的单层提升树

(trainDataArr, trainLabelArr, D)

Source from the content-addressed store, hash-verified

93 return np.array(predict), e
94
95def createSigleBoostingTree(trainDataArr, trainLabelArr, D):
96 '''
97 创建单层提升树
98 :param trainDataArr:训练数据集数组
99 :param trainLabelArr: 训练标签集数组
100 :param D: 算法8.1中的D
101 :return: 创建的单层提升树
102 '''
103
104 #获得样本数目及特征数量
105 m, n = np.shape(trainDataArr)
106 #单层树的字典,用于存放当前层提升树的参数
107 #也可以认为该字典代表了一层提升树
108 sigleBoostTree = {}
109 #初始化分类误差率,分类误差率在算法8.1步骤(2)(b)有提到
110 #误差率最高也只能100%,因此初始化为1
111 sigleBoostTree['e'] = 1
112
113 #对每一个特征进行遍历,寻找用于划分的最合适的特征
114 for i in range(n):
115 #因为特征已经经过二值化,只能为0和1,因此分切分时分为-0.5, 0.5, 1.5三挡进行切割
116 for div in [-0.5, 0.5, 1.5]:
117 #在单个特征内对正反例进行划分时,有两种情况:
118 #可能是小于某值的为1,大于某值得为-1,也可能小于某值得是-1,反之为1
119 #因此在寻找最佳提升树的同时对于两种情况也需要遍历运行
120 #LisOne:Low is one:小于某值得是1
121 #HisOne:High is one:大于某值得是1
122 for rule in ['LisOne', 'HisOne']:
123 #按照第i个特征,以值div进行切割,进行当前设置得到的预测和分类错误率
124 Gx, e = calc_e_Gx(trainDataArr, trainLabelArr, i, div, rule, D)
125 #如果分类错误率e小于当前最小的e,那么将它作为最小的分类错误率保存
126 if e < sigleBoostTree['e']:
127 sigleBoostTree['e'] = e
128 #同时也需要存储最优划分点、划分规则、预测结果、特征索引
129 #以便进行D更新和后续预测使用
130 sigleBoostTree['div'] = div
131 sigleBoostTree['rule'] = rule
132 sigleBoostTree['Gx'] = Gx
133 sigleBoostTree['feature'] = i
134 #返回单层的提升树
135 return sigleBoostTree
136
137def createBosstingTree(trainDataList, trainLabelList, treeNum = 50):
138 ''&#x27;

Callers 1

createBosstingTreeFunction · 0.85

Calls 1

calc_e_GxFunction · 0.85

Tested by

no test coverage detected