CART 回归树代码实现
2017-05-27 09:53
239 查看
from numpy import * def loadData(fileName): retMat=[] fr=open(fileName) for line in fr.readlines(): curline=line.strip().split('\t') curline=list(map(float,curline)) retMat.append(curline) return mat(retMat) #树节点信息 class treeNode(): def __init__(self,feat,value,leftChild=None,rightChild=None): self.feat=feat self.value=value self.lc=leftChild self.rc=rightChild #树节点,后面打算用先序遍历来打印树
#建立回归树,把框架写出来 def splitData(dataSet,feat,val): mat0=[] mat1=[] n=shape(data)[0] for j in range(n): if(data[j,feat]>val): mat0.append([data[j,0],data[j,1]]) else: mat1.append([data[j,0],data[j,1]]) return mat(mat0),mat(mat1) def createTree(dataSet): #计算最佳切分特征及切分点,用函数写出来 feat,val=chooseBestSplit(dataSet) if feat==None:return treeNode(None,val) node=treeNode(feat,val) leftMat,rightMat=splitData(dataSet,feat,val) node.lc=createTree(leftMat) node.rc=createTree(rightMat) return node def calcValue(dataSet): return mean(dataSet[:,-1]) def calcError(dataSet): m=shape(dataSet)[0] return var(dataSet[:,-1])*m #树的节点应该保存成为平均值
def chooseBestSplit(dataSet,op=(1,4)): m,n=shape(dataSet) tolS=op[0] tolN=op[1] #判断这个是不是已分为一个类 if len(set(dataSet[:,-1].T.tolist()[0]))==1: return None,calcValue(dataSet) S=calcError(dataSet) bestS=inf bestIndex=0 bestVal=0 for featIndex in range(n-1): for splitVal in dataSet[:,featIndex]: mat0,mat1=splitData(dataSet,featIndex,splitVal) if shape(mat0)[0]<tolN or shape(mat1)[0]<tolN: continue newS=calcError(mat0)+calcError(mat1) if newS<bestS: bestIndex=featIndex bestValue=splitVal bestS=newS if S-bestS<tolS: return None,calcValue(dataSet) mat0,mat1=splitData(dataSet,bestIndex,bestValue) # print(shape(mat0)[0],shape(mat1)[0]) if shape(mat0)[0]<tolN or shape(mat1)[0]<tolN: return None,calcValue(dataSet) return bestIndex,bestValue #core code
data=loadData('ex00.txt') node=createTree(data) #树的先序遍历 def tree(node): if node==None: return print(node.feat,":",node.value) tree(node.lc) tree(node.rc) return tree(node)
相关文章推荐
- CART之回归树python代码实现
- 利用Spark-mllab进行聚类,分类,回归分析的代码实现(python)
- 树回归:CART算法构建回归树和模型树(代码笔记)
- logistic回归,逻辑回归代码实现
- CART(分类回归树)原理和实现
- 连续值的CART(分类回归树)原理和实现
- 机器学习:逻辑回归与Python代码实现
- 逻辑回归的数学推导及java代码实现
- 线性回归从公理到算法推导再到代码实现
- 逻辑回归-非线性判定边界Python代码实现
- [深度学习]Python/Theano实现逻辑回归网络的代码分析
- 逻辑回归原理(python代码实现)
- SoftMax回归简介及python代码实现
- 机器学习逻辑回归:原理解析及代码实现
- 机器学习算法及代码实现--回归算法
- [吴恩达 DL]Class1 Week2 神经网络基础 + 逻辑回归代码实现
- Logistic Regression 逻辑回归算法例子,python代码实现
- 近期代码回归复习(3)包含字符 结构体 排序 多文件 链接 实现随机数
- 岭回归原理及代码实现
- 机器学习:逻辑回归原理及实现代码