【Python机器学习】树回归——模型树

用树来对数据建模,除了把叶节点简单地设定为常数值之外,还有一种方法是把叶节点设定为分段线性函数,这类所谓的分段线性是指模型由多个线性片段组成。

如上图的数据,如果使用两条直线拟合是比一组常数来建模好的,可以设计两条分别从0.0-0.3、从0.3-1.0的直线,于是就得到两个线性模型,因为数据集里的一部分数据(0.0-0.3)以某个线性模型,而另一部分数据(0.3-1.0)则以另一个线性模型建模,因此就被称为分段线性模型。

决策树相比其他机器学习算法的优势之一在于结果更易理解。很显然,两条直线比很多节点组成一颗大树更容易解释,模型树的可解释性是它优于回归树的特点之一。另外,模型树也具有更高的预测准确度。

下面利用树生成算法对数据进行切分,且每份切分数据都很容易被线性模型所表示。该算法的关键在于误差的计算。

模型树的叶节点生成函数:

python 复制代码
def linearSolve(dataSet):
    m,n=shape(dataSet)
    X=mat(ones((m,n)))
    Y=mat(ones((m,1)))
    X[:,1:n]=dataSet[:,0:n-1]
    Y=dataSet[:,-1]
    xTx=X.T*X
    if linalg.det(xTx)==0.0:
        raise NameError('This matrix is singular, cannot do inverse,\n\
        try increasing the second value of ops')
    ws=xTx.I*(X.T*Y)
    return ws,X,Y

def modelLeaf(dataSet):
    ws,X,Y=linearSolve(dataSet)
    return ws

def modelErr(dataSet):
    ws,X,Y=linearSolve(dataSet)
    yHat=X*ws
    return sum(power(Y-yHat,2))

上述代码中第一个函数是linearSolve(),它会被其他两个函数调用,其主要功能是将数据集格式化成目标变量Y和自变量X。X和Y用于执行简单的线性回归。另外在这个函数中也应当注意,如果矩阵的逆不存在也会造成程序异常。

第二个函数modelLeaf(),当数据不再需要切分的时候它负责生成叶节点的模型。该函数在数据集上调用linearSolve()并返回回归系数ws。

最后一个函数是modelErr(),可以在给定的数据集上计算误差。它会被chooseBestSplit()调用来找到最佳的切分。该函数在数据集上调用linearSolve(),之后返回yHat和Y之间的平方误差。

运行:

python 复制代码
mymat2=mat(loadDataSet('test/exp2.txt'))
print(createTree(mymat2,modelLeaf,modelErr))

可以看到,代码以0.285477为分界创建了两个模型。而数据实际在0.3处分段。

createTree()生成的这两个线性模型分别是y=3.468+1.1852x和y=0.0016985+11.96477x,与用于生成该数据的真实模型非常接近。该数据实际是用模型y=3.5+1.0x和y=0+12x再加上高斯噪声生成的。

模型树、回归树,哪一种模型更好呢?一个比较客观的方法是计算相关系数,也称为值。该相关系数可以通过调用NumPy库中的命令corrcoef(yHat,y,rowvar=0)来求解,其中yHat是预测值,y是目标变量的实际值。

相关推荐
DashVector41 分钟前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
AI纪元故事会42 分钟前
【计算机视觉目标检测算法对比:R-CNN、YOLO与SSD全面解析】
人工智能·算法·目标检测·计算机视觉
音视频牛哥1 小时前
从协议规范和使用场景探讨为什么SmartMediaKit没有支持DASH
人工智能·音视频·大牛直播sdk·dash·dash还是rtmp·dash还是rtsp·dash还是hls
夏鹏今天学习了吗1 小时前
【LeetCode热题100(59/100)】分割回文串
算法·leetcode·深度优先
卡提西亚1 小时前
C++笔记-10-循环语句
c++·笔记·算法
还是码字踏实1 小时前
基础数据结构之数组的双指针技巧之对撞指针(两端向中间):三数之和(LeetCode 15 中等题)
数据结构·算法·leetcode·双指针·对撞指针
赞奇科技Xsuperzone1 小时前
DGX Spark 实战解析:模型选择与效率优化全指南
大数据·人工智能·gpt·spark·nvidia
音视频牛哥1 小时前
SmartMediaKit:如何让智能系统早人一步“跟上现实”的时间架构--从实时流媒体到系统智能的演进
人工智能·计算机视觉·音视频·音视频开发·具身智能·十五五规划具身智能·smartmediakit
喜欢吃豆1 小时前
OpenAI Agent 工具全面开发者指南——从 RAG 到 Computer Use —— 深入解析全新 Responses API
人工智能·microsoft·自然语言处理·大模型
读研的武2 小时前
DashGo零基础入门 纯Python的管理系统搭建
开发语言·python