• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python机器学习实战之树回归详解

python 搞代码 4年前 (2022-01-08) 38次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了python机器学习实战之树回归的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了树回归的具体代码,供大家参考,具体内容如下

 #-*- coding:utf-8 -*- #!/usr/bin/python ''''' 回归树  连续值回归预测 的 回归树 ''' # 测试代码 # import regTrees as RT RT.RtTreeTest() RT.RtTreeTest('ex0.txt') RT.RtTreeTest('ex2.txt') # import regTrees as RT RT.RtTreeTest('ex2.txt',ops=(10000,4)) # import regTrees as RT RT.pruneTest() # 模型树 测试 # import regTrees as RT RT.modeTreeTest(ops=(1,10) # 模型回归树和普通回归树 效果比较 计算相关系数 # import regTrees as RT RT.MRTvsSRT() from numpy import * # Tab 键值分隔的数据 提取成 列表数据集 成浮点型数据 def loadDataSet(fileName):   # dataMat = []        # 目标数据集 列表 fr = open(fileName) for line in fr.readlines(): curLine = line.strip().split('\t') fltLine = map(float,curLine) #转换成浮点型数据 dataMat.append(fltLine) return dataMat # 按特征值 的数据集二元切分  特征(列)  对应的值 # 某一列的值大于value值的一行样本全部放在一个矩阵里,其余放在另一个矩阵里 def binSplitDataSet(dataSet, feature, value): mat0 = dataSet[nonzero(dataSet[:,feature] > value)[0],:][0] # 数组过滤 mat1 = dataSet[nonzero(dataSet[:,feature] <= value)[0],:][0] # return mat0,mat1 # 常量叶子节点 def regLeaf(dataSet):# 最后一列为标签 为数的叶子节点 return mean(dataSet[:,-1])# 目标变量的均值 # 方差 def regErr(dataSet): return var(dataSet[:,-1]) * shape(dataSet)[0]# 目标变量的平方误差 * 样本个数(行数)的得到总方差 # 选择最优的 分裂属性和对应的大小 def chooseBestSplit(dataSet, leafType=regLeaf, errType=regErr, ops=(1,4)): tolS = ops[0] # 允许的误差下降值 tolN = ops[1] # 切分的最少样本数量 if len(set(dataSet[:,-1].T.tolist()[0])) == 1: # 特征剩余数量为1 则返回 return None, leafType(dataSet)       #### 返回 1 #### m,n = shape(dataSet) # 当前数据集大小 形状 S = errType(dataSet) # 当前数据集误差 均方误差 bestS = inf; bestIndex = 0; bestValue = 0 for featIndex in range(n-1):# 遍历 可分裂特征 for splitVal in set(dataSet[:,featIndex]):# 遍历对应 特性的 属性值 mat0, mat1 = binSplitDataSet(dataSet, featIndex, splitVal)# 进行二元分割 if (shape(mat0)[0] <tolN) or (shape(mat1)[0] <tolN): continue #样本数量 小于设定值,则不切分 newS = errType(mat0) + errType(mat1)# 二元分割后的 均方差 if newS <bests: # 弱比分裂前小 则保留这个分类 bestindex=featIndex bestvalue=splitVal bests=newS if (s - bests)  tree['spVal']:   # 左树 if isTree(tree['left']): return treeForeCast(tree['left'], inData, modelEval)# 还是树 则递归调用 else: return modelEval(tree['left'], inData) # 计算叶子节点的值 并返回 else: if isTree(tree['right']):         # 右树 return treeForeCast(tree['right'], inData, modelEval) else: return modelEval(tree['right'], inData)# 计算叶子节点的值 并返回 # 得到预测值 def createForeCast(tree, testData, modelEval=regTreeEval): m=len(testData) yHat = mat(zeros((m,1)))#预测标签 for i in range(m): yHat[i,0] = treeForeCast(tr<p style="color:transparent">来源gao!daima.com搞$代!码网</p>ee, mat(testData[i]), modelEval) return yHat # 常量回归树和线性模型回归树的预测结果比较 def MRTvsSRT(): TestMat = mat(loadDataSet('bikeSpeedVsIq_test.txt')) TrainMat = mat(loadDataSet('bikeSpeedVsIq_train.txt')) # 普通回归树 预测结果 # 得到普通回归树树 StaTree = createTree(TrainMat, ops=(1,20)) # 得到预测结果 StaYHat = createForeCast(StaTree, TestMat[:,0], regTreeEval)# 第一列为 自变量 # 预测结果和真实标签的相关系数 StaCorr = corrcoef(StaYHat, TestMat[:,1], rowvar=0)[0,1] # NumPy 库函数 # 模型回归树 预测结果 # 得到模型回归树 ModeTree = createTree(TrainMat,leafType=modelLeaf, errType=modelErr, ops=(1,20)) # 得到预测结果 ModeYHat = createForeCast(ModeTree, TestMat[:,0], modelTreeEval) # 预测结果和真实标签的相关系数 ModeCorr = corrcoef(ModeYHat, TestMat[:,1], rowvar=0)[0,1] # NumPy 库函数 print "普通回归树 预测结果的相关系数R2: %f" %(StaCorr) print "模型回归树 预测结果的相关系数R2: %f" %(ModeCorr) if ModeCorr>StaCorr: print "模型回归树效果优于普通回归树" else: print "回归回归树效果优于模型普通树" 

以上就是python机器学习实战之树回归详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python机器学习实战之树回归详解
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址