createTree(获取回归树) Description:递归函数:如果构建的是回归树,该模型是一个常数,如果是模型树,其模型师一个线性方程。 Args: dataSet 加载的原始数据集 leafType 建立叶子点的函数 errType 误差计算函数 ops=(1, 4) [容许误差下降值,切分的最少样本数] Returns: retTree 决策树最后的结果
(dataSet, leafType=regLeaf, errType=regErr, ops=(1, 4))
| 140 | # assume dataSet is NumPy Mat so we can array filtering |
| 141 | # 假设 dataSet 是 NumPy Mat 类型的,那么我们可以进行 array 过滤 |
| 142 | def createTree(dataSet, leafType=regLeaf, errType=regErr, ops=(1, 4)): |
| 143 | """createTree(获取回归树) |
| 144 | Description:递归函数:如果构建的是回归树,该模型是一个常数,如果是模型树,其模型师一个线性方程。 |
| 145 | Args: |
| 146 | dataSet 加载的原始数据集 |
| 147 | leafType 建立叶子点的函数 |
| 148 | errType 误差计算函数 |
| 149 | ops=(1, 4) [容许误差下降值,切分的最少样本数] |
| 150 | Returns: |
| 151 | retTree 决策树最后的结果 |
| 152 | """ |
| 153 | # 选择最好的切分方式: feature索引值,最优切分值 |
| 154 | # choose the best split |
| 155 | feat, val = chooseBestSplit(dataSet, leafType, errType, ops) |
| 156 | # if the splitting hit a stop condition return val |
| 157 | # 如果 splitting 达到一个停止条件,那么返回 val |
| 158 | if feat is None: |
| 159 | return val |
| 160 | retTree = {} |
| 161 | retTree['spInd'] = feat |
| 162 | retTree['spVal'] = val |
| 163 | # 大于在右边,小于在左边,分为2个数据集 |
| 164 | lSet, rSet = binSplitDataSet(dataSet, feat, val) |
| 165 | # 递归的进行调用,在左右子树中继续递归生成树 |
| 166 | retTree['left'] = createTree(lSet, leafType, errType, ops) |
| 167 | retTree['right'] = createTree(rSet, leafType, errType, ops) |
| 168 | return retTree |
| 169 | |
| 170 | |
| 171 | # 判断节点是否是一个字典 |
no test coverage detected