【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是目标变量的实际值。

相关推荐
万粉变现经纪人2 小时前
如何解决 pip install 编译报错 ‘cl.exe’ not found(缺少 VS C++ 工具集)问题
开发语言·c++·人工智能·python·pycharm·bug·pip
r***11332 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
深度学习机器2 小时前
深度智能体框架DeepAgent剖析
人工智能·开源
星云数灵2 小时前
AI赋能传媒科技创新研究报告
人工智能·ai·大模型·生成式ai·ai赋能·传媒科技·传媒ai
子豪-中国机器人2 小时前
1030-csp 2019 入门级第一轮
算法
金融小师妹2 小时前
基于机器学习与深度强化学习:非农数据触发AI多因子模型预警!12月降息预期骤降的货币政策预测
大数据·人工智能·深度学习·1024程序员节
walnut_oyb3 小时前
arXiv|SARLANG-1M:用于 SAR 图像理解的视觉-语言建模基准
论文阅读·人工智能·机器学习·计算机视觉·语言模型·自然语言处理
GOTXX3 小时前
CANN特性能力深度解析:释放AI计算潜能
人工智能
___波子 Pro Max.3 小时前
Python类型注解详解与应用
python
jinxinyuuuus3 小时前
Info Flow:分布式信息采集、数据去重与内容分级的工程实现
人工智能·分布式·程序人生·生活