机器学习实战第九章---树回归

第8章的线性回归,创建的模型需要拟合所有的样本点(局部加权线性回归除外)。当数据拥有众多特征而且特征之间的关系又比较复杂时,建立全局模型的想法就太难了。而且,实际生活中的问题很多都是非线性的,不可能使用全局线性模型拟合所有数据。

怎么解决不能用全局线性模型拟合复杂的数据呢?

一种可行方法可以考虑将数据集切分成很多易建模的数据,然后利用第八章的线性回归技术进行建模。如果首次切分后仍然难以拟合线性模型,那就继续切分。在这种切分方式下,树结构和回归法就相当有用。 

1.CART算法 

Classification And Regression Trees 分类回归树 既可分类,也可回归。

切分方式:二元切分

树的数据结构:固定的,用字典存储

字典的内容:1.待切分的特征

                      2.待切分的特征值

                      3.左子树。当不再需要切分时,也可以是单个值。

                      4.右子树。与左子树类似。

找到最佳的待切分特征:

如果该节点不能再分,将该节点存为叶节点

执行二元切分

往右子树调用createTree()方法

往左子树调用createTree()方法

树的类型:

                      1.回归树:每个叶节点包含单个值

                      2.模型树:每个叶节点包含一个线性方程

混乱度:       每条数据的值到均值的差值的平方和

1.CART用于回归

1.1  构建树

核心:找到数据的最佳二元切分方式

参数:控制函数的停止时机,避免过拟合。1.容许的误差下降值 2.切分的最小样本数    

          也称为预剪枝

#负责生成叶节点,该模型是目标变量的均值
def regLeaf(dataSet):
    return mean(dataSet[:,-1])
#计算目标变量的平方误差,借助于方差*N
def regErr(dataSet):
    return var(dataSet[:,-1])*shape(dataSet)[0]
    

2.树剪枝 

通过降低决策树的复杂度来避免过拟合的过程,称为剪枝

前面讲解的交叉验证也能避免过拟合 

剪枝:1.预剪枝:在构建树的过程进行剪枝

          2.后剪枝:需要使用测试集和训练集。从上而下找到叶节点,用测试集来判断将叶节点合并是否能降低测试误差。

3.模型树 

利用树生成算法对数据进行切分,且每份切分数据都很容易用线性模型表示

误差的计算:对于给定的数据集,应该先用线性模型进行拟合,计算真实目标值与模型预测值间的差值。 将这些差值的平方和就得到所需的误差

4.树回归与标准回归的比较 

模型树,回归树,以及简单的线性回归,哪种模型更好呢?可以通过计算相关系数,通过调用NumPy库中的命令corrcoef(yHat,y,rowvar=0)来求解

5.使用Python的Tkinker库创建GUI 

主要是在分析数据的步骤中,用Tkinker构建一个GUI来展示模型和数据

GUI可以帮助我们在预剪枝过程中测试不同参数(tolN,tolS)的影响,可以帮助我们选择模型。

猜你喜欢

转载自blog.csdn.net/qq_39394809/article/details/86217129